Dies ist der Befehl arm-linux-gnueabi-g++, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
gcc - GNU-Projekt C- und C++-Compiler
ZUSAMMENFASSUNG
gcc [-c|-S|-E] [-std=Standard]
[-g] [-S] [-OGrad des ]
[-Wwarnen...] [-Wpedantisch]
[-Idir...] [-Ldir...]
[-DMakro[=definiere]...] [-UMakro]
[-fzu erhalten...] [-mMaschinen-Option...]
[-o Outfile] [@Datei] im Ordner...
Hier sind nur die nützlichsten Optionen aufgeführt; den Rest siehe unten. g ++ akzeptiert
meistens die gleichen Optionen wie gcc.
BESCHREIBUNG
Wenn Sie GCC aufrufen, führt es normalerweise Vorverarbeitung, Kompilierung, Assemblierung und Verknüpfung durch.
Mit den „Gesamtoptionen“ können Sie diesen Vorgang zwischenzeitlich stoppen. Zum
Beispiel das -c Option sagt, dass der Linker nicht ausgeführt werden soll. Dann besteht die Ausgabe aus Objekt
Dateien, die vom Assembler ausgegeben werden.
Andere Optionen werden an eine Verarbeitungsstufe weitergegeben. Einige Optionen steuern die
Präprozessor und andere der Compiler selbst. Noch andere Optionen steuern den Assembler und
Linker; die meisten davon sind hier nicht dokumentiert, da Sie sie nur selten verwenden müssen.
Die meisten Befehlszeilenoptionen, die Sie mit GCC verwenden können, sind für C-Programme nützlich; Wenn
eine Option ist nur bei einer anderen Sprache (normalerweise C++) sinnvoll, die Erklärung sagt es so
ausdrücklich. Wenn die Beschreibung für eine bestimmte Option keine Quelle enthält
Sprache können Sie diese Option mit allen unterstützten Sprachen verwenden.
Die gcc Programm akzeptiert Optionen und Dateinamen als Operanden. Viele Optionen haben mehrere
Buchstabennamen; daher können mehrere Ein-Buchstaben-Optionen nicht gruppiert werden: -dv ist sehr
anders als -d -v.
Sie können Optionen und andere Argumente mischen. In den meisten Fällen ist die von Ihnen verwendete Reihenfolge nicht
Gegenstand. Die Reihenfolge spielt eine Rolle, wenn Sie mehrere Optionen derselben Art verwenden; zum Beispiel, wenn
du spezifizierst -L mehrfach werden die Verzeichnisse in der angegebenen Reihenfolge durchsucht. Ebenfalls,
die Platzierung der -l Option ist von Bedeutung.
Viele Optionen haben lange Namen, die mit beginnen -f oder -W---zum Beispiel,
-fmove-loop-invarianten, -Wformat und so weiter. Die meisten davon haben sowohl positive als auch negative
Formen; die Negativform von -ffoo is -fno-foo. Dieses Handbuch dokumentiert nur eines davon
zwei Formulare, je nachdem, welches nicht die Standardeinstellung ist.
OPTIONAL
Option Zusammenfassung
Hier ist eine Zusammenfassung aller Optionen, gruppiert nach Typ. Erklärungen sind im Folgenden
.
Insgesamt: Optionen
-c -S -E -o Datei -keine-kanonischen-Präfixe -Rohr -Pass-Exit-Codes -x Sprache -v
-### --help[=Klasse[, ...]] --target-help --Version -Verpackung @Datei -fplugin=Datei
-fplugin-arg-Name=arg -fdump-ada-spec[-schlank] -Fada-Spec-Eltern =Einheit
-fdump-go-spec=Datei
C Sprache Optionen
-ansi -std=Standard -fgnu89-inline -aux-info Dateinamen
-falsche-parameterlose-variadische-Funktionen -fno-asm -fno-eingebaut -fno-eingebaut-Funktion
-gehostet -freistehend -fopenac -fopenmp -fopenmp-simd -fms-Erweiterungen
-fplan9-Erweiterungen -Trigraphen -traditionell -traditionell-cpp -Brache-Single-Präzision
-fcond-Mismatch -Flachs-Vektor-Umrechnungen -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char
C + + Sprache Optionen
-fabi-version=n -fno-Zugriffskontrolle -fcheck-neu -fconstexpr-Tiefe=n
-ffriend-Injektion -fno-elide-Konstruktoren -fno-enforce-eh-specs -ffor-Scope
-fno-for-Scope -fno-gnu-Schlüsselwörter -fno-implizite-Vorlagen
-fno-implizit-inline-templates -fno-implementieren-inlines -fms-Erweiterungen
-fno-nonansi-eingebaut -fnotrow-opt -fno-operatornamen -fno-optional-diags
-fpermissiv -fno-hübsche-Vorlagen -frepo -fno-rtti -fsized-Freigabe -fstats
-ftemplate-backtrace-limit=n -ftemplate-Tiefe=n -fno-threadsafe-statics
-sicherung-cxa-atexit -fno-schwach -nostdinc++ -fvisibility-inlines-hidden
-fvtable-verify=[std|vorinit|keine] -fvtv-zählt -fvtv-debug -fvisibility-ms-kompat
-fext-numerische-literale -Wabi=n -Wabi-Tag -Wconversion-null -Wctor-dtor-Datenschutz
-Wdelete-non-virtual-dtor -Wliteral-Suffix -Verwirrung -Wnoaußer -Wnicht-virtuelles-dtor
-Schreiber -Weffc++ -Wstrict-Null-Sentinel -Wno-non-template-friend -Wold-Style-Besetzung
-Woverloaded-virtuell -Wno-pmf-Konvertierungen -Wsign-Promo
Objective-C und Objective-C ++ Sprache Optionen
-fconstant-string-class=Klassenname -fgnu-Laufzeit -fnext-Laufzeit -fno-nil-Empfänger
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-direktversand -fobjc-Ausnahmen
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -fno-local-ivars
-fivar-sichtbarkeit=[Öffentlichkeit|geschützt|privat|Paket] -objc-Klassen ersetzen
-fzero-link -gen-dekls -Wassign-Abfangen -Wno-Protokoll -Wselektor
-Wstrict-Selector-Match -Wundeclared-Selektor
Sprache Unabhängig Optionen
-fNachrichtenlänge=n -fdiagnostics-show-location=[einmal|jede Linie]
-fdiagnostics-color=[Auto|niemals|immer] -fno-diagnostics-show-option
-fno-diagnostics-show-caret
Warnung Optionen
-fsyntax-nur -fmax-Fehler=n -Wpedantisch -pedantische-Fehler -w -Wextra -Wand
-Watdress -Waggregate-Rückgabe -Waggressive-Loop-Optimierungen -Warray-Grenzen
-Warray-Grenzen=n -Wbool-vergleichen -Wno-Attribute -Wno-eingebautes-Makro neu definiert
-Wc90-c99-kompatibel -Wc99-c11-kompatibel -Wc++-kompatibel -Wc++11-kompatibel -Wc++14-kompatibel
-Wcast-Ausrichtung -Wcast-Qualität -Wchar-Indexe -Wclobbered -WKommentar
-Wbedingt unterstützt -WUmwandlung -Wcoverage-Mismatch -Wdate-Uhrzeit
-Wdelete-unvollständig -Wno-cpp -Wno-veraltet -Wno-veraltet-Deklarationen
-Wno-designated-init -Wdisabled-Optimierung -Wno-verworfen-Qualifier
-Wno-discarded-array-Qualifiers -Wno-Div-durch-Null -Doppel-Promotion -Wempty-Körper
-Wenum-vergleichen -Wno-Endif-Etiketten -Fehler -Werror=* -Wfatal-Fehler -Wfloat-gleich
-Wformat -Wformat=2 -Wno-Format-enthält-nul -Wno-format-extra-args
-Wformat-nicht literal -Wformat-Sicherheit -Wformat-Unterschrift -Wformat-y2k
-Wframe-größer-als=len -Wno-free-nonheap-Objekt -Wjump-fehlt-init
-Wignored-Qualifier -Winkompatible-Zeiger-Typen -Wimplizit
-Wimplicit-Funktionsdeklaration -Wimplicit-int -Winit-Selbst -Winline
-Wno-int-Konvertierung -Wno-int-to-pointer-cast -Wno-ungültig-offsetof -Winvalid-pch
-Wgrößer-als=len -Wunsafe-Loop-Optimierungen -Wlogische-Op -Wlogische-nicht-Klammern
-Wlang-lang -Wmain -Wvielleicht-nicht initialisiert -Wmemset-transponierte-args -Wmissing-Klammern
-Wfehlende Feldinitialisierer -Wfehlende-include-verzeichnisse -Wno-Multichar -Wnonnull
-Wnormalisiert=[keine|id|nfc|nfkc]
-Wodr -Wno-Überlauf -Wopenmp-simd -Überlänge-Saiten -Verpackt
-Wpacked-bitfield-kompatibel -Gepolstert - Klammern -Wpedantic-ms-Format
-Wno-pedantic-ms-Format -Wpointer-arith -Wno-Zeiger-auf-int-cast -Wredundant-Decls
-Wno-return-local-adr -Rückgabe-Typ -WSequenz-Punkt -Schatten -Wno-Schatten-Ivar
-Wshift-count-negativ -Wshift-Zähler-Überlauf -Wsign-vergleichen -Wsign-Konvertierung
-Wfloat-Konvertierung -Wsizeof-pointer-memaccess -Wsizeof-array-Argument
-Wstack-Schutz -Wstack-Nutzung=len -Wstrict-Aliasing -Wstrict-Aliasing=n
-Strenger-Überlauf -Wstrict-overflow=n -Wsuggest-Attribut=[auch|const|keine Rückkehr|Format]
-Wsuggest-final-types -Wsuggest-final-Methoden -Wsuggest-Override
-Wmissing-Format-Attribute -Wschalter -Wswitch-Standard -Schalter-Aufzählung -Wswitch-bool
-Wsync-nand -Wsystem-Header -Wtrampoline -Wtrigraphen -Wtype-Grenzen -Wundef
-Wuninitialisiert -Wunknown-Pragmas -Wno-Pragmas -Wunsuffixed-Float-Konstanten
-Unbenutzt -Wunused-Funktion -Wunused-Label -Wunused-local-typedefs -Wunused-Parameter
-Wno-unused-resultat -Wunused-Wert -Wunused-Variable -Wunused-but-set-Parameter
-Wunused-aber-set-variabel -Wuseless-Besetzung -Wvariadic-Makros
-Wvektor-Betriebsleistung -Wvla -Wvolatile-register-var -Wwrite-Strings
-Wzero-as-null-pointer-constant
C und Nur Ziel-C Warnung Optionen
-Wbad-Funktions-Besetzung -Wmissing-Erklärungen -Wmissing-Parameter-Typ
-Wmissing-Prototypen -Wnested-externs -Wold-Style-Deklaration -Wold-Style-Definition
-Strenge-Prototypen -Wtraditionell -Wtraditionelle-Umwandlung
-WErklärung-nach-Erklärung -Wpointer-Zeichen
Fehlerbeseitigung Optionen
-dBriefe -Dumpspecs -Kippmaschine -Dumpversion -fsanitize=Stil -fsanitize-recover
-fsanitize-recover=Stil -fasan-shadow-offset=Anzahl
-fsanitize-undefined-trap-on-error -fcheck-pointer-bounds -fchkp-check-incomplete-type
-fchkp-erstes-Feld-hat-eigene-Grenzen -fchkp-narrow-bounds
-fchkp-narrow-to-innermost-array -fchkp-optimieren -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-Funktionen -fchkp-use-static-bounds
-fchkp-use-static-const-bounds -fchkp-treat-zero-dynamic-size-as-unendlich
-fchkp-check-read -fchkp-check-read -fchkp-check-write -FCHKP-Store-Bounds
-fchkp-instrument-aufrufe -fchkp-instrument-marked-only -fchkp-use-wrapper
-fdbg-cnt-liste -fdbg-cnt=Gegenwertliste -fdisable-ipa-Pass_Name
-fdisable-rtl-Pass_Name -fdisable-rtl-Passname=Bereichsliste -fdisable-tree-Pass_Name
-fdisable-tree-Passname=Bereichsliste -fdump-noaddr -fdump-unnummeriert
-fdump-unnummerierte-links -fdump-Übersetzungseinheit[-n] -fdump-Klassenhierarchie[-n]
-fdump-ipa-all -fdump-ipa-cgraph -Fdump-ipa-inline -fdump-pässe -fdump-Statistik
-fdump-tree-all -fdump-tree-original[-n] -fdump-tree-optimiert[-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[-roh] -fdump-tree-dom[-n]
-fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-tree-sink -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-frei[-n]
-fdump-tree-vtable-verify -fdump-tree-vrp[-n] -Fdump-baum-storeccp[-n]
-fdump-final-insns=Datei -fcompare-debug[=entscheidet sich] -fcompare-debug-second
-feliminate-zwerg2-dups -fno-eliminiere-nicht verwendete-debug-Typen
-feiminate-unused-debug-symbols -femit-class-debug-immer -abwehrbar-Art-passieren
-abwehrbar-Art-passieren=Bereichsliste -fdebug-types-Sektion -fmem-report-wpa -fmem-Bericht
-fpre-ipa-mem-bericht -fpost-ipa-mem-bericht -fprofile-Bögen -fopt-info
-fopt-info-Optionen[=Datei] -frandom-Seed=Anzahl -fsched-verbose=n -fsel-sched-verbose
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-Nutzung -Ftest-Abdeckung
-ftime-Bericht -fvar-tracking -fvar-Tracking-Zuweisungen
-fvar-tracking-zuweisungen-umschalten -g -gGrad des -gtoggle -gcoff -Zwerg-Version -ggdb
-grecord-gcc-switches -gno-record-gcc-switches -gstabs -gstabs+ -gstrict-Zwerg
-gno-strenger-zwerg -gvms -gxcoff -gxcoff+ -gz[=tippe] -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-prefix-map=alt=neu -femit-struct-debug-baseonly
-femit-struct-debug-reduziert -femit-struct-debug-detailliert[=Spezifikationsliste] -p -S
-print-dateiname=Bibliothek -print-libgcc-Dateiname -Multi-Verzeichnis drucken
-print-multi-lib -print-multi-os-Verzeichnis -print-prog-name=Programm
-Suchverzeichnisse drucken -Q -Print-Sysroot -print-sysroot-headers-suffix -Save-Temps
-save-temps=cwd -save-temps=obj -Zeit[=Datei]
OPTIMIERUNG Optionen
-faggressive-loop-Optimierungen -falign-Funktionen[=n] -falign-springt[=n]
-falign-labels[=n] -falign-Schleifen[=n] -fassoziative-mathematik -fauto-Profil
-fauto-Profil[=Weg] -fauto-inc-dez -fbranch-Wahrscheinlichkeiten
-fbranch-target-load-optimize -fbranch-target-load-optimize2 -fbtr-bb-exklusiv
-fcaller-speichert -fcheck-data-deps -fcombine-Stack-Anpassungen -fconserve-stack
-fvergleiche-elim -fcprop-register -fCrossspringen -fcse-follow-jumps -fcse-skip-blöcke
-fcx-fortran-Regeln -fcx-limited-range -fdata-Abschnitte -fdce -fdelayed-branch
-fdelete-null-pointer-checks -fdevirtualisieren -fdevirtualize-spekulativ
-fdevirtualize-at-ltrans -fdse -ängstlich-inlining -fipa-sra -Kostengünstige-Optimierungen
-ffat-lto-Objekte -ffast-mathe -nur-endlich-mathematik -float-store
-fexcess-precision=Stil -fforward-propagieren -ffp-Vertrag=Stil -fFunktions-Abschnitte
-fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identität -fgcse-sm
-fhoist-angrenzende-Lasten -fif-Konvertierung -fif-conversion2 -findirect-Inlining
-finline-Funktionen -finline-Funktionen-einmal genannt -finline-limit=n
-finline-kleine-Funktionen -fipa-cp -fipa-cp-klon -fipa-cp-Ausrichtung -fipa-pta
-fipa-Profil -fipa-pure-const -fipa-Referenz -fipa-icf -fira-Algorithmus=Algorithmus
-fira-region=Region -fira-hebezeug-druck -fira-Schleifendruck -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbose=n -fisolate-fehlerhafte-Pfade-dereferenzieren
-fesolate-fehlerhafte-Pfade-Attribut -fünf Punkte -fkeep-inline-Funktionen
-Fekee-statische Konst -Five-Range-Schwindung -Floop-Block -floop-Austausch
-floop-Streifen-Mine -floop-unroll-and-jam -floop-nest-optimieren -floop-parallelize-all
-flra-remat -flto -flto-Komprimierungsstufe -flto-partition=alg -flto-Bericht
-flto-report-wpa -fmerge-all-Konstanten -fmerge-Konstanten -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-invarianten -fno-zweigzahl-reg
-fno-aufschieben-pop -fno-Funktion-cse -fno-rate-Zweigwahrscheinlichkeit -fno-inline
-fno-math-fehlernr -fno-Guckloch -fno-guckloch2 -fno-sched-interblock -fno-plan-spez
-fno-signed-nulls -fno-toplevel-reorder -fno-trapping-mathe
-fno-null-initialisiert-in-bss -fomit-Frame-Zeiger -foptimize-Geschwisteranrufe
-fpartielles Inlining -fpeel-Schleifen -fpredictive-commoning -fprefetch-loop-arrays
-fprofile-bericht -fprofile-Korrektur -fprofile-dir=Weg -fprofile-generieren
-fprofile-generieren=Weg -fprofile-verwenden -fprofile-use=Weg -fprofile-Werte
-fprofile-reorder-Funktionen -Reziproke-Mathematik -kostenlos -Freinamen-Register
-freorder-Blöcke -Blöcke-und-Partition neu bestellen -freorder-Funktionen
-frerun-cse-after-loop -freschedule-modulo-scheduled-loops -grundlegende-mathematik
-fsched2-use-superblocks -fsched-Druck -fsched-spec-load
-fsched-spec-load-gefährlich -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n]
-fsched-group-heuristik -fsched-kritischer-Pfad-Heuristik -fsched-spec-insn-heuristik
-fsched-rank-Heuristik -fsched-last-insn-heuristik -fsched-dep-count-heuristisch
-fSchedule-Fusion -fschedule-insns -fschedule-insns2 -fsection-Anker
-fselektive-Planung -fselektive Planung2 -fsel-sched-pipelining
-fsel-sched-pipelining-outer-loops -fsemantische-Interposition -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-breite Typen -fssa-phiopt -stapelschutz -fstack-protector-all
-fstack-protector-stark -fstack-protector-explizit -fstdarg-opt -fstrict-aliasing
-fstrict-Überlauf -fThread-Sprünge -Fracer -ftree-bit-ccp -ftree-eingebauter-Aufruf-dce
-ftree-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
-ftree-copyrename -ftree-dce -Ftree-Dominator-Opts -ftree-dse -ftree-forwprop
-frei -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop -Ftree-Loop-Verteilung -ftree-loop-patterns verteilen
-ftree-loop-ivcanon -Ftree-Loop-Linear -ftree-loop-optimieren -ftree-loop-vektorisieren
-ftree-parallelize-loops=n -ftree-pre -ftree-partial-pre -ftree-pta -ftree-reassoc
-ftree-waschbecken -ftree-slsr -ftree-sra -Ftree-Switch-Umwandlung -ftree-tail-merge
-ftree-ter -ftree-vektorisieren -ftree-vrp -Spaß-zu-einer-Zeit -funroll-all-loops
-Funroll-Schleifen -funsafe-loop-optimierungen -funsafe-mathematik-optimierungen
-Funswitch-Schleifen -fipa-ra -fvariable-expansion-in-roller -fvect-cost-model -fvpt
-fweb -fganze-Programm -fwpa -fuse-linker-plugin --param Name=Wert -O -O0 -O1 -O2
-O3 -Du -Ofast -Og
Präprozessor Optionen
-AFrage=beantworten -EIN-Frage[=beantworten] -C -dd -di -dm -dN -DMakro[=definiere] -E -H
-idrafter dir -einschließen Datei -Makros Datei -iPräfix Datei -imitPräfix dir
-iwithprefixbefore dir -isystem dir -imultilib dir -isysroot dir -M -MM -MF -Mg
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-Makro-Erweiterung -fworking-Verzeichnis
-neu zuordnen -Trigraphen -undef -UMakro -Wp,zu erhalten -Xpräprozessor zu erhalten -keine-integrierte-cpp
Monteur Option
- Wa,zu erhalten -Xassembler zu erhalten
Links Optionen
Objektdateiname -sicherung-ld=Linker -lBibliothek -nostartfiles -nodefaultlibs -nostdlib
-Kuchen -rdynamisch -s -statisch -static-libgcc -static-libstdc++ -statisch-libasan
-static-libtsan -Static-Liblsan -static-libubsan -static-libmpx -static-libmpxwrappers
-geteilt -shared-libgcc -symbolisch -T Skript -WL,zu erhalten -Xlinker zu erhalten -u Symbol -z
Stichwort
Verzeichnis Optionen
-BPräfix -Idir -iplugindir=dir -Ich zitieredir -Ldir -spezifikationen=Datei -I- --sysroot=dir
--no-sysroot-suffix
Maschine Abhängig Optionen
AAArch64 Optionen -mabi=Name -mbig-endian -mlittle-endian -mgeneral-regs-only
-mcmodel=winzig -mcmodel=klein -mcmodel=groß -mstrict-align -momit-Blatt-Rahmen-Zeiger
-mno-leaf-frame-pointer auslassen -mtls-dialekt=beschr -mtls-dialekt=traditionell
-mtls-Größe=Größe -mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769
-mfix-cortex-a53-843419 -mno-fix-cortex-a53-843419 -marsch=Name -mcpu=Name
-mtune=Name
Adapteva Dreikönigsfest Optionen -mhalf-reg-Datei -mrefer-short-insn-regs -filialkosten=num
-mcmove -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modifizieren
-mstack-offset=num -mround-nächstes -mlong-anrufe -mkurze-Anrufe -mklein16 -mfp-mode=Modus
-mvect-double -Max-vect-align =num -msplit-vecmove-früh -m1reg-reg
ARC Optionen -mbarrel-Shifter -mcpu=CPU -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-kompakt -mdpfp-schnell -mno-dpfp-lrsr -mea -mno-mpy -mmul32x16 -mmul64 -mnorm
-mspfp -mspfp-kompakt -mspfp-schnell -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
-mlock -mmac-d16 -mmac-24 -mrtsc -mswap -Telefonie -mxy -missize -mannotate-align
-marclinux -marclinux_prof -mepilog-cfi -mlong-anrufe -mmedium-Anrufe -msdaten
-mucb-mcount -mvolatile-cache -bösartiger Ruf -mauto-modify-reg -mbbit-Guckloch -mno-brcc
-mcase-Vektor-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi -mexpand-adddi
-indizierte-Lasten -mlra -mlra-priorität-none -mlra-priority-compact mlra-Priorität-
nicht kompakt -mno-Millicode -Mischcode -mq-Klasse -mRcq -mRcw -msize-level=Grad des
-mtune=CPU -mmultkosten=num -munalign-prob-threshold=Wahrscheinlichkeit
ARM Optionen -maps-Rahmen -mno-apcs-Rahmen -mabi=Name -maps-stack-check
-mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-wiedereintretend
-mno-apcs-wiedereintretend -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian
-mfloat-abi=Name -mfp16-format=Name -mhumb-interwork -mno-daumen-interwork -mcpu=Name
-marsch=Name -mfpu=Name -mtune=Name -mprint-tune-info -mstructure-size-boundary=n
-mabort-auf-noreturn -mlong-anrufe -mno-lange-Anrufe -msingle-pic-base
-mno-Einzelbildbasis -mpic-register=reg -mnop-fun-dllimport -mpoke-Funktionsname
-mtdaumen -mar -mtpcs-Rahmen -mtpcs-Blatt-Rahmen -mcaller-super-interworking
-mcallee-super-interworking -mtp=Name -mtls-dialekt=Dialekt -mword-umzüge
-mfix-cortex-m3-ldrd -unaligned-access -mneon-für-64bits -mslow-flash-daten
-masm-syntax-unified -mbeschränken-es
AVR Optionen -mmcu=MCU -maccumulate-args -filialkosten=kosten -mcall-prologe -minze8
-Mn_flash =Größe -mno-unterbricht -Entspann dich -mrmw -mstrict-X -Mtiny-Stack -nodevicelib
-Waddr-Space-Convert
Blackfin Optionen -mcpu=CPU[-vatervision] -msim -momit-Blatt-Rahmen-Zeiger
-mno-leaf-frame-pointer auslassen -mspecld-Anomalie -mno-specld-anomalie -mcsync-Anomalie
-mno-csync-anomalie -mlow-64k -mno-low64k -mstack-check-l1 -Mitte-geteilte-Bibliothek
-mno-id-shared-library -mshared-library-id=n -mleaf-id-shared-library
-mno-leaf-id-shared-library -msep-Daten -mno-sep-daten -mlong-anrufe -mno-lange-Anrufe
-mfast-fp -Minline-plt -mmulticore -mcorea -mcoreb -msdram -micplb
C6X Optionen -mbig-endian -mlittle-endian -marsch=CPU -msim -msdata=sdata-typ
CRIS Optionen -mcpu=CPU -marsch=CPU -mtune=CPU -mmax-Stapelrahmen=n
-Melinux-stacksize =n -metrax4 -metrax100 -mpdebug -mcc-init -mno-nebenwirkungen
-mstack-align -mdata-align -mconst-ausrichten -m32-bit -m16-bit -m8-bit
-mno-prolog-epilog -mno-gotplt -melfe -maout -Melinux -mlinux -sim -sim2
-mmul-Bug-Workaround -mno-mul-bug-workaround
CR16 Optionen -mmac -mcr16cplus -MCR16C -msim -minze32 -mbit-ops -mdata-model=Modell
Darwin Optionen -all_load -allowable_client -Bogen -arch_errors_fatal -arch_only
-bind_at_load -bündeln -bundle_loader -Kundenname -kompatibilitätsversion
-aktuelle Version -dead_strip -Abhängigkeitsdatei -dylib_file -dylinker_install_name
-dynamisch -dynamische lib -exportierte_Symbolliste -Dateiliste -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iFramework
-image_base -drin -Installationsname -keep_private_externs -multi_modul
-multiply_definiert -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -noprebind
-naseglinkedit -pagezero_size -vorbinden -prebind_all_twolevel_modules -privates_bundle
-read_only_relocs -sekt ausrichten -sektenobjektsymbole -warum? -seg1adr -sekt erstellen
-sektenobjektsymbole -Sektoren -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 -einzelnes_modul -statisch -Unterbibliothek -sub_regenschirm
-Namensraum auf zwei Ebenen -Regenschirm -nicht definiert -unexported_symbols_list
-weak_reference_mismatches -Whatsloaded -F -geguckt -gvoll -mmacosx-version-min=Version
-mkernel -mone-byte-bool
Dezember Aftershave Optionen -mno-fp-regs -msoft-float -mieee -mieee-mit-ungenau
-mieee-konform -mfp-trap-mode=Modus -mfp-rundungsmodus=Modus -mtrap-precision=Modus
-mbuild-Konstanten -mcpu=CPU-Typ -mtune=CPU-Typ -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -mkleine-Daten -mlarge-data -mkleiner-text
-mlarge-text -memory-latency=Zeit
FR30 Optionen -mkleines-Modell -mno-lsim
FRV Optionen -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mdoppelt -mno-doppelt -Medien -mno-media
-mmulad -mno-muladd -mfdpic -Minline-plt -mgprel-ro -multilib-bibliothek-pic
-mlinked-fp -mlong-anrufe -bösartige-Etiketten -mlibrary-pic -Macc-4 -Macc-8 -mpack
-mno-pack -mno-flaggen -mcond-move -mno-cond-move -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-Zweig
-mno-vliw-Zweig -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-stats -mTLS -mtl -mcpu=CPU
GNU / Linux Optionen -mlibc -muclibc -musl -mbionisch -Mandroid -tno-android-cc
-tno-android-ld
H8 / 300 Optionen -Entspann dich -Mh -Frau -Mn -mexr -mno-exr -minze32 -bösartig-300
HPPA Optionen -marsch=Architektur-Typ -mdisable-fpregs -mdisable-indexing
-mfast-indirekte-Aufrufe -mg -mgnu-ld -mhp-ld -mfixed-range=Registerbereich
-mSprung in Verzögerung -mlinker-opt -mlong-anrufe -mlong-load-store -mno-disable-fpregs
-mno-disable-indexing -mno-schnelle-indirekte-Aufrufe -MNO-Gas -mno-Sprung-in-Verzögerung
-mno-Long-Load-Store -Mno-portable Runtime -Mno-soft-Float -mno-space-regs
-msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-Laufzeit
-mschedule=CPU-Typ -Mspace-Regs -msi -mwsio -munix=unix-std -nolibdld -statisch
-fäden
IA-64 Optionen -mbig-endian -mlittle-endian -mgnu-wie -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregister-namen -msdaten -mno-sdata -mconstant-gp -mauto-pic
-verwirrt-wahnsinnig -minline-float-divide-min-latenz -minline-float-divide-max-Durchsatz
-mno-inline-float-divide -minline-int-divide-min-Latenz
-minline-int-divide-max-Durchsatz -Mno-inline-in-Divide -minline-sqrt-min-Latenz
-minline-sqrt-max-Durchsatz -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bits
-mfixed-range=Registerbereich -mtls-Größe=tls-Größe -mtune=CPU-Typ -milp32 -mlp64
-Med-BR-Daten-Spec -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec
-msched-ar-in-Datenspezifikation -msched-in-control-spez -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-nach-jedem-Zyklus
-msched-count-spec-in-kritischer-Pfad -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit
-msched-max-memory-insns=max-insns
LM32 Optionen -mbarrel-shift-aktiviert -mdivide-aktiviert -mmultiply-aktiviert
-msign-extend-enabled -muser-aktiviert
M32R/D Optionen -m32r2 -m32rx -m32r -mdebug -bösartige-Schleifen -mno-align-loops
-Missue-Rate=Anzahl -filialkosten=Anzahl -mmodel=Code-Größe-Modell-Typ -msdata=Daten-
tippe -mno-Spülfunkt -mflush-func=Name -mno-flush-trap -mflush-trap=Anzahl -G num
M32C Optionen -mcpu=CPU -msim -memregs=Anzahl
M680x0 Optionen -marsch=Bogen -mcpu=CPU -mtune=Melodie -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbitfeld -mno-Bitfeld -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mkurz -mno-kurz -mhard-float -m68881 -msoft-float -mpcrel
-bösartig-int -mstrict-align -msep-Daten -mno-sep-daten -mshared-library-id=n
-Mitte-geteilte-Bibliothek -mno-id-shared-library -mxgot -mno-xgot
MCore Optionen -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-unmittelbar
-mno-relax-unmittelbar -mwide-bitfields -mno-wide-bitfields -m4Byte-Funktionen
-mno-4byte-Funktionen -mcallgraph-Daten -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-inkrement
MdEP Optionen -mabsdiff -Mall-Opts -durchschnittlich -mbased=n -mbitops -mc=n -McLip
-mconfig=Name -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-flüchtig -ml
-mleadz -mm -mminmax -mmult -mno-opts -mwiederholen -Frau -msatur -msdram -msim -msimnovec
-mtf -mtiny=n
MicroBlaze Optionen -msoft-float -mhard-float -mklein-teilt -mcpu=CPU -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-Barrel-Shift -mxl-muster-vergleichen -mxl-stack-check
-mxl-gp-opt -mno-clearbss -mxl-multiplizieren-hoch -mxl-float-convert -mxl-float-sqrt
-mbig-endian -mlittle-endian -mxl-nachbestellen -mxl-modus-App-Modell
MIPS Optionen -DER -EB -marsch=Bogen -mtune=Bogen -Mips1 -Mips2 -Mips3 -Mips4
-Mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -Mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -Mips16 -mno-mips16 -mflip-mips16 -minterlink-komprimiert
-mno-interlink-komprimiert -minterlink-mips16 -mno-interlink-mips16 -mabi=abi
-mabicalls -mno-abicals -mshared -mno-geteilt -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float -mno-float
-msingle-float -mdouble-float -modd-spreg -mno-ungerade-spreg -mabs=Modus -mnan=Codierung
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -meva -mno-eva -mvirt -mno-virt
-mxpa -mno-xpa -mmicromips -mno-micromips -mfpu=fpu-typ -msmartmips -mno-smartmips
-beschädigt-single -mno-gepaart-single -mdmx -mno-mdmx -mips3d -mno-mips3d -MMT
-mno-mt -mlsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum
-mlocal-sdata -mno-local-sdata -mextern-sdata -Mno-extern-sdata -mgpopt -mno-gopt
-eingebettete-Daten -mno-eingebettete-Daten -muninit-const-in-rodata
-mno-unit-const-in-rodata -mcode-lesbar=Einstellung -msplit-Adressen
-mno-split-adressen -mexplicit-relocs -mno-explicit-relocs -mcheck-null-division
-mno-check-null-division -mdivide-fallen -mdivide-breaks -mmemcpy -Mno-memcpy
-mlong-anrufe -mno-lange-Anrufe -mmad -mno-verrückt -mimadd -mno-imadd -verwirrt-wahnsinnig
-mno-fusion-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=Funkt -mno-Spülfunkt -filialkosten=num -niederlassungswahrscheinlich
-mno-Filiale-wahrscheinlich -mfp-Ausnahmen -mno-fp-Ausnahmen -mvr4130-ausrichten -mno-vr4130-ausrichten
-msynci -mno-synci -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-adresse
Mmix Optionen -mlibfuncs -mno-libfuncs -Mepsilon -mno-epsilon -mabi=gnu
-Mabi = mmixware -mzero-erweitern -mknuthdiv -mtoplevel-symbole -melfe -filiale-vorhersage
-mno-branch-predict -mbase-Adressen -mno-base-adressen -msingle-exit
-mno-Single-Exit
MN10300 Optionen -Mult-Bug -mno-multi-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=Zentralprozessor-
tippe -mreturn-pointer-on-d0 -mno-crt0 -Entspann dich -mliw -msetlb
Moxie Optionen -meb -mel -mmul.x -mno-crt0
MSP430 Optionen -msim -masm-hex -mmcu= -mcpu= -mgroß -mklein -Entspann dich -mhwmult= -minrt
NDS32 Optionen -mbig-endian -mlittle-endian -mreduced-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-Vektorgröße=num
-mcache-block-size=num -marsch=Bogen -mcmodel=Code-Modell -mctor-dtor -Entspann dich
Kinder II Optionen -G num -mgpopt=zu erhalten -mgpopt -Mno-gpopt -mel -meb -mno-Bypass-Cache
-mBypass-Cache -mno-cache-flüchtig -mcache-flüchtig -mno-fast-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -MHW-Mulx -mno-hw-mulx -mno-hw-div -MHW-div -mbenutzerdefinierte-Inn=N
-mno-benutzerdefiniert-Inn -mcustom-fpu-cfg=Name -mhal -mkleinc -msys-crt0=Name -msys-lib=Name
Nvidia PTX Optionen -m32 -m64 -mmainkernel
PDP-11 Optionen -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy
-mbcopy-eingebaut -minze32 -mno-int16 -minze16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabschi -Mno-abshi -Filiale-teuer -Filiale-billig
-Munix-asm -mdec-asm
picoChip Optionen -mae=ae_typ -mvliw-lookahead=N -msymbol-als-Adresse
-mno-ineffiziente-Warnungen
PowerPC Optionen Siehe RS/6000- und PowerPC-Optionen.
RL78 Optionen -msim -mmul=keine -mmul=g13 -mmul = rl78 -m64bit-doubles -m32bit-doubles
RS / 6000 und PowerPC Optionen -mcpu=CPU-Typ -mtune=CPU-Typ -mcmodel=Code-Modell
-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-in-toc -mno-sum-in-toc
-m64 -m32 -mxl-kompat -mno-xl-kompat -mpe -bösartige-Macht -bösartig-natürlich
-msoft-float -mhard-float -vielfach -mno-Vielfaches -msingle-float -mdouble-float
-msimple-fpu -mstring -mno-string -Mupdate -mno-update -mavoid-indexierte-Adressen
-mno-vermeiden-indizierte-Adressen -verwirrt-wahnsinnig -mno-fusion-madd -mbit-ausrichten
-mno-bit-align -mstrict-align -mno-strict-align -mverschiebbar -mno-verschiebbar
-Mrelocatable-Lib -mno-verschiebbare-lib -mtoc -mno-toc -kleine -mlittle-endian
-mbig -mbig-endian -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base
-mprioitize-restricted-insns=Prioritätsliste -msched-kostspielig-dep=Abhängigkeitstyp
-Minsert-gesteuerte Nops =Schema -mcall-sysv -mcall-netbsd -maix-struct-return
-msvr4-struct-return -mabi=Abi-Typ -msecure-plt -mbss-plt
-mblock-move-inline-limit=num -misel -mno-isel -misel=ja -misel=nein -msp -mno-sp
-mspe=ja -mspe=nein -beschädigt -mgen-cell-microcode -mwarn-cell-Mikrocode -mvrsave
-mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=ja -mfloat-gprs=nein
-mfloat-gprs=einzeln -mfloat-gprs=doppelt -mprototyp -mno-Prototyp -msim -mmvme
-verrückt -mgelbes Messer -Mitglied -msdaten -msdata=wählen -mvxworks -G num -pGewinde -mrecip
-mrecip=wählen -mno-rezept -mrecip-Präzision -mno-recip-precision -mveclibabi=tippe -mfriz
-mno-friz -mZeiger-auf-verschachtelte-Funktionen -mno-pointer-to-nested-functions
-msave-toc-indirekt -mno-save-toc-indirekt -Mpower8-Fusion -mno-mpower8-fusion
-mpower8-Vektor -mno-power8-vektor -mcrypto -mno-crypto -mdirect-move -mno-direct-move
-mquad-Speicher -mno-Quad-Speicher -mquad-speicher-atomar -mno-quad-speicher-atomar
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf -mupper-regs -mno-obere-regs
RX Optionen -m64bit-doubles -m32bit-doubles -fpu -nofpu -mcpu= -mbig-endian-data
-mlittle-Endian-Daten -mkleine-Daten -msim -mno-sim -mas100-Syntax -mno-as100-Syntax
-Entspann dich -mmax-konstante-Größe= -mint-register= -mpid -mno-warn-mehrere-schnelle-Interrupts
-msave-acc-in-unterbricht
S / 390 und zSerie Optionen -mtune=CPU-Typ -marsch=CPU-Typ -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-backchain -mpacked-stack -mno-gepackter-Stapel -msmall-exec -mno-kleine-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -Mesa -mzarch -mtpf-spur
-mno-tpf-trace -verwirrt-wahnsinnig -mno-fusion-madd -mwarn-Rahmengröße -mwarn-dynamicstack
-mstack-Größe -mstack-guard -mhotpatch=Halbwörter,Halbwörter
Score Optionen -meb -mel -mnhwloop -Muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d
SH Optionen -m1 -m2 -m2e -m2a-nofpu -m2a-nur-Einzel -m2a-Einzel -m2a -m3 -m3e
-m4-nofpu -m4-nur-einzeln -m4-Einzel -m4 -m4a-nofpu -m4a-nur-Einzel -m4a-Einzel
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-kompakt
-m5-compact-nofpu -mb -ml -mdalign -Entspann dich -großzügig -mfmovd -mhitachi -mrenesas
-mno-renesas -Mnomacsave -mieee -mno-ieee -mbitops -missize -minline-ic_invalidate
-mpadstruct -mspace -mrefergot -musermode -multicost=Anzahl -mdiv=Strategie
-mdivsi3_libfunc=Name -mfixed-range=Registerbereich -indizierte-Adressierung
-mgettrcost=Anzahl -mpt-behoben -ausgehende-Argumente akkumulieren -minvalid-Symbole
-matomisches-modell=Atommodell -filialkosten=num -mzdcbranch -mno-zdcbranch
-McBranch-Force-Delay-Slot -verwirrt-wahnsinnig -mno-fusion-madd -mfsca -mno-fsca -mfsrra
-Mno-fsrra -mppretend-cmove -mtas
Solaris 2 Optionen -McLear-Hwcap -Mno-CLEAR-HWCAP -Mimpure-Text -mno-unreiner-Text
-pThreads -pGewinde
SPARC Optionen -mcpu=CPU-Typ -mtune=CPU-Typ -mcmodel=Code-Modell -memory-model=mem-
Modell -m32 -m64 -map-regs -Mno-App-Regs -mfaster-Strukturen -mno-schnellere-Strukturen
-flach -mno-flach -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-stack-bias -unaligned-doubles
-mno-unaigned-doubles -muser-modus -mno-Benutzermodus -Mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699
SPU Optionen -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma -Filiale-Hinweise
-msmall-mem -mlarge-mem -mstdmain -mfixed-range=Registerbereich -mea32 -mea64
-madressraum-konvertierung -mno-adressraum-konvertierung -mcache-size=Cache-Größe
-matomische-Updates -mno-atomar-updates
System V Optionen -Qy -Qn -YP,Pfade -Ym,dir
FLIESE-Gx Optionen -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian -mcmodel=Code-Modell
TILEPro Optionen -mcpu=CPU -m32
V850 Optionen -mlong-anrufe -mno-lange-Anrufe -MdEP -mno-ep -mprolog-Funktion
-mno-prolog-Funktion -mspace -mtda=n -msda=n -mzda=n -map-regs -Mno-App-Regs
-mdisable-callt -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -mloop -Entspann dich -mlange Sprünge -msoft-float -mhard-float -mgcc-abi
-mrh850-abi -mbig-switch
VAX Optionen -mg -mgnu -Munix
Visium Optionen -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=CPU-Typ
-mtune=CPU-Typ -msv-Modus -muser-modus
VMS Optionen -mvms-Rückgabecodes -mdebug-main=Präfix -mmalloc64 -mpointer-size=Größe
VxWorks Optionen -mrtp -nicht statisch -Bstatisch -Bdynamisch -Xbind-faul -Xbind-jetzt
x86 Optionen -mtune=CPU-Typ -marsch=CPU-Typ -mtune-ctrl=Feature-Liste
-Mdump-Tune-Featuren -mno-Standard -mfpmath=Einheit -masm=Dialekt -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -mno-wide-multiplizieren -mrtd -bösartig-doppelt
-mpreferred-stack-boundary=num -mincoming-stack-boundary=num -mcld -mcx16 -msahf
-mmovbe -mcrc32 -mrecip -mrecip=wählen -mvzeropper -mrefer-avx128 -mmx -miss -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -Mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha -maes -mpclmul -MFSGSBASE -mrdrnd -Mf16c -mfma -mprefetchwt1
-mclflushopt -MXSAVEC -mxspeichert -msse4a -m3dnow -mpopcnt -mabm -mbmi -MTBM -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxspeichern -mxsaveopt -mrtm -mlwp -mmpx -mmwartex -m Threads
-mno-align-stringops -minline-all-stringops -minline-stringops-dynamisch
-mstringop-strategie=alg -mmemcpy-strategie=Strategie -mmemset-strategie=Strategie
-mpush-args -ausgehende-Argumente akkumulieren -m128bit-long-double -m96bit-long-double
-mlong-double-64 -mlong-double-80 -mlong-double-128 -mregparm=num -msseregparm
-mveclibabi=tippe -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-Blatt-Rahmen-Zeiger -mno-rote-zone -mno-tls-direct-seg-refs -mcmodel=Code-Modell
-mabi=Name -maddress-mode=Modus -m32 -m64 -MX32 -m16 -mlarge-data-threshold=num
-msse2avx -Mfentry -mrecord-mcount -mnop-mcount -m8bit-iviv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store -maligne-Daten=tippe
-mstack-protector-guard=Wache
x86 Windows Optionen -mconsole -mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -m Gewinde
-Municode -mwin32 -mwindows -fno-set-stack-ausführbare Datei
Xstormy16 Optionen -msim
Xtensa Optionen -mconst16 -mno-const16 -verwirrt-wahnsinnig -mno-fusion-madd -mforce-no-pic
-mserialize-volatile -mno-serialisieren-flüchtig -mtext-Abschnittsliterale
-mno-text-section-literals -mtarget-align -mno-target-align -mlangeAnrufe
-mno-longcalls
zSerie Optionen Siehe S/390- und zSeries-Optionen.
Code Generation Optionen
-fcall-gespeichert-reg -fcall-gebraucht-reg -fixiert-reg -fAusnahmen -fnon-call-ausnahmen
-fdelete-dead-Exceptions -Funwind-Tische -fasynchrone-unwind-Tabellen -fno-gnu-einzigartig
-finhibit-size-directive -fInstrument-Funktionen
-finstrument-functions-exclude-function-list=sym,sym, ...
-finstrument-functions-exclude-file-list=Datei,Datei, ... -fno-gemeinsam -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fpie -fno-plt -fno-Sprungtabellen
-frecord-gcc-switches -freg-struct-return -fshort-enums -fshort-doppelt -fshort-wchar
-fverbose-asm -fpack-struct[=n] -fstack-check -fstack-limit-register=reg
-fstack-limit-symbol=sym -fno-stack-limit -fsplit-stack -fleading-underscore
-ftls-model=Modell -fstack-reuse=Wiederverwendungsebene -ftrapv -fwrapv -fbounds-check
-fsichtbarkeit=[Standard|intern|versteckt|geschützt] -fstrict-volatile-bitfields
-fsync-libcalls
Optionen Regelung Art of Ausgang
Die Kompilierung kann bis zu vier Stufen umfassen: Vorverarbeitung, eigentliche Kompilierung, Assemblierung und
Verknüpfung, immer in dieser Reihenfolge. GCC ist in der Lage, mehrere vorzuverarbeiten und zu kompilieren
Dateien entweder in mehrere Assembler-Eingabedateien oder in eine Assembler-Eingabedatei; dann
Jede Assembler-Eingabedatei erzeugt eine Objektdatei, und das Verknüpfen kombiniert alle Objekte
Dateien (die neu kompilierten und die als Eingabe angegebenen) in eine ausführbare Datei.
Für jede gegebene Eingabedatei bestimmt das Dateinamensuffix, um welche Art von Kompilierung es sich handelt
getan:
Datei.c
C-Quellcode, der vorverarbeitet werden muss.
Datei.i
C-Quellcode, der nicht vorverarbeitet werden sollte.
Datei.ii
C++-Quellcode, der nicht vorverarbeitet werden sollte.
Datei.m
Objective-C-Quellcode. Beachten Sie, dass Sie mit dem verlinken müssen libobjc Bibliothek, um eine zu machen
Ziel-C-Programmarbeit.
Datei.mi
Objective-C-Quellcode, der nicht vorverarbeitet werden sollte.
Datei.mm
Datei.M
Objective-C++-Quellcode. Beachten Sie, dass Sie mit dem verlinken müssen libobjc Bibliothek zu machen
eine Objective-C++-Programmarbeit. Beachten Sie, dass .M bezieht sich auf ein wörtliches großes M.
Datei.mii
Objective-C++-Quellcode, der nicht vorverarbeitet werden sollte.
Datei.h
C-, C++-, Objective-C- oder Objective-C++-Headerdatei, die in eine vorkompilierte
Header (Standard) oder C, C++-Header-Datei, die in eine Ada-Spezifikation umgewandelt werden soll (über das
-fdump-ada-spec Schalter).
Datei. Cc
Datei.CP
Datei.cxx
Datei.cpp
Datei.CPP
Datei.c++
Datei.C
C++-Quellcode, der vorverarbeitet werden muss. Beachten Sie, dass in .cxx, die letzten beiden Buchstaben
muss beides wörtlich sein x. Gleichfalls, .C bezieht sich auf ein wörtliches großes C.
Datei.mm
Datei.M
Objective-C++-Quellcode, der vorverarbeitet werden muss.
Datei.mii
Objective-C++-Quellcode, der nicht vorverarbeitet werden sollte.
Datei.H H
Datei.H
Datei.hp
Datei.hxx
Datei.hpp
Datei.HPP
Datei.h++
Datei.tcc
C++-Headerdatei, die in einen vorkompilierten Header oder eine Ada-Spezifikation umgewandelt werden soll.
Datei.f
Datei.zum
Datei.ftn
Fortran-Quellcode in fester Form, der nicht vorverarbeitet werden sollte.
Datei.F
Datei.ZUM
Datei.fpp
Datei.FPP
Datei.FTN
Fortran-Quellcode in fester Form, der vorverarbeitet werden muss (mit dem traditionellen
Präprozessor).
Datei.f90
Datei.f95
Datei.f03
Datei.f08
Freier Fortran-Quellcode, der nicht vorverarbeitet werden sollte.
Datei.F90
Datei.F95
Datei.F03
Datei.F08
Freier Fortran-Quellcode, der vorverarbeitet werden muss (mit dem traditionellen
Präprozessor).
Datei.gehen
Quellcode gehen.
Datei.Anzeigen
Ada-Quellcodedatei, die eine Bibliothekseinheitsdeklaration enthält (eine Deklaration von a
Paket, Unterprogramm oder generisch oder eine generische Instanziierung) oder eine Bibliothekseinheit
Umbenennungsdeklaration (eine Paket-, generische oder Unterprogramm-Umbenennungsdeklaration). Eine solche
Dateien werden auch genannt Spezifikation.
Datei.adb
Ada-Quellcodedatei, die einen Bibliothekseinheitskörper (einen Unterprogramm- oder Paketkörper) enthält.
Solche Dateien werden auch genannt Körper.
Datei.s
Assembler-Code.
Datei.S
Datei.sx
Assembler-Code, der vorverarbeitet werden muss.
mehr
Eine Objektdatei, die direkt in die Verknüpfung eingespeist wird. Beliebiger Dateiname ohne erkannt
Suffix wird auf diese Weise behandelt.
Sie können die Eingabesprache explizit mit dem -x Option:
-x Sprache
Geben Sie explizit die Sprache für die folgenden Eingabedateien (anstatt die
Compiler einen Standardwert basierend auf dem Dateinamensuffix auswählen). Diese Option gilt für alle
folgenden Eingabedateien bis zur nächsten -x Möglichkeit. Mögliche Werte für Sprache sind:
c c-Header cpp-Ausgabe
c++ c++-Header c++-cpp-Ausgabe
ziel-c ziel-c-header ziel-c-cpp-output
ziel-c++ ziel-c++-header ziel-c++-cpp-ausgabe
Assembler Assembler-mit-cpp
ada
f77 f77-cpp-Eingang f95 f95-cpp-Eingang
go
Java
-x keine
Deaktivieren Sie jegliche Sprachangabe, damit nachfolgende Dateien verarbeitet werden
nach ihren Dateinamensuffixen (wie sie sind, wenn -x wurde gar nicht benutzt).
-Pass-Exit-Codes
Normalerweise die gcc Das Programm wird mit dem Code 1 beendet, wenn eine Phase des Compilers zurückkehrt
ein nicht erfolgreicher Rückkehrcode. Wenn Sie angeben -Pass-Exit-Codes, der gcc Programm statt
kehrt mit dem numerisch höchsten Fehler zurück, der von einer Phase erzeugt wurde, die einen Fehler zurückgibt
Indikation. Die C-, C++- und Fortran-Frontends geben 4 zurück, wenn ein interner Compilerfehler
angetroffen wird.
Wenn Sie nur einige der Schritte der Kompilierung möchten, können Sie -x (oder Dateinamensuffixe)
zu sagen, gcc wo man anfangen soll und eine der Optionen -c, -S, oder auch -E zu sagen wo gcc ist
halt. Beachten Sie, dass einige Kombinationen (z. -x cpp-Ausgang -E) anweisen gcc zu tun
gar nichts.
-c Kompilieren oder assemblieren Sie die Quelldateien, aber verknüpfen Sie sie nicht. Die Verknüpfungsphase ist einfach
nicht durchgeführt. Die endgültige Ausgabe erfolgt in Form einer Objektdatei für jede Quelldatei.
Standardmäßig wird der Objektdateiname für eine Quelldatei durch Ersetzen des Suffixes erstellt .c,
.i, .s, usw., mit .o.
Nicht erkannte Eingabedateien, die keine Kompilierung oder Assemblierung erfordern, werden ignoriert.
-S Stoppen Sie nach der eigentlichen Kompilierungsstufe; nicht zusammenbauen. Die Ausgabe ist im
Form einer Assembler-Codedatei für jede angegebene Nicht-Assembler-Eingabedatei.
Standardmäßig wird der Assembler-Dateiname für eine Quelldatei durch Ersetzen des Suffixes
.c, .i, usw., mit .s.
Eingabedateien, die keine Kompilierung erfordern, werden ignoriert.
-E Stoppen Sie nach der Vorverarbeitungsphase; Führen Sie den Compiler nicht richtig aus. Die Ausgabe ist in
die Form von vorverarbeitetem Quellcode, der an die Standardausgabe gesendet wird.
Eingabedateien, die keine Vorverarbeitung erfordern, werden ignoriert.
-o Datei
Ausgabe in Datei platzieren Datei. Dies gilt für jede Art von Ausgabe, die produziert wird,
sei es eine ausführbare Datei, eine Objektdatei, eine Assembler-Datei oder vorverarbeitetes C
Code.
If -o nicht angegeben ist, wird standardmäßig eine ausführbare Datei in a.aus, das Objekt
Datei für Quellsuffix in Quelle.o, seine Assembler-Datei in Quelle.s, ein vorkompiliertes
Header-Datei in source.suffix.gch, und alle vorverarbeiteten C-Quellen auf der Standardausgabe.
-v Drucken Sie (auf der Standardfehlerausgabe) die Befehle, die ausgeführt wurden, um die Stufen von . auszuführen
Zusammenstellung. Drucken Sie auch die Versionsnummer des Compiler-Treiberprogramms und des
Präprozessor und der eigentliche Compiler.
-###
Like -v außer die Befehle werden nicht ausgeführt und Argumente werden in Anführungszeichen gesetzt, es sei denn, sie
nur alphanumerische Zeichen oder "./-_" enthalten. Dies ist nützlich für Shell-Skripte, um
erfassen Sie die vom Treiber generierten Befehlszeilen.
-Rohr
Verwenden Sie Pipes anstelle von temporären Dateien für die Kommunikation zwischen den verschiedenen Phasen von
Zusammenstellung. Dies funktioniert auf einigen Systemen nicht, auf denen der Assembler nicht lesen kann
aus einem Rohr; aber der GNU-Assembler hat keine Probleme.
--help
Drucken Sie (auf der Standardausgabe) eine Beschreibung der Befehlszeilenoptionen, die von . verstanden werden
gcc. Wenn der -v Option wird dann auch angegeben --help wird auch an die verschiedenen weitergegeben
Prozesse, die aufgerufen werden von gcc, damit sie die Befehlszeilenoptionen anzeigen können, die sie
annehmen. Wenn die -Wextra Option wurde auch angegeben (vor dem --help Möglichkeit),
dann sind auch Befehlszeilenoptionen, denen keine Dokumentation zugeordnet ist
angezeigt.
--target-help
Drucken Sie (auf der Standardausgabe) eine Beschreibung der zielspezifischen Befehlszeilenoptionen
für jedes Werkzeug. Für einige Ziele können auch zusätzliche zielspezifische Informationen sein
gedruckt.
--help={Klasse|[^]Qualifizierer}[, ...]
Drucken Sie (auf der Standardausgabe) eine Beschreibung der Befehlszeilenoptionen, die von . verstanden werden
der Compiler, der in alle angegebenen Klassen und Qualifizierer passt. Dies sind die
unterstützte Klassen:
Optimierer
Alle vom Compiler unterstützten Optimierungsoptionen anzeigen.
Warnungen
Zeigen Sie alle Optionen an, die vom Compiler erzeugte Warnmeldungen steuern.
Ziel
Zielspezifische Optionen anzeigen. nicht so wie --target-help Option jedoch Ziel-
spezifische Optionen des Linkers und Assemblers werden nicht angezeigt. Das ist weil
diese Tools unterstützen derzeit nicht die erweiterten --help= Syntax.
params
Anzeige der vom erkannten Werte --param .
Sprache
Anzeige der unterstützten Optionen für Sprache, Wobei Sprache ist der Name eines von
die in dieser Version von GCC unterstützten Sprachen.
verbreitet
Zeigen Sie die Optionen an, die allen Sprachen gemeinsam sind.
Dies sind die unterstützten Qualifizierer:
nicht dokumentiert
Zeigen Sie nur die Optionen an, die nicht dokumentiert sind.
beigetreten
Anzeigeoptionen, die ein Argument annehmen, das nach einem Gleichheitszeichen im selben angezeigt wird
fortlaufender Text, wie zum Beispiel: --help=Ziel.
getrennte
Zeigen Sie Optionen an, die ein Argument annehmen, das als separates Wort nach dem erscheint
ursprüngliche Option, wie zum Beispiel: -o Ausgabedatei.
So können Sie beispielsweise alle undokumentierten zielspezifischen Schalter anzeigen, die von . unterstützt werden
den Compiler verwenden:
--help=Ziel,undokumentiert
Die Bedeutung eines Qualifizierers kann invertiert werden, indem ihm das vorangestellt wird ^ Charakter, also für
Beispiel, um alle binären Warnoptionen anzuzeigen (dh solche, die entweder ein- oder ausgeschaltet sind)
und die kein Argument annehmen), die eine Beschreibung haben, verwenden Sie:
--help=Warnungen,^beigetreten,^undokumentiert
Das Argument zu --help= sollte nicht nur aus invertierten Qualifiern bestehen.
Das Kombinieren mehrerer Klassen ist möglich, allerdings schränkt dies in der Regel die Ausgabe so ein
viel, dass es nichts zu zeigen gibt. Ein Fall, in dem es jedoch funktioniert, ist, wenn
eine der klassen ist Ziel. Um beispielsweise alle zielspezifischen
Optimierungsmöglichkeiten, verwenden Sie:
--help=Ziel,Optimierer
Die --help= Option kann in der Befehlszeile wiederholt werden. Jede aufeinanderfolgende Verwendung wird angezeigt
die angeforderte Klasse von Optionen, wobei die bereits angezeigten übersprungen werden.
Besitzt das -Q Option erscheint in der Befehlszeile vor dem --help= Option, dann die
beschreibender Text angezeigt von --help= ist geändert. Anstatt das angezeigte zu beschreiben
Optionen wird angezeigt, ob die Option aktiviert, deaktiviert oder eingestellt ist
auf einen bestimmten Wert (vorausgesetzt, der Compiler weiß dies an dem Punkt, an dem die
--help= Option verwendet wird).
Hier ist ein abgeschnittenes Beispiel aus dem ARM-Port von gcc:
% gcc -Q -mabi=2 --help=target -c
Die folgenden Optionen sind zielspezifisch:
-mabi= 2
-mabort-on-noreturn [deaktiviert]
-maps [deaktiviert]
Die Ausgabe reagiert empfindlich auf die Auswirkungen vorheriger Befehlszeilenoptionen, also z
Beispiel ist es möglich herauszufinden, welche Optimierungen aktiviert sind bei -O2 durch die Nutzung:
-Q -O2 --help=Optimierer
Alternativ können Sie herausfinden, welche binären Optimierungen aktiviert werden durch -O3 durch die Nutzung:
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 aktiviert
-keine-kanonischen-Präfixe
Erweitern Sie keine symbolischen Links, lösen Sie Verweise auf . auf /../ or /./, oder mach den Weg
absolut beim Generieren eines relativen Präfixes.
--Version
Zeigen Sie die Versionsnummer und Copyrights der aufgerufenen GCC an.
-Verpackung
Rufen Sie alle Unterbefehle unter einem Wrapper-Programm auf. Der Name des Wrapper-Programms und
seine Parameter werden als kommagetrennte Liste übergeben.
gcc -c tc -wrapper gdb,--args
Dies ruft alle Unterprogramme von . auf gcc für gdb --args, also der Aufruf von cc1 is
gdb --args cc1 ....
-fplugin=Name.so
Laden Sie den Plugin-Code in die Datei Name.so wird angenommen, dass es sich um ein gemeinsam genutztes Objekt handelt, das von dlopen'd
der Compiler. Der Basisname der Shared Object-Datei wird verwendet, um das Plugin zu identifizieren
zum Zwecke der Argumentanalyse (Siehe -fplugin-arg-Name-Haupt=Wert unter). Jeder
plugin sollte die in der Plugins API angegebenen Callback-Funktionen definieren.
-fplugin-arg-Name-Haupt=Wert
Definiere ein Argument namens Haupt mit einem Wert von Wert für das Plugin namens Name.
-fdump-ada-spec[-schlank]
Generieren Sie für C- und C++-Quell- und Include-Dateien die entsprechenden Ada-Spezifikationen.
-Fada-Spec-Eltern =Einheit
In Verbindung mit -fdump-ada-spec[-schlank] oben, generieren Sie Ada-Spezifikationen als untergeordnete Einheiten von
Elternteil Einheit.
-fdump-go-spec=Datei
Generieren Sie für Eingabedateien in einer beliebigen Sprache entsprechende Go-Deklarationen in Datei. Dies
erzeugt Go "const", "type", "var" und "func" Deklarationen, was ein nützlicher Weg sein kann
um mit dem Schreiben einer Go-Schnittstelle für Code in einer anderen Sprache zu beginnen.
@Datei
Lesen Sie die Befehlszeilenoptionen von Datei. Die gelesenen Optionen werden anstelle der eingefügt
Original @Datei Möglichkeit. Wenn Datei nicht existiert oder nicht gelesen werden kann, dann ist die Option
wörtlich behandelt und nicht entfernt.
Optionen in Datei werden durch Leerzeichen getrennt. Ein Leerzeichen kann enthalten sein
in einer Option, indem Sie die gesamte Option in einfache oder doppelte Anführungszeichen setzen. Irgendein
Zeichen (einschließlich eines umgekehrten Schrägstrichs) können eingefügt werden, indem dem Zeichen vorangestellt wird
mit Backslash enthalten. Die Datei kann selbst zusätzliches @ enthaltenDatei Optionen; irgendein
solche Optionen werden rekursiv verarbeitet.
Kompilieren C + + Programme
C++-Quelldateien verwenden üblicherweise eines der Suffixe .C, . Cc, .cpp, .CPP, .c++, .CP, oder auch
.cxx; C++-Headerdateien verwenden häufig .H H, .hpp, .H, oder (für freigegebenen Vorlagencode) .tcceschriebenen Art und Weise; und
vorverarbeitete C++-Dateien verwenden das Suffix .ii. GCC erkennt Dateien mit diesen Namen und
kompiliert sie als C++-Programme, auch wenn Sie den Compiler wie beim Kompilieren aufrufen
C-Programme (normalerweise mit dem Namen gcc).
Die Verwendung von gcc fügt die C++-Bibliothek nicht hinzu. g ++ ist ein Programm, das GCC aufruft und
gibt automatisch die Verknüpfung mit der C++-Bibliothek an. Es behandelt .c, .h und .i Dateien als
C++-Quelldateien anstelle von C-Quelldateien, es sei denn -x wird genutzt. Dieses Programm ist auch nützlich
beim Vorkompilieren einer C-Header-Datei mit a .h Erweiterung für die Verwendung in C++-Kompilierungen. Auf
viele Systeme, g ++ wird auch mit dem Namen installiert c ++.
Wenn Sie C++-Programme kompilieren, können Sie viele der gleichen Befehlszeilenoptionen angeben, die
Sie zum Kompilieren von Programmen in einer beliebigen Sprache verwenden; oder Befehlszeilenoptionen, die für C . sinnvoll sind
und verwandte Sprachen; oder Optionen, die nur für C++-Programme von Bedeutung sind.
Optionen Regelung C Dialekt
Die folgenden Optionen steuern den Dialekt von C (oder von C abgeleitete Sprachen wie C++,
Objective-C und Objective-C++), die der Compiler akzeptiert:
-ansi
Im C-Modus entspricht dies -std=c90. Im C++-Modus ist es äquivalent zu
-std=c++98.
Dadurch werden bestimmte Funktionen von GCC deaktiviert, die mit ISO C90 nicht kompatibel sind (wenn
Kompilieren von C-Code) oder von Standard-C++ (beim Kompilieren von C++-Code), wie "asm" und
"typeof"-Schlüsselwörter und vordefinierte Makros wie "unix" und "vax", die die
Systemtyp, den Sie verwenden. Es ermöglicht auch das unerwünschte und selten verwendete ISO
Trigraph-Funktion. Für den C-Compiler deaktiviert es die Erkennung des C++-Stils //
Kommentare sowie das Schlüsselwort "inline".
Die alternativen Schlüsselwörter "__asm__", "__extension__", "__inline__" und "__typeof__"
arbeite trotzdem weiter -ansi. Sie möchten sie nicht in einem ISO-C-Programm verwenden,
natürlich, aber es ist nützlich, sie in Header-Dateien zu speichern, die in
Zusammenstellungen gemacht mit -ansi. Alternative vordefinierte Makros wie "__unix__" und
"__vax__" gibt es auch, mit oder ohne -ansi.
Die -ansi Option führt nicht dazu, dass Nicht-ISO-Programme grundlos abgelehnt werden. Zum
dass, -Wpedantisch wird zusätzlich benötigt -ansi.
Das Makro "__STRICT_ANSI__" ist vordefiniert, wenn die -ansi Option verwendet wird. Einige Header
Dateien können dieses Makro bemerken und davon absehen, bestimmte Funktionen zu deklarieren oder zu definieren
bestimmte Makros, die der ISO-Standard nicht fordert; das soll nicht stören
mit allen Programmen, die diese Namen für andere Dinge verwenden könnten.
Funktionen, die normalerweise eingebaut sind, aber keine von ISO C definierte Semantik haben (wie z
wie "alloca" und "ffs") sind keine eingebauten Funktionen, wenn -ansi wird eingesetzt.
-std=
Bestimmen Sie den Sprachstandard. Diese Option wird derzeit nur unterstützt, wenn
C oder C++ kompilieren.
Der Compiler kann mehrere Basisstandards akzeptieren, wie z c90 or c ++ 98, und GNU-Dialekte
dieser Standards, wie z gnu90 or gnu++98. Wenn ein Basisstandard angegeben ist, wird der
Compiler akzeptiert alle Programme, die diesem Standard folgen, plus solche, die GNU-Erweiterungen verwenden
das widerspricht nicht. Zum Beispiel, -std=c90 deaktiviert bestimmte Funktionen von GCC
die nicht mit ISO C90 kompatibel sind, wie die Schlüsselwörter "asm" und "typeof", aber nicht
andere GNU-Erweiterungen, die in ISO C90 keine Bedeutung haben, wie das Weglassen der
mittlerer Begriff eines "?:"-Ausdrucks. Andererseits, wenn ein GNU-Dialekt eines Standards
angegeben ist, werden alle vom Compiler unterstützten Funktionen aktiviert, auch wenn diese
Funktionen ändern die Bedeutung des Basisstandards. Infolgedessen sind einige streng konforme
Programme können abgelehnt werden. Der jeweilige Standard wird verwendet von -Wpedantisch zu identifizieren
welche Funktionen GNU-Erweiterungen sind, wenn diese Version des Standards gegeben ist. Zum Beispiel
-Std = gnu90 -Wpedantisch warnt vor C++-Stil // Kommentare, während -Std = gnu99 -Wpedantisch
nicht.
Ein Wert für diese Option muss angegeben werden; mögliche Werte sind
c90
c89
iso9899: 1990
Unterstützt alle ISO C90-Programme (bestimmte GNU-Erweiterungen, die mit ISO C90 in Konflikt stehen)
Sind deaktiviert). Gleich wie -ansi für C-Code.
iso9899: 199409
ISO C90, wie in Änderung 1 geändert.
c99
c9x
iso9899: 1999
ISO9899:199x
ISO C99. Dieser Standard wird im Wesentlichen vollständig unterstützt, Modulo-Fehler und
Gleitkomma-Probleme (hauptsächlich, aber nicht ausschließlich in Bezug auf optionale C99-Funktionen
aus den Anhängen F und G). Sehenhttp://gcc.gnu.org/c99status.html> für mehr
Information. Die Namen c9x und ISO9899:199x sind verpönt.
c11
c1x
iso9899: 2011
ISO C11, die Überarbeitung des ISO-C-Standards von 2011. Dieser Standard ist im Wesentlichen
vollständig unterstützt, Modulo-Fehler, Gleitkomma-Probleme (hauptsächlich, aber nicht vollständig
bezüglich optionaler C11-Merkmale aus den Anhängen F und G) und den optionalen Anhängen K
(Grenzflächenüberprüfungsschnittstellen) und L (Analysierbarkeit). Der Name c1x ist veraltet.
gnu90
gnu89
GNU-Dialekt von ISO C90 (einschließlich einiger C99-Funktionen).
gnu99
gnu9x
GNU-Dialekt von ISO C99. Der Name gnu9x ist veraltet.
gnu11
gnu1x
GNU-Dialekt von ISO C11. Dies ist die Standardeinstellung für C-Code. Der Name gnu1x is
veraltet.
c ++ 98
c ++ 03
Der ISO C++-Standard von 1998 plus das technische Korrigendum von 2003 und einige zusätzliche
Fehlerberichte. Gleich wie -ansi für C++-Code.
gnu++98
gnu++03
GNU-Dialekt von -std=c++98. Dies ist die Standardeinstellung für C++-Code.
c ++ 11
C ++ 0x
Der ISO C++-Standard von 2011 plus Ergänzungen. Der Name C ++ 0x ist veraltet.
gnu++11
gnu++0x
GNU-Dialekt von -std=c++11. Der Name gnu++0x ist veraltet.
c ++ 14
c++1y
Der ISO C++-Standard von 2014 plus Ergänzungen. Der Name c++1y ist veraltet.
gnu++14
gnu++1y
GNU-Dialekt von -std=c++14. Der Name gnu++1y ist veraltet.
c++1z
Die nächste Überarbeitung des ISO C++-Standards, vorläufig geplant für 2017. Support
ist sehr experimentell und wird sich mit ziemlicher Sicherheit auf unvereinbare Weise ändern
zukünftige Veröffentlichungen.
gnu++1z
GNU-Dialekt von -std=c++1z. Der Support ist sehr experimentell und wird fast
wird sich in zukünftigen Versionen sicherlich auf inkompatible Weise ändern.
-fgnu89-inline
Die Option -fgnu89-inline weist GCC an, die traditionelle GNU-Semantik für "inline" zu verwenden
Funktionen im C99-Modus.
Die Verwendung dieser Option entspricht ungefähr dem Hinzufügen des Funktionsattributs "gnu_inline".
zu allen Inline-Funktionen.
Die Option -fno-gnu89-inline weist GCC explizit an, die C99-Semantik für . zu verwenden
"inline" im C99- oder gnu99-Modus (dh es gibt das Standardverhalten an). Dies
Option wird nicht unterstützt in -std=c90 or -Std = gnu90 Modus arbeiten können.
Es können die Präprozessormakros "__GNUC_GNU_INLINE__" und "__GNUC_STDC_INLINE__" verwendet werden
um zu überprüfen, welche Semantik für "Inline"-Funktionen wirksam ist.
-aux-info Dateinamen
Ausgabe an den angegebenen Dateinamen prototypisierte Deklarationen für alle deklarierten Funktionen und/oder
in einer Übersetzungseinheit definiert sind, einschließlich derjenigen in Header-Dateien. Diese Option ist
in einer anderen Sprache als C still ignoriert.
Neben den Erklärungen gibt die Datei in Kommentaren den Ursprung jeder Erklärung an
(Quelldatei und Zeile), ob die Deklaration implizit, prototypisiert oder
unprototypisiert (I, N für neu oder O für alt bzw. im ersten Zeichen nach
die Zeilennummer und der Doppelpunkt) und ob es aus einer Deklaration oder einer Definition stammt
(C or F, bzw. im folgenden Zeichen). Bei Funktion
Definitionen ist auch eine Liste von Argumenten im K&R-Stil gefolgt von ihren Deklarationen
bereitgestellt, innerhalb von Kommentaren, nach der Erklärung.
-falsche-parameterlose-variadische-Funktionen
Akzeptieren Sie variadische Funktionen ohne benannte Parameter.
Obwohl es möglich ist, eine solche Funktion zu definieren, ist dies nicht sehr nützlich, da es ist
Argumente sind nicht lesbar. Dies wird nur für C unterstützt, da dieses Konstrukt ist
von C++ erlaubt.
-fno-asm
Erkenne "asm", "inline" oder "typeof" nicht als Schlüsselwort, damit der Code diese verwenden kann
Wörter als Identifikatoren. Sie können die Schlüsselwörter "__asm__", "__inline__" und . verwenden
"__typeof__" stattdessen. -ansi impliziert -fno-asm.
In C++ betrifft dieser Schalter nur das Schlüsselwort "typeof", da "asm" und "inline"
Standard-Schlüsselwörter. Vielleicht möchten Sie die -fno-gnu-Schlüsselwörter Flagge stattdessen, die hat
der gleiche Effekt. Im C99-Modus (-std=c99 or -Std = gnu99), wirkt sich dieser Schalter nur auf die
Schlüsselwörter "asm" und "typeof", da "inline" ein Standardschlüsselwort in ISO C99 ist.
-fno-eingebaut
-fno-eingebaut-Funktion
Erkenne keine eingebauten Funktionen, die nicht mit beginnen __eingebaut_ als Präfix.
GCC generiert normalerweise speziellen Code, um bestimmte eingebaute Funktionen zu handhaben mehr
effizient; Aufrufe an "alloca" können beispielsweise zu einzelnen Anweisungen werden, die
den Stack direkt anpassen, und Aufrufe von "memcpy" können zu Inline-Kopierschleifen werden. Die
resultierender Code ist oft sowohl kleiner als auch schneller, aber da die Funktion no . aufruft
mehr als solche angezeigt werden, können Sie für diese Anrufe keinen Haltepunkt setzen und auch nicht ändern
das Verhalten der Funktionen durch die Verknüpfung mit einer anderen Bibliothek. Außerdem, wenn
eine Funktion als eingebaute Funktion erkannt wird, kann GCC Informationen darüber verwenden
Funktion, um vor Problemen mit Aufrufen dieser Funktion zu warnen oder mehr zu generieren
effizienter Code, auch wenn der resultierende Code noch Aufrufe dieser Funktion enthält. Zum
Warnungen werden beispielsweise mit ausgegeben -Wformat für schlechte Aufrufe von "printf", wenn "printf" ist
eingebaut und "strlen" ist dafür bekannt, den globalen Speicher nicht zu verändern.
Mit der -fno-eingebaut-Funktion Option nur die eingebaute Funktion Funktion ist behindert.
Funktion darf nicht beginnen mit __eingebaut_. Wenn eine Funktion benannt ist, die nicht integriert ist
in dieser Version von GCC wird diese Option ignoriert. Es gibt keine Entsprechung
-eingebaut-Funktion Möglichkeit; wenn Sie eingebaute Funktionen selektiv aktivieren möchten, wenn
Verwendung von -fno-eingebaut or -freistehend, können Sie Makros definieren wie:
#define abs(n) __eingebaute_abs ((n))
#define strcpy(d, s) __builtin_strcpy ((d), (s))
-gehostet
Stellen Sie sicher, dass die Kompilierung auf eine gehostete Umgebung abzielt. Dies impliziert -feingebautherunterzuladen. Ein
gehostete Umgebung ist eine Umgebung, in der die gesamte Standardbibliothek verfügbar ist und in der
welches "main" den Rückgabetyp "int" hat. Beispiele sind fast alles außer a
Kernel. Dies entspricht -fno-freistehend.
-freistehend
Stellen Sie sicher, dass die Kompilierung auf eine freistehende Umgebung abzielt. Dies impliziert
-fno-eingebaut. Eine freistehende Umgebung ist eine Umgebung, in der die Standardbibliothek möglicherweise nicht verfügbar ist
existieren, und der Programmstart muss nicht unbedingt auf "main" erfolgen. Das offensichtlichste Beispiel
ist ein OS-Kernel. Dies entspricht -fno-gehostet.
-fopenac
Aktivieren Sie die Behandlung der OpenACC-Direktiven "#pragma acc" in C/C++ und "!$acc" in Fortran.
Wann -fopenac angegeben ist, generiert der Compiler beschleunigten Code gemäß der
OpenACC-Anwendungsprogrammierschnittstelle v2.0http://www.openacc.org/>. Diese Option
impliziert -pGewinde, und wird daher nur auf Zielen unterstützt, die Unterstützung für
-pGewinde.
Beachten Sie, dass dies eine experimentelle Funktion ist, die unvollständig ist und in Zukunft geändert werden kann
Versionen von GCC. Sehenhttps://gcc.gnu.org/wiki/OpenACC> für weitere Informationen.
-fopenmp
Aktivieren Sie die Behandlung der OpenMP-Direktiven "#pragma omp" in C/C++ und "!$omp" in Fortran.
Wann -fopenmp angegeben ist, generiert der Compiler parallelen Code gemäß der
OpenMP-Anwendungsprogrammschnittstelle v4.0http://www.openmp.org/>. Diese Option
impliziert -pGewinde, und wird daher nur auf Zielen unterstützt, die Unterstützung für
-pGewinde. -fopenmp impliziert -fopenmp-simd.
-fopenmp-simd
Aktivieren Sie die Behandlung der SIMD-Direktiven von OpenMP mit "#pragma omp" in C/C++ und "!$omp" in
Fortran. Andere OpenMP-Direktiven werden ignoriert.
-fcilkplus
Aktivieren Sie die Verwendung von Cilk Plus-Spracherweiterungsfunktionen für C/C++. Wenn die Option
-fcilkplus angegeben ist, aktivieren Sie die Verwendung der Cilk Plus-Spracherweiterungsfunktionen
für C/C++. Die vorliegende Implementierung folgt der ABI-Version 1.2. Das ist ein
experimentelle Funktion, die nur teilweise abgeschlossen ist und deren Oberfläche sich ändern kann
in zukünftigen Versionen von GCC, wenn sich die offiziellen Spezifikationen ändern. Derzeit alle
Features, aber "_Cilk_for" wurden implementiert.
-fgnu-tm
Wenn die Option -fgnu-tm angegeben ist, generiert der Compiler Code für das Linux
Variante von Intels aktuellem Transactional Memory ABI-Spezifikationsdokument (Revision
1.1, 6. Mai 2009). Dies ist eine experimentelle Funktion, deren Benutzeroberfläche sich ändern kann
zukünftige Versionen von GCC, da sich die offiziellen Spezifikationen ändern. Bitte beachten Sie, dass nicht
alle Architekturen werden für diese Funktion unterstützt.
Weitere Informationen zur GCC-Unterstützung für Transaktionsspeicher finden Sie unter
Beachten Sie, dass die Transaktionsspeicherfunktion bei Nicht-Aufruf-Ausnahmen nicht unterstützt wird
(-fnon-call-ausnahmen).
-fms-Erweiterungen
Akzeptieren Sie einige nicht standardmäßige Konstrukte, die in Microsoft-Headerdateien verwendet werden.
In C++-Code ermöglicht dies, dass Membernamen in Strukturen den vorherigen Typen ähneln
Erklärungen.
typedef int UOW;
ABC strukturieren {
UOWUOW;
};
Einige Fälle von unbenannten Feldern in Strukturen und Unions werden nur damit akzeptiert
.
Beachten Sie, dass diese Option für alle Ziele außer x86-Zielen mit ms-abi deaktiviert ist.
-fplan9-Erweiterungen
Akzeptieren Sie einige nicht standardmäßige Konstrukte, die im Plan 9-Code verwendet werden.
Das ermöglicht -fms-Erweiterungen, erlaubt die Übergabe von Zeigern auf Strukturen mit anonym
Felder auf Funktionen, die Zeiger auf Elemente vom Typ des Feldes erwarten, und
erlaubt den Verweis auf anonyme Felder, die mit typedef deklariert wurden. Das ist nur
unterstützt für C, nicht C++.
-Trigraphen
Unterstützt ISO C-Trigraphen. Die -ansi Option (und -Std Optionen für strenge ISO C
Konformität) impliziert -Trigraphen.
-traditionell
-traditionell-cpp
Früher führten diese Optionen dazu, dass GCC versuchte, einen Vorstandard-C-Compiler zu emulieren.
Sie werden jetzt nur noch mit dem . unterstützt -E Schalter. Der Präprozessor unterstützt weiterhin
ein Vorstandardmodus. Weitere Informationen finden Sie im GNU CPP-Handbuch.
-fcond-Mismatch
Erlaube bedingte Ausdrücke mit nicht übereinstimmenden Typen im zweiten und dritten Argument.
Der Wert eines solchen Ausdrucks ist ungültig. Diese Option wird für C++ nicht unterstützt.
-Flachs-Vektor-Umrechnungen
Erlaube implizite Konvertierungen zwischen Vektoren mit unterschiedlicher Anzahl von Elementen und/oder
inkompatible Elementtypen. Diese Option sollte nicht für neuen Code verwendet werden.
-funsigned-char
Lassen Sie den Typ "char" unsigned, wie "unsigned char".
Jede Art von Maschine hat eine Vorgabe dafür, was "char" sein soll. Es ist entweder wie
"unsigned char" standardmäßig oder wie "signed char" standardmäßig.
Idealerweise sollte ein portables Programm immer "signed char" oder "unsigned char" verwenden, wenn es
hängt von der Vorzeichen eines Objekts ab. Aber viele Programme wurden geschrieben, um sie zu verwenden
einfaches "char" und erwarten Sie, dass es signiert ist, oder erwarten Sie, dass es nicht signiert ist, je nach
Maschinen, für die sie geschrieben wurden. Mit dieser Option und ihrer Umkehrung können Sie z
Programm arbeiten mit der entgegengesetzten Standardeinstellung.
Der Typ "char" ist immer ein unterschiedlicher Typ von "signed char" oder "unsigned".
char", obwohl sein Verhalten immer nur eines dieser beiden ist.
-fsigned-char
Lassen Sie den Typ "char" signieren, wie "signed char".
Beachten Sie, dass dies äquivalent zu -fno-unsigned-char, was die Negativform von ist
-funsigned-char. Ebenso die Option -fno-signed-char entspricht
-funsigned-char.
-fsigned-bitfields
-funsigned-bitfields
-fno-signed-bitfields
-fno-unsigned-bitfields
Diese Optionen steuern, ob ein Bitfeld vorzeichenbehaftet oder vorzeichenlos ist, wenn die Deklaration
verwendet weder "signed" noch "unsigned". Standardmäßig ist ein solches Bitfeld vorzeichenbehaftet,
weil dies konsistent ist: die grundlegenden Integer-Typen wie "int" sind vorzeichenbehaftete Typen.
Optionen Regelung C + + Dialekt
In diesem Abschnitt werden die Befehlszeilenoptionen beschrieben, die nur für C++-Programme von Bedeutung sind.
Sie können auch die meisten GNU-Compiler-Optionen verwenden, unabhängig von der Sprache Ihres Programms
ist in. Sie können beispielsweise eine Datei kompilieren erste Klasse.C so was:
g++ -g -frepo -O -c firstClass.C
In diesem Beispiel nur -frepo ist eine Option, die nur für C++-Programme gedacht ist; du kannst den ... benutzen
andere Optionen mit jeder von GCC unterstützten Sprache.
Hier ist eine Liste von Optionen, die sind einzige zum Kompilieren von C++-Programmen:
-fabi-version=n
Version verwenden n der C++-ABI. Die Standardeinstellung ist Version 0.
Version 0 bezieht sich auf die Version, die der C++ ABI-Spezifikation am ehesten entspricht.
Daher ändert sich der mit Version 0 erhaltene ABI in verschiedenen Versionen von G++
da ABI-Bugs behoben sind.
Version 1 ist die Version von C++ ABI, die erstmals in G++ 3.2 erschien.
Version 2 ist die Version des C++ ABI, die zuerst in G++ 3.4 erschien und war die
Standard bis G++ 4.9.
Version 3 behebt einen Fehler beim Verstümmeln einer konstanten Adresse als Vorlagenargument.
Version 4, die erstmals in G++ 4.5 erschien, implementiert ein Standard-Mangling für Vektor
Typen.
Version 5, die erstmals in G++ 4.6 erschien, korrigiert die Verstümmelung von Attributen
const/volatile auf Funktionszeigertypen, decltype eines einfachen decl und Verwendung von a
Funktionsparameter in der Deklaration eines anderen Parameters.
Version 6, die erstmals in G++ 4.7 erschien, korrigiert das Hochstufungsverhalten von C++11
Scoped-Enumerationen und das Verstümmeln von Template-Argument-Packs, const/static_cast, Präfix ++
und --, und eine Klassenbereichsfunktion, die als Vorlagenargument verwendet wird.
Version 7, die erstmals in G++ 4.8 erschien, die nullptr_t als eingebauten Typ behandelt
und korrigiert die Verstümmelung von Lambdas im Standardargumentbereich.
Version 8, die erstmals in G++ 4.9 erschien, korrigiert das Substitutionsverhalten von
Funktionstypen mit function-cv-Qualifiern.
[VORLÄUFIGE VOLLAUTOMATISCHE TEXTÜBERSETZUNG - muss noch überarbeitet werden. Wir bitten um Ihr Verständnis.] -Wabi.
-fabi-compat-version=n
Auf Zielen, die starke Aliase unterstützen, umgeht G++ das Verstümmeln von Änderungen, indem es
ein Alias mit dem korrekten verstümmelten Namen bei der Definition eines Symbols mit einem falschen
verstümmelter Name. Dieser Schalter gibt an, welche ABI-Version für den Alias verwendet werden soll.
Mit -fabi-version=0 (die Standardeinstellung), die Standardeinstellung ist 2. Wenn eine andere ABI-Version ist
explizit ausgewählt, ist dies standardmäßig 0.
Die Kompatibilitätsversion wird auch durch . festgelegt -Wabi=n.
-fno-Zugriffskontrolle
Deaktivieren Sie alle Zugriffsprüfungen. Dieser Schalter ist hauptsächlich nützlich, um Fehler in zu umgehen
den Zugangskontrollcode.
-fcheck-neu
Vergewissern Sie sich, dass der von "operator new" zurückgegebene Zeiger nicht null ist, bevor Sie versuchen,
den zugewiesenen Speicher ändern. Diese Prüfung ist normalerweise unnötig, da die C++
Standard gibt an, dass "operator new" nur 0 zurückgibt, wenn es als "throw()" deklariert ist, in
In diesem Fall überprüft der Compiler auch ohne diese Option immer den Rückgabewert. In
alle anderen Fälle, wenn "operator new" eine nicht leere Ausnahmespezifikation hat, Speicher
Erschöpfung wird durch das Werfen von "std::bad_alloc" signalisiert. Siehe auch neu (nort).
-fconstexpr-Tiefe=n
Setzen Sie die maximale verschachtelte Auswertungstiefe für C++11 constexpr-Funktionen auf n. Eine Grenze
wird benötigt, um eine endlose Rekursion während der konstanten Ausdrucksauswertung zu erkennen. Die
Das von der Norm vorgegebene Minimum beträgt 512.
-fdeduce-init-list
Ableitung eines Vorlagentypparameters als "std::initializer_list" aus einer geschweiften Klammer aktivieren.
beiliegende Initialisierungsliste, dh
Vorlage auto forward(T t) -> decltype (realfn (t))
{
Rückkehr realfn (t);
}
nichtig f()
{
vorwärts({1,2}); // Anruf weiterleiten >
}
Dieser Abzug wurde als mögliche Erweiterung des ursprünglich vorgeschlagenen
Semantik für den C++11-Standard, war aber nicht Teil des endgültigen Standards, also ist es
standardmäßig deaktiviert. Diese Option ist veraltet und wird möglicherweise in Zukunft entfernt
G++-Version.
-ffriend-Injektion
Füge Friend-Funktionen in den umschließenden Namensraum ein, damit sie nach außen sichtbar sind
den Gültigkeitsbereich der Klasse, in der sie deklariert sind. Freundesfunktionen wurden dokumentiert
auf diese Weise im alten C++-Referenzhandbuch mit Anmerkungen zu arbeiten. In ISO C++ a
Friend-Funktion, die nicht in einem umschließenden Gültigkeitsbereich deklariert ist, kann nur gefunden werden mit
argumentabhängige Suche. GCC verwendet standardmäßig das Standardverhalten.
Diese Option dient der Kompatibilität und wird möglicherweise in einer zukünftigen Version von G++ entfernt.
-fno-elide-Konstruktoren
Der C++-Standard ermöglicht es einer Implementierung, das Erstellen einer temporären Datei wegzulassen, die nur
Wird verwendet, um ein anderes Objekt desselben Typs zu initialisieren. Die Angabe dieser Option deaktiviert
diese Optimierung und zwingt G++, den Kopierkonstruktor in allen Fällen aufzurufen.
-fno-enforce-eh-specs
Generieren Sie keinen Code, um zur Laufzeit auf Verletzungen der Ausnahmespezifikationen zu prüfen.
Diese Option verstößt gegen den C++-Standard, kann aber nützlich sein, um die Codegröße in
Produktions-Builds, ähnlich wie die Definition von "NDEBUG". Dies gibt keinen Benutzercode
Berechtigung zum Auslösen von Ausnahmen unter Verletzung der Ausnahmespezifikationen; das
Compiler optimiert immer noch basierend auf den Spezifikationen, so dass ein unerwartetes
Ausnahme führt zu undefiniertem Verhalten zur Laufzeit.
-fextern-tls-init
-fno-extern-tls-init
Die C++11- und OpenMP-Standards erlauben die Variablen "thread_local" und "threadprivate"
haben eine dynamische (Laufzeit-)Initialisierung. Um dies zu unterstützen, ist jede Verwendung einer solchen Variablen
durchläuft eine Wrapper-Funktion, die alle erforderlichen Initialisierungen durchführt. Wenn das
Verwendung und Definition der Variablen befinden sich in derselben Übersetzungseinheit, dieser Overhead kann
weg optimiert werden, aber wenn die Verwendung in einer anderen Übersetzungseinheit ist, gibt es
erheblicher Overhead, auch wenn die Variable eigentlich keine Dynamik benötigt
Initialisierung. Kann der Programmierer sicher sein, dass keine Verwendung der Variablen in einem
Das Definieren von TU muss eine dynamische Initialisierung auslösen (entweder weil die Variable
statisch initialisiert, oder es wird eine Verwendung der Variablen in der definierenden TU ausgeführt
vor jeglicher Verwendung in einer anderen TU), können sie diesen Overhead mit dem
-fno-extern-tls-init .
Auf Zielen, die Symbolaliase unterstützen, ist die Standardeinstellung -fextern-tls-init. Auf Ziele
die keine Symbolaliase unterstützen, ist die Standardeinstellung -fno-extern-tls-init.
-ffor-Scope
-fno-for-Scope
If -ffor-Scope angegeben ist, der Gültigkeitsbereich der in a . deklarierten Variablen for-init-Anweisung
ist auf die "for"-Schleife selbst beschränkt, wie vom C++-Standard spezifiziert. Wenn
-fno-for-Scope angegeben ist, der Gültigkeitsbereich der in a . deklarierten Variablen for-init-Anweisung
erstreckt sich bis zum Ende des umschließenden Geltungsbereichs, wie es in alten Versionen von G++ der Fall war, und
andere (traditionelle) Implementierungen von C++.
Wenn keines der Flags angegeben ist, ist der Standard, dem Standard zu folgen, aber zuzulassen und zu geben
eine Warnung für Code im alten Stil, der ansonsten ungültig wäre oder anders wäre
Verhalten.
-fno-gnu-Schlüsselwörter
Erkenne "typeof" nicht als Schlüsselwort, damit der Code dieses Wort als ein . verwenden kann
Kennung. Sie können stattdessen das Schlüsselwort "__typeof__" verwenden. -ansi impliziert
-fno-gnu-Schlüsselwörter.
-fno-implizite-Vorlagen
Geben Sie niemals Code für Nicht-Inline-Vorlagen aus, die implizit instanziiert werden (z
verwenden); nur Code für explizite Instanziierungen ausgeben.
-fno-implizit-inline-templates
Geben Sie auch keinen Code für implizite Instanziierungen von Inline-Vorlagen aus. Der Standard
ist, Inlines anders zu behandeln, damit Kompilierungen mit und ohne Optimierungsbedarf
die gleiche Menge von expliziten Instanzierungen.
-fno-implementieren-inlines
Um Platz zu sparen, geben Sie keine Out-of-Line-Kopien von Inline-Funktionen aus, die von gesteuert werden
"#pragma-Implementierung". Dies führt zu Linker-Fehlern, wenn diese Funktionen nicht verfügbar sind
überall dort, wo sie aufgerufen werden.
-fms-Erweiterungen
Deaktivieren Sie Wpedantic-Warnungen zu Konstrukten, die in MFC verwendet werden, wie z. B. implizites int und
Abrufen eines Zeigers auf eine Memberfunktion über eine nicht standardmäßige Syntax.
-fno-nonansi-eingebaut
Deaktivieren Sie integrierte Deklarationen von Funktionen, die nicht von ANSI/ISO C vorgeschrieben sind
enthalten "ffs", "alloca", "_exit", "index", "bzero", "conjf" und andere verwandte
Funktionen.
-fnotrow-opt
Behandeln Sie eine "throw()"-Ausnahmespezifikation, als ob sie eine "noexcept"-Spezifikation wäre, um
Reduzieren oder eliminieren Sie den Overhead der Textgröße relativ zu einer Funktion ohne Ausnahme
Spezifikation. Wenn die Funktion lokale Variablen von Typen mit nicht-trivialem . hat
Destruktoren, die Ausnahmespezifikation macht die Funktion tatsächlich kleiner, weil
die EH-Bereinigungen für diese Variablen können wegoptimiert werden. Der semantische Effekt ist
dass eine Ausnahme aus einer Funktion mit einer solchen Ausnahmespezifikation geworfen wird
führt zu einem Aufruf von "terminate" statt "unerwartet".
-fno-operatornamen
Behandeln Sie die Operatornamen-Schlüsselwörter "and", "bitand", "bitor", "compl", "not", "or" nicht.
und "xor" als Synonyme als Schlüsselwörter.
-fno-optional-diags
Deaktivieren Sie die Diagnose, die laut Standard kein Compiler ausgeben muss.
Derzeit ist die einzige solche Diagnose, die von G++ ausgegeben wird, die für einen Namen mit
mehrere Bedeutungen innerhalb einer Klasse.
-fpermissiv
Reduzieren Sie einige Diagnosen für nicht konformen Code von Fehlern auf Warnungen. Daher,
Verwendung von -fpermissiv ermöglicht die Kompilierung von nicht konformem Code.
-fno-hübsche-Vorlagen
Wenn eine Fehlermeldung auf eine Spezialisierung einer Funktionsvorlage verweist, wird der Compiler
druckt normalerweise die Signatur der Vorlage gefolgt von den Vorlagenargumenten und
beliebige typedefs oder typenames in der Signatur (zB "void f(T) [with T = int]" eher
als "void f(int)"), damit klar ist, um welches Template es sich handelt. Bei einem Fehler
message bezieht sich auf eine Spezialisierung eines Klassen-Templates, der Compiler lässt alle weg
Vorlagenargumente, die den Standardvorlagenargumenten für diese Vorlage entsprechen. Wenn
eines dieser Verhaltensweisen macht es schwieriger, die Fehlermeldung zu verstehen als
einfacher, können Sie verwenden -fno-hübsche-Vorlagen um sie zu deaktivieren.
-frepo
Aktivieren Sie die automatische Vorlageninstanziierung zur Linkzeit. Diese Option impliziert auch
-fno-implizite-Vorlagen.
-fno-rtti
Deaktivieren Sie die Generierung von Informationen zu jeder Klasse mit virtuellen Funktionen zur Verwendung durch
die C++-Laufzeittypidentifikationsfunktionen ("dynamic_cast" und "typeid"). wenn du
Verwenden Sie diese Teile der Sprache nicht, Sie können etwas Platz sparen, indem Sie dieses Flag verwenden.
Beachten Sie, dass die Ausnahmebehandlung die gleichen Informationen verwendet, aber G++ generiert sie als
erforderlich. Der Operator "dynamic_cast" kann weiterhin für Casts verwendet werden, die keine erfordern
Laufzeittypinformationen, dh Umwandlungen in "void *" oder in eindeutige Basisklassen.
-fsized-Freigabe
Aktivieren Sie die integrierten globalen Deklarationen
void-Operator delete (void *, std::size_t) noexcept;
void-Operator delete[] (void *, std::size_t) noexcept;
wie in C++14 eingeführt. Dies ist nützlich für benutzerdefinierte Ersatzfreigaben
Funktionen, die beispielsweise die Größe des Objekts verwenden, um die Aufhebung der Zuordnung zu beschleunigen.
Standardmäßig aktiviert unter -std=c++14 und darüber. Die Flagge -Wsized-Deallokation warnt
über Orte, die möglicherweise eine Definition hinzufügen möchten.
-fstats
Geben Sie am Ende der Kompilierung Statistiken über die Front-End-Verarbeitung aus. Dies
Informationen sind im Allgemeinen nur für das G++-Entwicklungsteam von Nutzen.
-fstrict-Enumerationen
Ermöglichen Sie dem Compiler die Optimierung unter der Annahme, dass ein Wert vom Aufzählungstyp
kann nur einer der Werte der Aufzählung sein (wie im C++-Standard definiert;
im Grunde ein Wert, der in der minimalen Anzahl von Bits dargestellt werden kann, die benötigt werden, um
alle Zähler darstellen). Diese Annahme ist möglicherweise nicht gültig, wenn das Programm
eine Umwandlung, um einen beliebigen ganzzahligen Wert in den Aufzählungstyp zu konvertieren.
-ftemplate-backtrace-limit=n
Legen Sie die maximale Anzahl von Notizen zur Instanziierung von Vorlagen für eine einzelne Warnung oder einen einzelnen Fehler fest
zu n. Der Standardwert ist 10.
-ftemplate-Tiefe=n
Setzen Sie die maximale Instanziierungstiefe für Vorlagenklassen auf n. Eine Grenze für die
Die Tiefe der Template-Instanziierung wird benötigt, um endlose Rekursionen während des Templates zu erkennen
Klasse Instanziierung. ANSI/ISO C++ konforme Programme dürfen sich nicht auf ein Maximum verlassen
Tiefe größer als 17 (in C++1024 auf 11 geändert). Der Standardwert ist 900, da die
Compiler kann in einigen Situationen keinen Stapelspeicher mehr haben, bevor er 1024 erreicht.
-fno-threadsafe-statics
Geben Sie den zusätzlichen Code nicht aus, um die Routinen zu verwenden, die in der C++-ABI für Thread-
sichere Initialisierung der lokalen Statik. Sie können diese Option verwenden, um die Codegröße zu reduzieren
leicht in Code, der nicht threadsicher sein muss.
-sicherung-cxa-atexit
Registrieren Sie Destruktoren für Objekte mit statischer Speicherdauer mit dem "__cxa_atexit"
Funktion statt der "Atexit"-Funktion. Diese Option ist für vollständig erforderlich
standardkonformer Umgang mit statischen Destruktoren, funktioniert aber nur, wenn Ihre C-Bibliothek
unterstützt "__cxa_atexit".
-fno-use-cxa-get-Exception-ptr
Verwenden Sie nicht die Laufzeitroutine "__cxa_get_exception_ptr". Dies bewirkt
"std::uncaught_Exception" ist falsch, aber notwendig, wenn die Laufzeitroutine
nicht verfügbar.
-fvisibility-inlines-hidden
Dieser Schalter deklariert, dass der Benutzer nicht versucht, Zeiger mit Inline zu vergleichen
Funktionen oder Methoden, bei denen die Adressen der beiden Funktionen unterschiedlich verwendet werden
gemeinsame Objekte.
Dies hat zur Folge, dass GCC Inline-Methoden effektiv mit
"__attribute__ ((Sichtbarkeit ("hidden")))", damit sie nicht im Export erscheinen
Tabelle eines VNB und erfordern keine PLT-Umleitung, wenn sie innerhalb des VNB verwendet werden.
Die Aktivierung dieser Option kann dramatische Auswirkungen auf die Lade- und Verbindungszeiten eines DSO haben, da es
reduziert die Größe der dynamischen Exporttabelle massiv, wenn die Bibliothek schwer wird
Verwendung von Vorlagen.
Das Verhalten dieses Schalters ist nicht ganz dasselbe wie das Markieren der Methoden als ausgeblendet
direkt, da es keine Auswirkungen auf statische Variablen hat, die lokal für die Funktion oder Ursache sind
den Compiler, um abzuleiten, dass die Funktion nur in einem gemeinsamen Objekt definiert ist.
Sie können eine Methode explizit als sichtbar markieren, um den Effekt des zu negieren
für diese Methode wechseln. Wenn Sie beispielsweise Zeiger mit a . vergleichen möchten
bestimmten Inline-Methode können Sie sie als Standardsichtbarkeit markieren. Markieren der
Das Einschließen einer Klasse mit expliziter Sichtbarkeit hat keine Auswirkung.
Explizit instanziierte Inline-Methoden sind von dieser Option nicht betroffen, da ihre Verknüpfung
könnte andernfalls eine gemeinsame Bibliotheksgrenze überschreiten.
-fvisibility-ms-kompat
Dieses Flag versucht, Sichtbarkeitseinstellungen zu verwenden, um das C++-Verknüpfungsmodell von GCC zu erstellen
kompatibel mit dem von Microsoft Visual Studio.
Das Flag nimmt folgende Änderungen am Verknüpfungsmodell von GCC vor:
1. Es setzt die Standardsichtbarkeit auf "versteckt", wie -fvisibility=versteckt.
2. Typen, aber nicht ihre Mitglieder, werden standardmäßig nicht ausgeblendet.
3. Die One-Definition-Regel wird für Typen ohne explizite Sichtbarkeit gelockert
Spezifikationen, die in mehr als einem gemeinsamen Objekt definiert sind: diese Deklarationen
sind zulässig, wenn sie zulässig sind, wenn diese Option nicht verwendet wird.
In neuem Code ist es besser zu verwenden -fvisibility=versteckt und exportieren Sie die Klassen, die
soll von außen sichtbar sein. Leider ist es möglich, dass sich der Code verlässt,
vielleicht versehentlich auf das Visual Studio-Verhalten.
Diese Änderungen haben unter anderem zur Folge, dass statische Datenmember desselben Typs
mit dem gleichen Namen, aber in verschiedenen gemeinsamen Objekten definiert sind unterschiedlich, also ändern
das eine ändert das andere nicht; und dass Zeiger auf Funktionselemente definiert in
verschiedene gemeinsam genutzte Objekte können nicht gleich sein. Wenn dieses Flag angegeben ist, ist es a
Verletzung der ODR, Typen mit gleichem Namen unterschiedlich zu definieren.
-fvtable-verify=[std|vorinit|keine]
Schalten Sie ein (oder aus, wenn Sie . verwenden) -fvtable-verify=keine) das Sicherheitsmerkmal, das bei . verifiziert
Laufzeit, für jeden virtuellen Aufruf, dass der vtable-Zeiger, über den der Aufruf erfolgt
made ist für den Objekttyp gültig und wurde nicht beschädigt oder überschrieben.
Wenn zur Laufzeit ein ungültiger vtable-Zeiger erkannt wird, wird ein Fehler gemeldet und
Die Ausführung des Programms wird sofort angehalten.
Diese Option bewirkt, dass beim Programmstart Laufzeitdatenstrukturen erstellt werden, die
zum Verifizieren der vtable-Zeiger verwendet. Die Optionen std und vorinit kontrolliere die
Zeitpunkt, wann diese Datenstrukturen aufgebaut werden. In beiden Fällen sind die Datenstrukturen
gebaut, bevor die Ausführung "main" erreicht. Verwenden von -fvtable-verify=std verursacht die Daten
Strukturen, die erstellt werden sollen, nachdem Shared Libraries geladen und initialisiert wurden.
-fvtable-verify=preinit bewirkt, dass sie erstellt werden, bevor Shared Libraries erstellt wurden
geladen und initialisiert.
Wenn diese Option mehrmals in der Befehlszeile mit unterschiedlichen Werten erscheint
spezifizierten, keine hat höchste Priorität vor beiden std und vorinit; vorinit nimmt
Priorität vor std.
-fvtv-debug
Bei Verwendung in Verbindung mit -fvtable-verify=std or -fvtable-verify=preinit, Ursachen
Debug-Versionen der Laufzeitfunktionen für die Vtable-Verifizierungsfunktion
namens. Dieses Flag veranlasst den Compiler auch, Informationen darüber zu protokollieren, welche vtable
Zeiger, die es für jede Klasse findet. Diese Informationen werden in eine Datei namens . geschrieben
vtv_set_ptr_data.log in dem von der Umgebungsvariablen benannten Verzeichnis VTV_LOGS_DIR
wenn dies definiert ist oder das aktuelle Arbeitsverzeichnis andernfalls.
Hinweis: Diese Funktion hängt an Daten in die Logdatei. Wenn Sie eine neue Protokolldatei wünschen, seien Sie
Löschen Sie auf jeden Fall alle vorhandenen.
-fvtv-zählt
Dies ist ein Debugging-Flag. Bei Verwendung in Verbindung mit -fvtable-verify=std or
-fvtable-verify=preinit, führt dies dazu, dass der Compiler die Gesamtzahl der
virtuellen Aufrufe, auf die es trifft, und die Anzahl der Überprüfungen, die es einfügt. Es auch
zählt die Anzahl der Aufrufe bestimmter Laufzeitbibliotheksfunktionen, die es einfügt und
protokolliert diese Informationen für jede Kompilierungseinheit. Der Compiler schreibt diese Informationen
in eine Datei namens vtv_count_data.log in dem von der Umgebungsvariablen benannten Verzeichnis
VTV_LOGS_DIR wenn dies definiert ist oder das aktuelle Arbeitsverzeichnis andernfalls. Es auch
zählt die Größe der vtable-Zeigersätze für jede Klasse und schreibt diese Informationen
zu vtv_class_set_sizes.log Im selben Verzeichnis.
Hinweis: Diese Funktion hängt an Daten zu den Logfiles. Um neue Protokolldateien zu erhalten, stellen Sie sicher, dass
alle vorhandenen löschen.
-fno-schwach
Verwenden Sie keine schwache Symbolunterstützung, selbst wenn sie vom Linker bereitgestellt wird. Standardmäßig ist G++
verwendet schwache Symbole, wenn sie verfügbar sind. Diese Option existiert nur zum Testen, und
sollte nicht von Endbenutzern verwendet werden; es führt zu minderwertigem Code und hat keine Vorteile.
Diese Option wird möglicherweise in einer zukünftigen Version von G++ entfernt.
-nostdinc++
Suchen Sie nicht nach Header-Dateien in den für C++ spezifischen Standardverzeichnissen, aber tun Sie
suchen Sie immer noch die anderen Standardverzeichnisse. (Diese Option wird verwendet, wenn die
C++-Bibliothek.)
Darüber hinaus haben diese Optimierungs-, Warn- und Codegenerierungsoptionen nur Bedeutungen
für C++-Programme:
-Wabi (Nur C, Objective-C, C++ und Objective-C++)
Wenn ein explizites -fabi-version=n Option verwendet wird, veranlasst G++, bei der Generierung zu warnen
Code, der wahrscheinlich nicht mit dem herstellerneutralen C++ ABI kompatibel ist. Seit G++ jetzt
Standardmäßig ist -fabi-version=0, -Wabi hat keine Auswirkung, es sei denn, eine ältere ABI-Version ist
ausgewählt (mit -fabi-version=n) oder eine ältere Kompatibilitätsversion ausgewählt ist (mit
-Wabi=n or -fabi-compat-version=n).
Obwohl man sich bemüht hat, vor all diesen Fällen zu warnen, gibt es wahrscheinlich einige
Fälle, vor denen nicht gewarnt wird, obwohl G++ inkompatiblen Code generiert.
Es kann auch vorkommen, dass Warnungen ausgegeben werden, obwohl der Code
generiert ist kompatibel.
Sie sollten Ihren Code neu schreiben, um diese Warnungen zu vermeiden, wenn Sie sich Sorgen über die
Tatsache, dass von G++ generierter Code möglicherweise nicht binärkompatibel mit Code ist, der von . generiert wurde
andere Compiler.
-Wabi kann auch mit einer expliziten Versionsnummer verwendet werden, um vor Kompatibilität zu warnen
mit einem besonderen -fabi-Version Ebene, zB -Wabi=2 um vor Änderungen in Bezug auf zu warnen
-fabi-version=2. Die Angabe einer Versionsnummer setzt auch -fabi-compat-version=n.
Die bekannten Inkompatibilitäten in -fabi-version=2 (was der Standard von GCC 3.4 bis war
4.9) umfassen:
* Eine Vorlage mit einem Nicht-Typ-Vorlagenparameter des Referenztyps wurde verstümmelt
falsch:
extern int N;
Vorlage strukt S {};
Leere n (S ) {2}
Dies wurde behoben in -fabi-version=3.
* SIMD-Vektortypen, die mit "__attribute ((vector_size))" deklariert wurden, wurden in a . verstümmelt
nicht standardmäßiger Weg, der das Überladen von Funktionen unter Verwendung von Vektoren nicht zulässt
in verschiedenen Größen.
Die Mangel wurde geändert in -fabi-version=4.
* "__attribute ((const))" und "noreturn" wurden als Typqualifizierer verstümmelt und
"decltype" einer einfachen Deklaration wurde weggeklappt.
Diese Verstümmelungsprobleme wurden behoben in -fabi-version=5.
* Scoped-Enumeratoren, die als Argumente an eine variadic-Funktion übergeben werden, werden wie heraufgestuft
Enumeratoren ohne Bereich, die dazu führen, dass sich "va_arg" beschwert. Bei den meisten Zielen ist dies nicht der Fall
wirken sich tatsächlich auf den Parameter aus, der ABI übergibt, da es keine Möglichkeit gibt, ein Argument zu übergeben
kleiner als "int".
Außerdem änderte die ABI die Verstümmelung von Template-Argument-Packs, "const_cast",
"static_cast", Präfix-Inkrement/Dekrement und eine Klassenbereichsfunktion, die als a . verwendet wird
Vorlagenargument.
Diese Probleme wurden behoben in -fabi-version=6.
* Lambdas im Standardargumentbereich wurden falsch verstümmelt und die ABI geändert
das Verstümmeln von "nullptr_t".
Diese Probleme wurden behoben in -fabi-version=7.
* Beim Verstümmeln eines Funktionstyps mit function-cv-Qualifiern wird das unqualifizierte
Funktionstyp wurde fälschlicherweise als Ersetzungskandidat behandelt.
Dies wurde behoben in -fabi-version=8.
Es warnt auch vor psABI-bezogenen Änderungen. Die bekannte psABI ändert sich an dieser Stelle
umfasst:
* Für SysV/x86-64 werden Unions mit "long double"-Elementen im Speicher als
in psABI angegeben. Zum Beispiel:
Gewerkschaft U {
langes Doppel-ld;
int i;
};
"union U" wird immer im Speicher übergeben.
-Wabi-Tag (Nur C++ und Objective-C++)
Warnen, wenn ein Typ mit einem ABI-Tag in einem Kontext verwendet wird, der dieses ABI-Tag nicht hat.
Weitere Informationen finden Sie auch in den C + + Attribute Weitere Informationen zu ABI-Tags.
-Wctor-dtor-Datenschutz (Nur C++ und Objective-C++)
Warnen, wenn eine Klasse unbrauchbar erscheint, weil alle Konstruktoren oder Destruktoren darin enthalten sind
-Klasse sind privat und hat weder Freunde noch öffentliche statische Memberfunktionen.
Warnen Sie auch, wenn es keine nicht-privaten Methoden gibt und mindestens ein privates Mitglied vorhanden ist
Funktion, die kein Konstruktor oder Destruktor ist.
-Wdelete-non-virtual-dtor (Nur C++ und Objective-C++)
Warnen, wenn "delete" verwendet wird, um eine Instanz einer Klasse zu zerstören, die virtuelle
Funktionen und nicht-virtueller Destruktor. Es ist unsicher, eine Instanz eines abgeleiteten . zu löschen
Klasse durch einen Zeiger auf eine Basisklasse, wenn die Basisklasse kein virtuelles
Zerstörer. Diese Warnung wird aktiviert von -Wand.
-Wliteral-Suffix (Nur C++ und Objective-C++)
Warnen, wenn einem String- oder Zeichenliteral ein ud-Suffix folgt, das nicht
beginnen Sie mit einem Unterstrich. Als konforme Erweiterung behandelt GCC solche Suffixe als
separate Vorverarbeitungstoken, um die Abwärtskompatibilität mit Code zu gewährleisten
das Formatierungsmakros von " ". Zum Beispiel:
#define __STDC_FORMAT_MACROS
#enthalten
#einschließen
int main () {
int64_t i64 = 123;
printf("Mein int64: %"PRId64"\n", i64);
}
In diesem Fall wird "PRId64" als separates Vorverarbeitungstoken behandelt.
Diese Warnung ist standardmäßig aktiviert.
-Verwirrung (Nur C++ und Objective-C++)
Warnen, wenn eine durch C++11 verbotene einschränkende Konvertierung innerhalb von . auftritt { }, z.B
int i = {2.2}; // Fehler: Verengung von double auf int
Diese Flagge ist enthalten in -Wand und -Wc++11-kompatibel.
Mit -std=c++11, -Wno-Einengung unterdrückt die vom Standard geforderte Diagnose.
Beachten Sie, dass dies keinen Einfluss auf die Bedeutung von wohlgeformtem Code hat. Konvertierungen eingrenzen
werden im SFINAE-Kontext immer noch als schlecht ausgebildet angesehen.
-Wnoaußer (Nur C++ und Objective-C++)
Warnen, wenn ein noException-Ausdruck aufgrund eines Aufrufs einer Funktion zu false ausgewertet wird
die keine nicht auslösende Ausnahmespezifikation hat (dh "throw()" oder
"noexcept"), aber der Compiler weiß, dass er niemals eine Ausnahme auslöst.
-Wnicht-virtuelles-dtor (Nur C++ und Objective-C++)
Warnen, wenn eine Klasse virtuelle Funktionen und einen zugänglichen nicht-virtuellen Destruktor hat
selbst oder in einer zugänglichen polymorphen Basisklasse, in welchem Fall es möglich ist, aber
unsicher, eine Instanz einer abgeleiteten Klasse durch einen Zeiger auf die Klasse selbst zu löschen
oder Basisklasse. Diese Warnung wird automatisch aktiviert, wenn -Weffc++ angegeben.
-Schreiber (Nur C++ und Objective-C++)
Warnen, wenn die im Code angegebene Reihenfolge der Memberinitialisierer nicht mit der Reihenfolge übereinstimmt
in denen sie ausgeführt werden müssen. Zum Beispiel:
strukturiere A {
int i;
int j;
A(): j (0), ich (1) { }
};
Der Compiler ordnet die Memberinitialisierer für "i" und "j" neu an, damit sie mit den
Deklarationsreihenfolge der Mitglieder, die eine entsprechende Warnung ausgeben. Diese Warnung ist
aktiviert durch -Wand.
-fext-numerische-literale (Nur C++ und Objective-C++)
Akzeptieren Sie imaginäre, Festkomma- oder maschinendefinierte Literalzahlensuffixe als GNU
Erweiterungen. Wenn diese Option deaktiviert ist, werden diese Suffixe als C++11-Benutzer behandelt.
definierte literale numerische Suffixe. Dies ist standardmäßig für alle Dialekte vor C++11 aktiviert
und alle GNU-Dialekte: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14. Dies
Option ist ab ISO C++11 standardmäßig deaktiviert (-std=c++11, ...).
Folgende -W... Optionen sind nicht betroffen von -Wand.
-Weffc++ (Nur C++ und Objective-C++)
Warnen Sie vor Verstößen gegen die folgenden Stilrichtlinien von Scott Meyers Effektiv
C + + Reihe von Büchern:
* Definieren Sie einen Kopierkonstruktor und einen Zuweisungsoperator für Klassen mit dynamisch-
zugewiesenen Speicher.
* Bevorzugen Sie die Initialisierung gegenüber der Zuweisung in Konstruktoren.
* Lassen Sie "operator=" einen Verweis auf *this zurückgeben.
* Versuchen Sie nicht, eine Referenz zurückzugeben, wenn Sie ein Objekt zurückgeben müssen.
* Unterscheiden Sie zwischen Präfix- und Postfix-Formen von Inkrement- und Dekrementoperatoren.
* Überladen Sie niemals "&&", "||", oder ",".
Diese Option ermöglicht auch -Wnicht-virtuelles-dtor, das auch eines der effektivsten C++
Empfehlungen. Der Check wird jedoch erweitert, um vor dem Mangel an virtuellen zu warnen
Destruktor auch in zugänglichen nicht-polymorphen Basenklassen.
Beachten Sie bei der Auswahl dieser Option, dass die Standardbibliotheksheader nicht allen gehorchen
dieser Leitlinien; verwenden grep -v um diese Warnungen herauszufiltern.
-Wstrict-Null-Sentinel (Nur C++ und Objective-C++)
Warnen Sie vor der Verwendung einer nicht gecasteten "NULL" als Sentinel. Beim Kompilieren nur mit GCC
Dies ist ein gültiger Sentinel, da "NULL" als "__null" definiert ist. Obwohl es eine Null ist
Zeigerkonstante anstelle eines Nullzeigers, hat sie garantiert die gleiche Größe
als Anhaltspunkt. Diese Verwendung ist jedoch nicht auf verschiedene Compiler übertragbar.
-Wno-non-template-friend (Nur C++ und Objective-C++)
Deaktivieren Sie Warnungen, wenn Friend-Funktionen ohne Vorlagen in einer Vorlage deklariert werden.
Seit dem Aufkommen der expliziten Unterstützung von Vorlagenspezifikationen in G++, wenn der Name des
Freund ist eine unqualifizierte ID (dh Freund foo(int)), die C++-Sprachspezifikation
verlangt, dass der Freund eine gewöhnliche Funktion ohne Vorlage deklariert oder definiert. (Abschnitt
14.5.3). Bevor G++ die explizite Spezifikation implementierte, konnten unqualifizierte IDs
als besondere Spezialisierung einer Schablonenfunktion interpretiert. Weil das
nicht konformes Verhalten ist nicht mehr das Standardverhalten für G++,
-Wnon-template-friend ermöglicht dem Compiler, vorhandenen Code auf potenzielle Probleme zu überprüfen
Spots und ist standardmäßig aktiviert. Dieses neue Compilerverhalten kann mit deaktiviert werden
-Wno-non-template-friend, die den konformen Compiler-Code beibehält, aber deaktiviert die
hilfreiche Warnung.
-Wold-Style-Besetzung (Nur C++ und Objective-C++)
Warnen, wenn in einem C++-Programm eine Umwandlung im alten Stil (C-Stil) in einen Nicht-Void-Typ verwendet wird.
Die neuen Casts ("dynamic_cast", "static_cast", "reinterpret_cast" und
"const_cast") sind weniger anfällig für unbeabsichtigte Effekte und viel einfacher zu suchen.
-Woverloaded-virtuell (Nur C++ und Objective-C++)
Warnen, wenn eine Funktionsdeklaration virtuelle Funktionen vor einer Basisklasse verbirgt. Zum
Beispiel, bei:
strukturiere A {
virtuelle Leere f();
};
struct B: öffentlich A {
Leere f(int);
};
die "A"-Klassenversion von "f" ist in "B" versteckt und Code wie:
B*b;
b -> f();
lässt sich nicht kompilieren.
-Wno-pmf-Konvertierungen (Nur C++ und Objective-C++)
Deaktivieren Sie die Diagnose zum Konvertieren eines gebundenen Zeigers an eine Memberfunktion in eine Ebene
Zeiger.
-Wsign-Promo (Nur C++ und Objective-C++)
Warnen, wenn die Überladungsauflösung eine Heraufstufung von einem unsignierten oder aufgezählten Typ zu . auswählt
einen vorzeichenbehafteten Typ, über eine Konvertierung in einen vorzeichenlosen Typ der gleichen Größe. Vorherige
Versionen von G++ versuchten unsignedness zu bewahren, aber der Standard schreibt die aktuelle vor
Verhalten.
Optionen Regelung Objective-C und Objective-C ++ Dialekte
(HINWEIS: Dieses Handbuch beschreibt nicht die Sprachen Objective-C und Objective-C++
sich.
In diesem Abschnitt werden die Befehlszeilenoptionen beschrieben, die nur für Objective-C von Bedeutung sind
und Objective-C++-Programme. Sie können auch die meisten sprachunabhängigen GNU . verwenden
Compiler-Optionen. Sie können beispielsweise eine Datei kompilieren son_class.m so was:
gcc -g -fgnu -runtime -o -c son_class.m
In diesem Beispiel -fgnu-Laufzeit ist eine Option, die nur für Objective-C und Objective-C++ gedacht ist
Programme; Sie können die anderen Optionen mit jeder von GCC unterstützten Sprache verwenden.
Beachten Sie, dass Objective-C-Kompilierungen, da Objective-C eine Erweiterung der Sprache C ist,
kann auch Optionen verwenden, die für das C-Frontend spezifisch sind (z. B. -Wtraditionell). ähnlich
Objective-C++-Kompilierungen können C++-spezifische Optionen verwenden (z. -Wabi).
Hier ist eine Liste von Optionen, die sind einzige zum Kompilieren von Objective-C und Objective-C++
Programme:
-fconstant-string-class=Klassenname
Verwenden Sie die Klassenname als Name der Klasse, die für jede Literalzeichenfolge instanziiert werden soll
mit der Syntax "@"..." angegeben. Der Standardklassenname ist "NXConstantString", wenn
die GNU-Laufzeit verwendet wird, und "NSConstantString", wenn die NeXT-Laufzeit verwendet wird
verwendet (siehe unten). Die -fconstant-cfstrings Option, falls ebenfalls vorhanden, überschreibt die
-fconstant-string-class setzen und bewirken, dass "@"..."-Literale als konstant angelegt werden
CoreFoundation-Strings.
-fgnu-Laufzeit
Generieren Sie Objektcode, der mit der Standard-GNU Objective-C-Laufzeit kompatibel ist. Das ist
die Standardeinstellung für die meisten Systemtypen.
-fnext-Laufzeit
Generieren Sie Ausgaben, die mit der NeXT-Laufzeit kompatibel sind. Dies ist die Standardeinstellung für NeXT-basierte
Systemen, einschließlich Darwin und Mac OS X. Das Makro "__NEXT_RUNTIME__" ist vordefiniert, wenn
(und nur wenn) diese Option verwendet wird.
-fno-nil-Empfänger
Angenommen, alle Objective-C-Nachrichten-Dispatches ("[Empfängernachricht:arg]") in diesem
Übersetzungseinheit sicherstellen, dass der Empfänger nicht "Null" ist. Dies ermöglicht mehr
effiziente Einstiegspunkte in der Laufzeit genutzt werden. Diese Option ist nur verfügbar in
in Verbindung mit der NeXT Runtime und ABI Version 0 oder 1.
-fobjc-abi-version=n
Version verwenden n der Objective-C ABI für die ausgewählte Laufzeit. Diese Option ist
wird derzeit nur für die NeXT-Laufzeit unterstützt. In diesem Fall ist Version 0 die
traditionelles (32-Bit) ABI ohne Unterstützung für Eigenschaften und andere Objective-C 2.0
Ergänzungen. Version 1 ist das traditionelle (32-Bit) ABI mit Unterstützung für Eigenschaften und
andere Objective-C 2.0-Ergänzungen. Version 2 ist das moderne (64-Bit) ABI. Wenn nichts ist
angegeben, ist die Standardeinstellung Version 0 auf 32-Bit-Zielmaschinen und Version 2 auf 64-Bit
Zielmaschinen.
-fobjc-call-cxx-cdtors
Prüfen Sie für jede Objective-C-Klasse, ob eine ihrer Instanzvariablen ein C++-Objekt ist
mit einem nicht trivialen Standardkonstruktor. Wenn ja, synthetisieren Sie ein spezielles "- (id)
.cxx_construct" Instanzmethode, die nicht-triviale Standardkonstruktoren auf jedem ausführt
solche Instanzvariablen der Reihe nach und geben dann "self" zurück. Überprüfen Sie auf ähnliche Weise, ob
Instanzvariable ist ein C++-Objekt mit einem nicht-trivialen Destruktor, und wenn ja, synthetisieren
eine spezielle "- (void) .cxx_destruct"-Methode, die alle diese Standard-Destruktoren ausführt, in
umgekehrte Reihenfolge.
Nur die so generierten Methoden "- (id) .cxx_construct" und "- (void) .cxx_destruct"
operieren mit Instanzvariablen, die in der aktuellen Objective-C-Klasse deklariert sind, und nicht mit diesen
von Oberklassen geerbt. Es liegt in der Verantwortung der Objective-C-Laufzeit,
alle diese Methoden in der Vererbungshierarchie eines Objekts aufrufen. Die ID)
.cxx_construct"-Methoden werden von der Laufzeit unmittelbar nach einem neuen Objekt aufgerufen
Instanz wird zugewiesen; die Methoden "- (void) .cxx_destruct" werden sofort aufgerufen
bevor die Laufzeit eine Objektinstanz freigibt.
Zum jetzigen Zeitpunkt unterstützt nur die NeXT-Laufzeit unter Mac OS X 10.4 und höher
Aufrufen der Methoden "- (id) .cxx_construct" und "- (void) .cxx_destruct".
-fobjc-direktversand
Erlauben Sie schnelle Sprünge zum Message Dispatcher. Auf Darwin geschieht dies über die
Komm-Seite.
-fobjc-Ausnahmen
Aktivieren Sie die syntaktische Unterstützung für die strukturierte Ausnahmebehandlung in Objective-C, ähnlich wie
was C++ und Java bieten. Diese Option ist erforderlich, um das Objective-C . zu verwenden
Schlüsselwörter @try, @throw, @catch, @finally und @synchronized. Diese Option ist verfügbar
sowohl mit der GNU-Laufzeit als auch mit der NeXT-Laufzeit (aber nicht in Verbindung mit
die NeXT-Laufzeit unter Mac OS X 10.2 und früher).
-fobjc-gc
Aktivieren Sie die Garbage Collection (GC) in Objective-C- und Objective-C++-Programmen. Diese Option
ist nur mit der NeXT-Runtime verfügbar; die GNU-Laufzeit hat einen anderen Müll
-Collection-Implementierung, die keine speziellen Compiler-Flags erfordert.
-fobjc-nilcheck
Suchen Sie für die NeXT-Laufzeit mit Version 2 des ABI nach einem Null-Empfänger in Methode
Aufrufe vor dem eigentlichen Methodenaufruf. Dies ist die Standardeinstellung und kann sein
deaktiviert mit -fno-objc-nilcheck. Klassenmethoden und Superaufrufe werden nie überprüft
für nil auf diese Weise, egal auf was dieses Flag gesetzt ist. Derzeit funktioniert diese Flagge
nichts, wenn die GNU-Laufzeit oder eine ältere Version der NeXT-Laufzeit-ABI verwendet wird.
-fobjc-std=objc1
Entspricht der Sprachsyntax von Objective-C 1.0, der von GCC 4.0 anerkannten Sprache.
Dies betrifft nur die Objective-C-Ergänzungen der Sprache C/C++; es hat keinen Einfluss
Konformität mit C/C++-Standards, die durch den separaten C/C++-Dialekt kontrolliert wird
Options-Flags. Wenn diese Option mit Objective-C oder Objective-C++ verwendet wird
Compiler wird jede Objective-C-Syntax, die von GCC 4.0 nicht erkannt wird, abgelehnt. Dies
ist nützlich, wenn Sie sicherstellen müssen, dass Ihr Objective-C-Code mit kompiliert werden kann
ältere Versionen von GCC.
-objc-Klassen ersetzen
Geben Sie eine spezielle Markierung aus, die anweist ld(1) das resultierende Objekt nicht statisch zu verknüpfen
Datei und erlauben dyld(1) um es stattdessen zur Laufzeit zu laden. Dies wird verwendet in
in Verbindung mit dem Debugging-Modus Fix-and-Continue, bei dem die Objektdatei in
Frage kann im Laufe des Programms neu kompiliert und dynamisch neu geladen werden
Ausführung, ohne dass das Programm selbst neu gestartet werden muss. Derzeit Fix-and-
Weiter-Funktionalität ist nur in Verbindung mit der NeXT-Runtime auf dem Mac verfügbar
OSX 10.3 und höher.
-fzero-link
Beim Kompilieren für die NeXT-Laufzeit ersetzt der Compiler normalerweise Aufrufe von
"objc_getClass("...")" (wenn der Name der Klasse zur Kompilierzeit bekannt ist) mit
statische Klassenreferenzen, die zur Ladezeit initialisiert werden, was die Laufzeit verbessert
Leistung. Angabe der -fzero-link Flag unterdrückt dieses Verhalten und verursacht
Aufrufe von "objc_getClass("...")" bleiben erhalten. Dies ist nützlich in Zero-Link
Debug-Modus, da er die Modifikation einzelner Klassenimplementierungen ermöglicht
während der Programmausführung. Die GNU-Laufzeit behält derzeit immer Aufrufe an
"objc_get_class("...")" ungeachtet der Befehlszeilenoptionen.
-fno-local-ivars
Standardmäßig kann auf Instanzvariablen in Objective-C zugegriffen werden, als ob sie lokal wären
Variablen aus den Methoden der Klasse, in der sie deklariert sind. Dies kann zu
Shadowing zwischen Instanzvariablen und anderen entweder lokal deklarierten Variablen
innerhalb einer Klassenmethode oder global mit demselben Namen. Angabe der -fno-local-ivars
-Flag deaktiviert dieses Verhalten und vermeidet so Probleme mit dem Spiegeln von Variablen.
-fivar-sichtbarkeit=[Öffentlichkeit|geschützt|privat|Paket]
Setzen Sie die Standardsichtbarkeit der Instanzvariablen auf die angegebene Option, damit Instanz
Variablen, die außerhalb des Gültigkeitsbereichs von Zugriffsmodifiziererdirektiven deklariert sind, sind standardmäßig der
angegebene Sichtbarkeit.
-gen-dekls
Deklarieren Sie Schnittstellendeklarationen für alle in der Quelldatei angezeigten Klassen in einer Datei namens
Quellname.decl.
-Wassign-Abfangen (Nur Objective-C und Objective-C++)
Warnen, wenn eine Objective-C-Zuweisung vom Garbage Collector abgefangen wird.
-Wno-Protokoll (Nur Objective-C und Objective-C++)
Wenn eine Klasse deklariert ist, um ein Protokoll zu implementieren, wird für jede Methode eine Warnung ausgegeben
im Protokoll, das nicht von der Klasse implementiert wird. Das Standardverhalten ist zu
eine Warnung für jede Methode ausgeben, die nicht explizit in der Klasse implementiert ist, auch wenn a
Methodenimplementierung wird von der Superklasse geerbt. Wenn Sie das verwenden -Wno-Protokoll
Option, dann gelten Methoden, die von der Superklasse geerbt wurden, als implementiert,
und es wird keine Warnung für sie ausgegeben.
-Wselektor (Nur Objective-C und Objective-C++)
Warnen, wenn mehrere Methoden unterschiedlichen Typs für denselben Selektor gefunden werden während
Zusammenstellung. Die Prüfung erfolgt auf der Methodenliste in der Endphase von
Zusammenstellung. Zusätzlich wird für jeden Selektor, der in a . erscheint, eine Prüfung durchgeführt
"@selector(...)"-Ausdruck, und eine entsprechende Methode für diesen Selektor wurde erstellt
beim Kompilieren gefunden. Da diese Prüfungen die Methodentabelle erst am Ende scannen
der Kompilierung werden diese Warnungen nicht ausgegeben, wenn die letzte Stufe der Kompilierung
nicht erreicht, weil zum Beispiel beim Übersetzen ein Fehler festgestellt wird oder weil die
-fsyntax-nur Option verwendet wird.
-Wstrict-Selector-Match (Nur Objective-C und Objective-C++)
Warnen, wenn mehrere Methoden mit unterschiedlichen Argumenten und/oder Rückgabetypen für a . gefunden werden
angegebenen Selektor, wenn versucht wird, eine Nachricht mit diesem Selektor an einen Empfänger von . zu senden
Geben Sie "id" oder "Klasse" ein. Wenn dieses Flag deaktiviert ist (was das Standardverhalten ist), wird die
Compiler lässt solche Warnungen aus, wenn gefundene Unterschiede auf Typen beschränkt sind, die sich teilen
die gleiche Größe und Ausrichtung.
-Wundeclared-Selektor (Nur Objective-C und Objective-C++)
Warnen, wenn ein "@selector(...)"-Ausdruck gefunden wird, der auf einen nicht deklarierten Selektor verweist. EIN
Selektor gilt als nicht deklariert, wenn zuvor keine Methode mit diesem Namen deklariert wurde
der Ausdruck "@selector(...)", entweder explizit in einem @interface oder @protocol
-Deklaration oder implizit in einem @implementation-Abschnitt. Diese Option wird immer ausgeführt
seine Prüfung, sobald ein "@selector(...)"-Ausdruck gefunden wird, während -Wselektor einzige
führt seine Prüfungen in der letzten Phase der Kompilierung durch. Dies erzwingt auch die Codierung
Stilkonvention, dass Methoden und Selektoren vor der Verwendung deklariert werden müssen.
-print-objc-Laufzeitinfo
Generieren Sie einen C-Header, der die größte Struktur beschreibt, die nach Wert übergeben wird, falls vorhanden.
Optionen zu Control Diagnostisch Chat-Funktion Formatierung:
Traditionell wurden Diagnosemeldungen unabhängig vom Ausgabegerät formatiert
Aspekt (zB seine Breite, ...). Mit den nachfolgend beschriebenen Optionen können Sie die
Formatierungsalgorithmus für Diagnosemeldungen, z. B. wie viele Zeichen pro Zeile, wie oft
Quellenstandortinformationen sollten gemeldet werden. Beachten Sie, dass einige Sprach-Frontends möglicherweise
respektieren diese Optionen nicht.
-fNachrichtenlänge=n
Versuchen Sie, Fehlermeldungen so zu formatieren, dass sie in Zeilen von etwa passen n Zeichen. Wenn n is
null, dann erfolgt kein Zeilenumbruch; jede Fehlermeldung erscheint in einer einzigen Zeile.
Dies ist die Standardeinstellung für alle Frontends.
-fdiagnostics-show-location=einmal
Nur sinnvoll im Zeilenumbruchmodus. Weist den Reporter für Diagnosemeldungen an,
Informationen zum Quellstandort ausgeben einmal; das heißt, falls die Nachricht zu lang ist, um zu passen
auf einer einzelnen physischen Zeile und muss umbrochen werden, der Quellort wird nicht ausgegeben
(als Präfix) immer wieder in nachfolgenden Fortsetzungszeilen. Dies ist das
Standardverhalten.
-fdiagnostics-show-location=jede Zeile
Nur sinnvoll im Zeilenumbruchmodus. Weist den Reporter für Diagnosemeldungen an,
geben die gleichen Quellstandortinformationen (als Präfix) für physische Leitungen aus, die sich ergeben
aus dem Prozess des Unterbrechens einer Nachricht, die zu lang ist, um in eine einzelne Zeile zu passen.
-fdiagnostics-Farbe[=WENN]
-fno-Diagnose-Farbe
Verwenden Sie Farbe in der Diagnose. WENN is niemals, immer, oder auch Auto. Die Standardeinstellung hängt davon ab, wie
der Compiler konfiguriert wurde, kann einer der oben genannten sein WENN Optionen oder auch
niemals if GCC_COLORS Umgebungsvariable ist in der Umgebung nicht vorhanden, und Auto
Andernfalls. Auto bedeutet, dass Farbe nur verwendet wird, wenn der Standardfehler ein Terminal ist. Die
Formen -fdiagnostics-color und -fno-Diagnose-Farbe sind Pseudonyme für
-fdiagnostics-color=immer und -fdiagnostics-color=nie, Bzw.
Die Farben werden durch die Umgebungsvariable definiert GCC_COLORS. Sein Wert ist ein Doppelpunkt
getrennte Liste von Fähigkeiten und Select Graphic Rendition (SGR)-Teilzeichenfolgen. SGR
Befehle werden vom Terminal oder Terminalemulator interpretiert. (Siehe den Abschnitt in
die Dokumentation Ihres Textterminals für zulässige Werte und deren Bedeutungen als
Zeichenattribute.) Diese Teilstringwerte sind ganze Zahlen in dezimaler Darstellung
und kann mit Semikolon verkettet werden. Zu den üblichen zu verkettenden Werten gehören 1 für
Fett gedruckt, 4 zum unterstreichen, 5 zum Blinken, 7 für invers, 39 für die Standardvordergrundfarbe, 30
zu 37 für Vordergrundfarben, 90 zu 97 für Vordergrundfarben im 16-Farbmodus, 38, 5, 0 zu
38, 5, 255 für 88-Farben- und 256-Farben-Modi Vordergrundfarben, 49 für Standardhintergrund
Farbe, Farbe, 40 zu 47 für Hintergrundfarben, 100 zu 107 für Hintergrundfarben im 16-Farbmodus,
und 48, 5, 0 zu 48, 5, 255 für 88-Farben- und 256-Farben-Modus-Hintergrundfarben.
Der Standard GCC_COLORS is
error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
woher 01; 31 ist kräftig rot, 01; 35 ist fettes Magenta, 01; 36 ist fettes Cyan, 01; 32 ist fett
grün und 01 ist fett. Einstellung GCC_COLORS auf die leere Zeichenfolge deaktiviert Farben.
Folgende Funktionen werden unterstützt.
"Fehler="
SGR-Teilzeichenfolge für Fehler: Markierungen.
"Warnung="
SGR-Teilzeichenfolge für Warnung: Markierungen.
"Anmerkung="
SGR-Teilzeichenfolge für Anmerkung: Markierungen.
"caret="
SGR-Teilzeichenfolge für Caret-Zeile.
"locus="
SGR-Teilzeichenfolge für Standortinformationen, Datei: Zeile or Datei:Zeile:Spalte usw.
"Zitat="
SGR-Teilzeichenfolge für Informationen, die in Anführungszeichen gedruckt werden.
-fno-diagnostics-show-option
Standardmäßig enthält jede ausgegebene Diagnose Text, der die Befehlszeilenoption angibt
die die Diagnose direkt steuert (wenn eine solche Option der Diagnose bekannt ist)
Maschinen). Angabe der -fno-diagnostics-show-option Flagge unterdrückt das
Verhalten.
-fno-diagnostics-show-caret
Standardmäßig enthält jede ausgegebene Diagnose die ursprüngliche Quellzeile und ein Caret-Zeichen '^'
die Spalte angeben. Diese Option unterdrückt diese Informationen. Die Quellzeile ist
abgeschnitten auf n Zeichen, wenn die -fNachrichtenlänge=n Option gegeben ist. Wenn die Ausgabe
erfolgt an der Klemme, die Breite ist auf die durch die angegebene Breite begrenzt COLUMNS
Umgebungsvariable oder, falls nicht gesetzt, auf die Terminalbreite.
Optionen zu PREISANFRAGE (Request) or unterdrückt auf natürliche Weise das Hungergefühl Warnungen
Warnungen sind Diagnosemeldungen, die Konstruktionen melden, die nicht inhärent sind
fehlerhaft sind, aber riskant sind oder darauf hindeuten, dass ein Fehler aufgetreten sein könnte.
Die folgenden sprachunabhängigen Optionen aktivieren keine spezifischen Warnungen, sondern steuern die
Arten von Diagnosen, die von GCC hergestellt werden.
-fsyntax-nur
Überprüfen Sie den Code auf Syntaxfehler, aber tun Sie nichts darüber hinaus.
-fmax-Fehler=n
Begrenzt die maximale Anzahl von Fehlermeldungen auf n, an welchem Punkt GCC eher aussteigt
als zu versuchen, den Quellcode weiter zu verarbeiten. Wenn n ist 0 (die Standardeinstellung),
die Anzahl der erzeugten Fehlermeldungen ist nicht begrenzt. Wenn -Wfatal-Fehler ist auch
angegeben, dann -Wfatal-Fehler hat Vorrang vor dieser Option.
-w Alle Warnmeldungen sperren.
-Fehler
Machen Sie alle Warnungen zu Fehlern.
-Werror=
Machen Sie die angegebene Warnung zu einem Fehler. Der Bezeichner für eine Warnung wird angehängt;
z.B. -Werror=Schalter schaltet die Warnungen aus, die von gesteuert werden -Wschalter in Fehler.
Dieser Schalter nimmt eine negative Form an, um zu negieren -Fehler für spezifische Warnungen;
z.B. -Wno-error=Schalter macht -Wschalter Warnungen sind keine Fehler, auch wenn -Fehler
ist in Kraft.
Die Warnmeldung für jede steuerbare Warnung enthält die Option, die steuert
die Warnung. Diese Option kann dann mit verwendet werden -Werror= und -Wno-Fehler= wie beschrieben
Oben. (Das Drucken der Option in der Warnmeldung kann mit der Taste . deaktiviert werden
-fno-diagnostics-show-option Flagge.)
Beachten Sie, dass die Angabe -Werror=foo automatisch impliziert -Wfoo. Jedoch -Wno-Fehler=foo
bedeutet nichts.
-Wfatal-Fehler
Diese Option bewirkt, dass der Compiler die Kompilierung beim ersten aufgetretenen Fehler abbricht
anstatt zu versuchen, weiterzumachen und weitere Fehlermeldungen auszudrucken.
Sie können viele spezifische Warnungen anfordern, deren Optionen mit beginnen -WBeispielsweise
-Wimplizit Warnungen bei impliziten Erklärungen anzufordern. Jede dieser spezifischen Warnungen
options hat auch einen negativen Formanfang -Wnein- um Warnungen auszuschalten; zum Beispiel,
-Wno-implizit. In diesem Handbuch wird nur eines der beiden Formulare aufgeführt, je nachdem, welches nicht das Standardformat ist.
Für weitere sprachspezifische Optionen siehe auch C + + Dialekt Optionen und Objective-C
und Objective-C ++ Dialekt Optionen.
Einige Optionen, wie z -Wand und -Wextra, aktivieren Sie andere Optionen, wie z -Unbenutzt, Die
kann weitere Optionen aktivieren, wie z -Wunused-Wert. Die kombinierte Wirkung von positiven und
Negativformen ist, dass spezifischere Optionen Vorrang vor weniger spezifischen haben,
unabhängig von ihrer Position in der Befehlszeile. Für Optionen gleicher Spezifität,
der letzte tritt in Kraft. Über Pragmas aktivierte oder deaktivierte Optionen werden wirksam, als ob sie
erschien am Ende der Befehlszeile.
Wenn eine nicht erkannte Warnoption angefordert wird (z. B. -Wunknown-Warnung), GCC emittiert a
Diagnose, die besagt, dass die Option nicht erkannt wird. Wenn jedoch die -Wnein- Formular verwendet wird,
das Verhalten ist etwas anders: Es wird keine Diagnose erstellt für -Wno-unknown-Warnung
es sei denn, es werden andere Diagnosen erstellt. Dies ermöglicht die Verwendung neuer -Wnein- Optionen
mit alten Compilern, aber wenn etwas schief geht, warnt der Compiler, dass ein nicht erkanntes
Option vorhanden ist.
-Wpedantisch
-pedantisch
Geben Sie alle Warnungen aus, die von striktem ISO C und ISO C++ gefordert werden; alle Programme ablehnen, die
Verwenden Sie verbotene Erweiterungen und einige andere Programme, die ISO C und ISO nicht folgen
C++. Befolgt für ISO C die Version des ISO C-Standards, die von jedem -Std
Wahlmöglichkeit verwendet.
Gültige ISO C- und ISO C++-Programme sollten mit oder ohne diese Option ordnungsgemäß kompiliert werden
(obwohl einige wenige erfordern -ansi oder eine -Std Option zur Angabe der erforderlichen Version von
ISOC). Ohne diese Option können jedoch bestimmte GNU-Erweiterungen und traditionelle C- und
C++-Funktionen werden ebenfalls unterstützt. Mit dieser Option werden sie abgelehnt.
-Wpedantisch verursacht keine Warnmeldungen für die Verwendung der alternativen Schlüsselwörter, deren
Namen beginnen und enden mit __. Umständliche Warnungen sind auch im Ausdruck deaktiviert
das folgt auf "__Erweiterung__". Diese sollten jedoch nur von System-Header-Dateien verwendet werden
Fluchtwege; Anwendungsprogramme sollten sie vermeiden.
Einige Benutzer versuchen zu verwenden -Wpedantisch um Programme auf strikte ISO C Konformität zu überprüfen. Sie
stellen bald fest, dass es nicht ganz das tut, was sie wollen: Es findet einige Nicht-ISO-Praktiken,
aber nicht alle --- nur diejenigen, für die ISO C erfordert eine Diagnose und einige andere für
welche Diagnosen hinzugefügt wurden.
Eine Funktion zum Melden von Nichteinhaltung von ISO C kann in einigen Fällen nützlich sein.
würde aber erheblichen Mehraufwand erfordern und ganz anders sein als
-Wpedantisch. Wir haben nicht vor, eine solche Funktion in naher Zukunft zu unterstützen.
Wo der mit angegebene Standard -Std repräsentiert einen GNU erweiterten Dialekt von C, wie zum Beispiel
gnu90 or gnu99, es gibt ein entsprechendes Base Standard, die Version von ISO C, auf der
der GNU-erweiterte Dialekt basiert. Warnungen von -Wpedantisch werden gegeben, wo sie sind
von der Grundnorm gefordert. (Es ist nicht sinnvoll, solche Warnungen zu geben
nur für Funktionen, die nicht im angegebenen GNU-C-Dialekt enthalten sind, da per Definition das GNU
Dialekte von C enthalten alle Funktionen, die der Compiler mit der angegebenen Option unterstützt, und
es gäbe nichts zu warnen.)
-pedantische-Fehler
Geben Sie einen Fehler aus, wenn die Base Standard (sehen -Wpedantisch) erfordert eine Diagnose, in
einige Fälle, in denen es zur Kompilierzeit undefiniertes Verhalten gibt und in einigen anderen Fällen
die die Kompilierung von nach dem Standard gültigen Programmen nicht verhindern.
Dies ist nicht gleichbedeutend mit -Werror=pedantisch, da dadurch Fehler aktiviert werden
Option und nicht durch letztere aktiviert und umgekehrt.
-Wand
Dadurch werden alle Warnungen zu Konstruktionen aktiviert, die einige Benutzer berücksichtigen
fragwürdig und leicht zu vermeiden (oder zu ändern, um die Warnung zu verhindern), selbst in
in Verbindung mit Makros. Dadurch werden auch einige sprachspezifische Warnungen beschrieben
in C + + Dialekt Optionen und Objective-C und Objective-C ++ Dialekt Optionen.
-Wand schaltet die folgenden Warnflags ein:
-Watdress -Warray-Grenzen=1 (nur mit -O2) -Wc++11-kompatibel -Wc++14-kompatibel
-Wchar-Indexe -Wenum-vergleichen (in C/ObjC; dies ist standardmäßig in C++ aktiviert)
-Wimplicit-int (nur C und Ziel-C) -Wimplicit-Funktionsdeklaration (C und
Nur Ziel-C) -WKommentar -Wformat -Wmain (nur für C/ObjC und es sei denn
-freistehend) -Wvielleicht-nicht initialisiert -Wmissing-Klammern (nur für C/ObjC) -Wnonnull
-Wopenmp-simd - Klammern -Wpointer-Zeichen -Schreiber -Rückgabe-Typ -WSequenz-Punkt
-Wsign-vergleichen (nur in C++) -Wstrict-Aliasing -Wstrict-overflow=1 -Wschalter
-Wtrigraphen -Wuninitialisiert -Wunknown-Pragmas -Wunused-Funktion -Wunused-Label
-Wunused-Wert -Wunused-Variable -Wvolatile-register-var
Beachten Sie, dass einige Warnflags nicht impliziert werden durch -Wand. Einige von ihnen warnen vor
Konstruktionen, die Nutzer im Allgemeinen nicht für fragwürdig halten, die aber
gelegentlich möchten Sie vielleicht nachsehen; andere warnen vor Konstruktionen, die
in einigen Fällen notwendig oder schwer zu vermeiden, und es gibt keine einfache Möglichkeit, die
Code, um die Warnung zu unterdrücken. Einige von ihnen werden aktiviert durch -Wextra aber viele von ihnen
muss einzeln aktiviert werden.
-Wextra
Dies aktiviert einige zusätzliche Warnflags, die nicht aktiviert werden durch -Wand. (Diese Option verwendet
heißen -W. Der ältere Name wird weiterhin unterstützt, aber der neuere Name ist mehr
beschreibend.)
-Wclobbered -Wempty-Körper -Wignored-Qualifier -Wfehlende Feldinitialisierer
-Wmissing-Parameter-Typ (nur C) -Wold-Style-Deklaration (nur C) -Woverride-init
-Wsign-vergleichen -Wtype-Grenzen -Wuninitialisiert -Wunused-Parameter (nur mit -Unbenutzt or
-Wand) -Wunused-but-set-Parameter (nur mit -Unbenutzt or -Wand)
Die Option -Wextra druckt auch Warnmeldungen für die folgenden Fälle:
* Ein Zeiger wird mit "<", "<=", ">" oder ">=" mit ganzzahliger Null verglichen.
* (nur C++) Ein Enumerator und ein Nicht-Enumerator erscheinen beide in einer Bedingung
Ausdruck.
* (nur C++) Mehrdeutige virtuelle Basen.
* (nur C++) Subskription eines Arrays, das als "register" deklariert wurde.
* (nur C++) Übernahme der Adresse einer Variablen, die als "register" deklariert wurde.
* (nur C++) Eine Basisklasse wird nicht im Kopierkonstruktor einer abgeleiteten Klasse initialisiert.
-Wchar-Indexe
Warnen, wenn ein Array-Index den Typ "char" hat. Dies ist eine häufige Fehlerursache, da
Programmierer vergessen oft, dass dieser Typ auf einigen Maschinen signiert ist. Diese Warnung ist
aktiviert durch -Wand.
-WKommentar
Warnen, wenn eine Kommentar-Start-Sequenz /* erscheint in a /* kommentieren, oder wann immer a
Backslash-Newline erscheint in a // Kommentar. Diese Warnung wird aktiviert von -Wand.
-Wno-Coverage-Mismatch
Warnen, wenn Feedback-Profile nicht übereinstimmen, wenn Sie das . verwenden -fprofile-verwenden Möglichkeit. Wenn eine
Quelldatei wird zwischen dem Kompilieren mit geändert -fprofile-gen und mit -fprofile-verwenden,
die Dateien mit dem Profil-Feedback stimmen möglicherweise nicht mit der Quelldatei überein und GCC kann nicht
Verwenden Sie die Profil-Feedback-Informationen. Diese Warnung ist standardmäßig aktiviert und ist
als Fehler behandelt. -Wno-Coverage-Mismatch kann verwendet werden, um die Warnung zu deaktivieren oder
-Wno-error=Abdeckungs-Mismatch kann verwendet werden, um den Fehler zu deaktivieren. Fehler deaktivieren
denn diese Warnung kann zu schlecht optimiertem Code führen und ist nur nützlich bei
sehr kleine Änderungen wie Bugfixes an einer bestehenden Codebasis. Komplett deaktivieren
die Warnung wird nicht empfohlen.
-Wno-cpp
(nur C, Objective-C, C++, Objective-C++ und Fortran)
Unterdrückt Warnmeldungen, die von "#warning"-Direktiven ausgegeben werden.
-Doppel-Promotion (nur C, C++, Objective-C und Objective-C++)
Geben Sie eine Warnung aus, wenn ein Wert vom Typ "float" implizit auf "double" hochgestuft wird. CPUs
mit einer 32-Bit "single-precision" Gleitkommaeinheit "float" in Hardware implementieren,
sondern emulieren "double" in der Software. Auf einer solchen Maschine Berechnungen mit
"doppelte" Werte sind wegen des Software-Overheads viel teurer
Emulation.
Es ist leicht, versehentlich Berechnungen mit "double" durchzuführen, da Gleitkomma
Literale sind implizit vom Typ "double". Zum Beispiel bei:
Schwimmbereich (Schwimmerradius)
{
Rückgabe 3.14159 * Radius * Radius;
}
der Compiler führt die gesamte Berechnung mit "double" durch, da die Gleitkomma
wörtlich ist ein "Doppel".
-Wformat
-Wformat=n
Überprüfen Sie Aufrufe von "printf" und "scanf" usw., um sicherzustellen, dass die angegebenen Argumente
Typen haben, die für die angegebene Formatzeichenfolge geeignet sind, und dass die Konvertierungen
im Formatstring angegeben sind sinnvoll. Dazu gehören Standardfunktionen und
andere durch Formatattribute spezifiziert, in "printf", "scanf", "strftime" und
"strfmon" (eine X/Open-Erweiterung, nicht im C-Standard) Familien (oder andere Ziel-
bestimmte Familien). Welche Funktionen werden geprüft, ohne dass Formatattribute
angegeben, hängt von der gewählten Standardversion ab und solche Funktionsprüfungen
ohne das angegebene Attribut werden deaktiviert durch -freistehend or -fno-eingebaut.
Die Formate werden gegen die Formatfunktionen geprüft, die von GNU libc Version 2.2 unterstützt werden.
Dazu gehören alle ISO C90- und C99-Funktionen sowie Funktionen aus dem Single Unix
Spezifikation und einige BSD- und GNU-Erweiterungen. Andere Bibliotheksimplementierungen möglicherweise nicht
alle diese Funktionen unterstützen; GCC unterstützt keine Warnungen zu Funktionen, die darüber hinausgehen
Einschränkungen einer bestimmten Bibliothek. Wie auch immer, wenn -Wpedantisch wird verwendet mit -Wformat,
Warnungen zu Formatfunktionen, die nicht in der ausgewählten Standardversion enthalten sind (aber nicht
für "strfmon"-Formate, da diese in keiner Version des C-Standards enthalten sind).
-Wformat=1
-Wformat
Option -Wformat entspricht -Wformat=1 und -Wno-Format entspricht
-Wformat=0. Da -Wformat prüft auch auf Nullformatargumente für mehrere
Funktionen, -Wformat impliziert auch -Wnonnull. Einige Aspekte dieser Formatebene
Die Überprüfung kann durch die Optionen deaktiviert werden: -Wno-Format-enthält-nul,
-Wno-format-extra-args und -Wno-Format-Null-Länge. -Wformat wird aktiviert durch
-Wand.
-Wno-Format-enthält-nul
If -Wformat angegeben ist, warnen Sie nicht vor Formatzeichenfolgen, die NUL-Bytes enthalten.
-Wno-format-extra-args
If -Wformat angegeben ist, warnen Sie nicht vor überzähligen Argumenten für ein "printf" oder
Formatfunktion "scanf". Der C-Standard gibt an, dass solche Argumente
ignoriert.
Wo die nicht verwendeten Argumente zwischen verwendeten Argumenten liegen, die mit . angegeben sind $
Operandennummern-Angaben werden normalerweise trotzdem Warnungen ausgegeben, da die
Implementierung konnte nicht wissen, welcher Typ an "va_arg" übergeben werden soll, um die nicht verwendeten zu überspringen
Argumente. Bei "scanf"-Formaten unterdrückt diese Option jedoch die
Warnung, wenn die nicht verwendeten Argumente alle Zeiger sind, da das Single Unix
Die Spezifikation besagt, dass solche unbenutzten Argumente erlaubt sind.
-Wno-Format-Null-Länge
If -Wformat angegeben ist, warnen Sie nicht vor Formaten der Länge Null. Der C-Standard
gibt an, dass Formate der Länge Null zulässig sind.
-Wformat=2
Ermöglichen -Wformat plus zusätzliche Formatprüfungen. Derzeit äquivalent zu -Wformat
-Wformat-nicht literal -Wformat-Sicherheit -Wformat-y2k.
-Wformat-nicht literal
If -Wformat angegeben ist, auch warnen, wenn der Formatstring kein Stringliteral ist
und kann daher nicht überprüft werden, es sei denn, die Formatfunktion nimmt ihre Formatargumente als
eine "va_liste".
-Wformat-Sicherheit
If -Wformat angegeben ist, warnen Sie auch vor der Verwendung von Formatfunktionen, die
mögliche Sicherheitsprobleme. Derzeit warnt dies vor Aufrufen von "printf" und
"scanf"-Funktionen, bei denen die Formatzeichenfolge kein Zeichenfolgenliteral ist und es keine
Formatargumente, wie in "printf (foo);". Dies kann eine Sicherheitslücke sein, wenn die
Die Formatzeichenfolge stammt von einer nicht vertrauenswürdigen Eingabe und enthält %n. (Dies ist derzeit ein
Teilmenge von was -Wformat-nicht literal warnt davor, aber in Zukunft können Warnungen sein
hinzugefügt zu -Wformat-Sicherheit die nicht enthalten sind -Wformat-nicht literal.)
-Wformat-Unterschrift
If -Wformat angegeben ist, warnen Sie auch, wenn die Formatzeichenfolge ein unsigned . erfordert
Argument und das Argument ist vorzeichenbehaftet und umgekehrt.
HINWEIS: In Ubuntu 8.10 und späteren Versionen ist diese Option standardmäßig für C aktiviert,
C++, ObjC, ObjC++. Verwenden Sie zum Deaktivieren -Wno-Format-Sicherheit, oder deaktivieren Sie alle Formate
Warnungen mit -Wformat=0. Um Formatsicherheitswarnungen schwerwiegend zu machen, geben Sie
-Werror=Formatsicherheit.
-Wformat-y2k
If -Wformat angegeben ist, warnen Sie auch vor "strftime"-Formaten, die möglicherweise nur a
zweistellige Jahreszahl.
-Wnonnull
Warnung vor der Übergabe eines NULL-Zeigers für Argumente, die so gekennzeichnet sind, dass sie einen Nicht-Null-Wert erfordern
durch das Funktionsattribut "nicht null".
-Wnonnull ist enthalten in -Wand und -Wformat. Es kann mit dem deaktiviert werden -Wno-nicht-null
.
-Winit-Selbst (nur C, C++, Objective-C und Objective-C++)
Warnen Sie vor nicht initialisierten Variablen, die mit sich selbst initialisiert werden. Beachten Sie dies
Option kann nur mit dem verwendet werden -Wuninitialisiert .
GCC warnt beispielsweise nur im folgenden Snippet davor, dass "i" nicht initialisiert ist
wann -Winit-Selbst wurde angegeben:
Ganzzahl f()
{
int ich = ich;
Rückkehr ich;
}
Diese Warnung wird aktiviert von -Wand in C ++.
-Wimplicit-int (nur C und Ziel-C)
Warnen, wenn eine Deklaration keinen Typ angibt. Diese Warnung wird aktiviert von -Wand.
-Wimplicit-Funktionsdeklaration (nur C und Ziel-C)
Geben Sie eine Warnung aus, wenn eine Funktion verwendet wird, bevor sie deklariert wird. Im C99-Modus
(-std=c99 or -Std = gnu99), ist diese Warnung standardmäßig aktiviert und wird zu einem
Fehler von -pedantische-Fehler. Diese Warnung wird auch aktiviert von -Wand.
-Wimplizit (nur C und Ziel-C)
Das gleiche wie -Wimplicit-int und -Wimplicit-Funktionsdeklaration. Diese Warnung ist aktiviert
by -Wand.
-Wignored-Qualifier (nur C und C++)
Warnen, wenn der Rückgabetyp einer Funktion einen Typqualifizierer wie "const" hat. Für ISO C
ein solcher Typqualifizierer hat keine Auswirkung, da der von einer Funktion zurückgegebene Wert kein
lwert. Für C++ wird die Warnung nur für Skalartypen oder "void" ausgegeben. ISO C
verbietet qualifizierte "void"-Rückgabetypen in Funktionsdefinitionen, daher sind solche Rückgabetypen
auch ohne diese Option immer eine Warnung erhalten.
Diese Warnung wird auch aktiviert von -Wextra.
-Wmain
Warnen, wenn der Typ von "main" verdächtig ist. "main" sollte eine Funktion mit extern sein
linkage, int zurückgeben, entweder null Argumente, zwei oder drei Argumente von . annehmen
passenden Typen. Diese Warnung ist in C++ standardmäßig aktiviert und wird entweder aktiviert
-Wand or -Wpedantisch.
-Wmissing-Klammern
Warnen, wenn ein Aggregat- oder Union-Initialisierer nicht vollständig eingeklammert ist. Im Folgenden
Beispiel: Der Initialisierer für "a" ist nicht vollständig eingeklammert, der für "b" jedoch vollständig
eingeklammert. Diese Warnung wird aktiviert von -Wand in C.
int a[2][2] = {0, 1, 2, 3};
int b[2][2] = { {0, 1}, { 2, 3} };
Diese Warnung wird aktiviert von -Wand.
-Wfehlende-include-verzeichnisse (nur C, C++, Objective-C und Objective-C++)
Warnen, wenn kein vom Benutzer bereitgestelltes Include-Verzeichnis vorhanden ist.
- Klammern
Warnen, wenn in bestimmten Kontexten Klammern weggelassen werden, z
Zuweisung in einem Kontext, in dem ein Wahrheitswert erwartet wird oder wenn Operatoren verschachtelt sind
deren Vorrang die Leute oft verwirren.
Warnen Sie auch, wenn ein Vergleich wie "x<=y<=z" erscheint; dies entspricht "(x<=y ? 1 :
0) <= z", was eine andere Interpretation als die gewöhnliche mathematische ist
Notation.
Warnen Sie auch vor Konstruktionen, bei denen es zu Verwirrung kommen kann, welche "if"-Anweisung und
"sonst"-Zweig gehört. Hier ein Beispiel für einen solchen Fall:
{
wenn eine)
wenn (b)
foo ();
sonst
Bar ();
}
In C/C++ gehört jeder "else"-Zweig zur innersten möglichen "if"-Anweisung, die
in diesem Beispiel ist "wenn (b)". Dies ist oft nicht das, was der Programmierer erwartet hat, da
im obigen Beispiel durch vom Programmierer gewählte Einrückung dargestellt. Wenn es da ist
Um diese Verwirrung zu vermeiden, gibt GCC eine Warnung aus, wenn dieses Flag angegeben wird.
Um die Warnung zu eliminieren, fügen Sie explizite Klammern um die innerste "if"-Anweisung so
das "else" kann auf keinen Fall zum einschließenden "if" gehören. Der resultierende Code sieht aus
so was:
{
wenn eine)
{
wenn (b)
foo ();
sonst
Bar ();
}
}
Warnen Sie auch vor gefährlichen Verwendungen der GNU-Erweiterung zu "?:" mit weggelassenem Mitteloperand.
Wenn die Bedingung im Operator "?": ein boolescher Ausdruck ist, ist der weggelassene Wert
immer 1. Programmierer erwarten oft, dass es sich um einen Wert handelt, der innerhalb der Bedingung berechnet wird
Ausdruck statt.
Diese Warnung wird aktiviert von -Wand.
-WSequenz-Punkt
Warnung vor Code mit möglicherweise undefinierter Semantik aufgrund von Sequenzverletzungen
Punktregeln in den C- und C++-Standards.
Die C- und C++-Standards definieren die Reihenfolge, in der Ausdrücke in einem C/C++-Programm
bewertet in Bezug auf Reihenfolge Punkte, die eine Teilordnung zwischen den
Ausführung von Programmteilen: die vor dem Sequenzpunkt ausgeführten und die
danach ausgeführt. Diese treten nach der Auswertung eines vollständigen Ausdrucks auf (einer, der
ist nicht Teil eines größeren Ausdrucks), nach der Auswertung des ersten Operanden von a
"&&", "||", "? :" oder "," (Komma) Operator, bevor eine Funktion aufgerufen wird (aber nach dem
Auswertung seiner Argumente und des Ausdrucks, der die aufgerufene Funktion bezeichnet) und in
bestimmte andere Orte. Anders als durch die Sequenzpunktregeln ausgedrückt, ist die Reihenfolge
der Auswertung von Unterausdrücken eines Ausdrucks ist nicht angegeben. All diese Regeln
beschreiben nur eine Teilordnung und keine Gesamtordnung, da z. B. zwei
Funktionen werden innerhalb eines Ausdrucks ohne Sequenzpunkt dazwischen aufgerufen, die
Die Reihenfolge, in der die Funktionen aufgerufen werden, ist nicht angegeben. Allerdings sind die Standards
haben entschieden, dass sich Funktionsaufrufe nicht überschneiden.
Es wird nicht angegeben, wenn zwischen Sequenzpunkten Änderungen an den Werten von
Objekte wirken. Programme, deren Verhalten davon abhängt, haben undefiniertes Verhalten;
die C- und C++-Standards legen fest, dass "Zwischen dem vorherigen und dem nächsten Sequenzpunkt an
Der gespeicherte Wert des Objekts darf höchstens einmal durch die Auswertung eines
Ausdruck. Darüber hinaus darf der vorherige Wert nur gelesen werden, um den Wert zu bestimmen
gespeichert werden.". Wenn ein Programm gegen diese Regeln verstößt, werden die Ergebnisse auf bestimmte
Umsetzung sind völlig unvorhersehbar.
Beispiele für Code mit undefiniertem Verhalten sind "a = a++;", "a[n] = b[n++]" und "a[i++] =
i;". Einige kompliziertere Fälle werden mit dieser Option nicht diagnostiziert, und es kann zu einem
gelegentlich falsch positives Ergebnis, aber im Allgemeinen hat es sich als ziemlich effektiv erwiesen bei
Erkennen dieser Art von Problem in Programmen.
Der Standard ist verwirrend formuliert, daher gibt es einige Diskussionen über die genaue
Bedeutung der Sequenzpunktregeln in subtilen Fällen. Links zu Diskussionen der
Problem, einschließlich vorgeschlagener formaler Definitionen, finden Sie auf der GCC-Leseseite,
beimhttp://gcc.gnu.org/readings.html>.
Diese Warnung wird aktiviert von -Wand für C und C++.
-Wno-return-local-adr
Warnen Sie nicht davor, einen Zeiger (oder in C++ eine Referenz) auf eine Variable zurückzugeben, die geht
außerhalb des Gültigkeitsbereichs, nachdem die Funktion zurückkehrt.
-Rückgabe-Typ
Warnen Sie immer, wenn eine Funktion mit einem Rückgabetyp definiert ist, der standardmäßig "int" ist. Ebenfalls
warnt vor jeder "return"-Anweisung ohne Rückgabewert in einer Funktion, deren Rückgabetyp
ist nicht "void" (Abfall vom Ende des Funktionskörpers wird als Rückkehr angesehen
ohne Wert) und über eine "return"-Anweisung mit einem Ausdruck in einer Funktion
deren Rückgabetyp "void" ist.
Für C++ erzeugt eine Funktion ohne Rückgabetyp immer eine Diagnosemeldung, auch
wann -Wno-Return-Typ angegeben. Die einzigen Ausnahmen sind "main" und Funktionen
in Systemheadern definiert.
Diese Warnung wird aktiviert von -Wand.
-Wshift-count-negativ
Warnen, wenn die Schichtanzahl negativ ist. Diese Warnung ist standardmäßig aktiviert.
-Wshift-Zähler-Überlauf
Warnen, wenn Schichtanzahl >= Breite des Typs. Diese Warnung ist standardmäßig aktiviert.
-Wschalter
Warnen, wenn eine "switch"-Anweisung einen Index vom Aufzählungstyp hat und kein "case"
für einen oder mehrere der genannten Codes dieser Aufzählung. (Das Vorhandensein einer "Standardeinstellung"
label verhindert diese Warnung.) "case" Labels auch außerhalb des Aufzählungsbereichs
Warnungen provozieren, wenn diese Option verwendet wird (auch wenn es ein "Standard"-Label gibt). Dies
Warnung wird aktiviert durch -Wand.
-Wswitch-Standard
Warnen Sie immer dann, wenn eine "switch"-Anweisung keinen "default"-Fall hat.
-Schalter-Aufzählung
Warnen, wenn eine "switch"-Anweisung einen Index vom Aufzählungstyp hat und kein "case"
für einen oder mehrere der genannten Codes dieser Aufzählung. "case"-Etiketten außerhalb der
Aufzählungsbereich lösen auch Warnungen aus, wenn diese Option verwendet wird. Der einzige Unterschied
zwischen -Wschalter und diese Option ist, dass diese Option eine Warnung über ein Weglassen ausgibt
Aufzählungscode, auch wenn ein "Standard"-Label vorhanden ist.
-Wswitch-bool
Warnen Sie immer dann, wenn eine "switch"-Anweisung einen Index vom Typ Boolean hat. Es ist möglich zu
Unterdrücken Sie diese Warnung, indem Sie den steuernden Ausdruck in einen anderen Typ als umwandeln
"bool". Zum Beispiel:
Schalter ((int) (a == 4))
{
...
}
Diese Warnung ist standardmäßig für C- und C++-Programme aktiviert.
-Wsync-nand (nur C und C++)
Warnen, wenn die integrierten Funktionen "__sync_fetch_and_nand" und "__sync_nand_and_fetch"
Gebraucht. Diese Funktionen haben die Semantik in GCC 4.4 geändert.
-Wtrigraphen
Warnen Sie, wenn Trigraphen gefunden werden, die die Bedeutung des Programms ändern könnten
(Trigraphen in Kommentaren werden nicht gewarnt). Diese Warnung wird aktiviert von -Wand.
-Wunused-but-set-Parameter
Warnen, wenn ein Funktionsparameter zugewiesen, aber ansonsten nicht verwendet wird (außer
seine Erklärung).
Um diese Warnung zu unterdrücken, verwenden Sie das Attribut "unused".
Diese Warnung wird auch aktiviert von -Unbenutzt Zusammen mit -Wextra.
-Wunused-aber-set-variabel
Warnen, wenn eine lokale Variable zugewiesen, aber ansonsten nicht verwendet wird (abgesehen von ihrer
Erklärung). Diese Warnung wird aktiviert von -Wand.
Um diese Warnung zu unterdrücken, verwenden Sie das Attribut "unused".
Diese Warnung wird auch aktiviert von -Unbenutzt, die aktiviert wird durch -Wand.
-Wunused-Funktion
Warnen, wenn eine statische Funktion deklariert, aber nicht definiert oder eine nicht-inline-statische Funktion ist
Funktion wird nicht verwendet. Diese Warnung wird aktiviert von -Wand.
-Wunused-Label
Warnen, wenn ein Label deklariert, aber nicht verwendet wird. Diese Warnung wird aktiviert von -Wand.
Um diese Warnung zu unterdrücken, verwenden Sie das Attribut "unused".
-Wunused-local-typedefs (Nur C, Objective-C, C++ und Objective-C++)
Warnen, wenn eine lokal in einer Funktion definierte typedef nicht verwendet wird. Diese Warnung ist
aktiviert durch -Wand.
-Wunused-Parameter
Warnen, wenn ein Funktionsparameter außer seiner Deklaration nicht verwendet wird.
Um diese Warnung zu unterdrücken, verwenden Sie das Attribut "unused".
-Wno-unused-resultat
Nicht warnen, wenn ein Aufrufer einer Funktion, die mit dem Attribut "warn_unused_result" gekennzeichnet ist, dies tut
seinen Rückgabewert nicht verwenden. Die Standardeinstellung ist -Wunused-Ergebnis.
-Wunused-Variable
Warnen, wenn eine lokale Variable oder eine nicht konstante statische Variable außer nicht verwendet wird
seine Erklärung. Diese Warnung wird aktiviert von -Wand.
Um diese Warnung zu unterdrücken, verwenden Sie das Attribut "unused".
-Wunused-Wert
Warnen Sie, wenn eine Anweisung ein Ergebnis berechnet, das explizit nicht verwendet wird. Unterdrücken
diese Warnung wandelte den nicht verwendeten Ausdruck in "void" um. Dazu gehört ein Ausdruck-
-Anweisung oder die linke Seite eines Kommaausdrucks, der keine Nebenwirkungen enthält.
Zum Beispiel verursacht ein Ausdruck wie "x[i,j]" eine Warnung, während "x[(void)i,j]"
nicht.
Diese Warnung wird aktiviert von -Wand.
-Unbenutzt
Alles oben -Unbenutzt Optionen kombiniert.
Um eine Warnung über einen nicht verwendeten Funktionsparameter zu erhalten, müssen Sie entweder
-Wextra -Unbenutzt (beachten Sie, dass -Wand impliziert -Unbenutzt) oder separat angeben
-Wunused-Parameter.
-Wuninitialisiert
Warnen, wenn eine automatische Variable ohne vorherige Initialisierung verwendet wird oder wenn eine Variable
kann durch einen "setjmp"-Aufruf überlagert werden. In C++ warnen, wenn eine nicht statische Referenz oder
Der statische Member "const" wird in einer Klasse ohne Konstruktoren angezeigt.
Wenn Sie vor Code warnen möchten, der den nicht initialisierten Wert der Variablen in . verwendet
seinen eigenen Initialisierer verwenden, verwenden Sie den -Winit-Selbst .
Diese Warnungen treten für einzelne nicht initialisierte oder überladene Strukturelemente auf,
Union- oder Array-Variablen sowie für Variablen, die nicht initialisiert oder überladen sind
als Ganzes. Sie treten nicht für als "flüchtig" deklarierte Variablen oder Elemente auf. Weil
Diese Warnungen hängen von der Optimierung ab, den genauen Variablen oder Elementen, für die es
Ob Warnungen angezeigt werden, hängt von den genauen Optimierungsoptionen und der verwendeten GCC-Version ab.
Beachten Sie, dass bei einer Variablen, die nur zur Berechnung von a . verwendet wird, möglicherweise keine Warnung ausgegeben wird
Wert, der selbst nie verwendet wird, da solche Berechnungen durch den Datenfluss gelöscht werden können
Analyse, bevor die Warnungen gedruckt werden.
-Wvielleicht-nicht initialisiert
Für eine automatische Variable, wenn ein Pfad vom Funktionseintrag zu einer Verwendung von . existiert
die Variable, die initialisiert wird, aber es gibt einige andere Pfade, für die die
Variable nicht initialisiert ist, gibt der Compiler eine Warnung aus, wenn er die
nicht initialisierte Pfade werden zur Laufzeit nicht ausgeführt. Diese Warnungen sind optional
weil GCC nicht schlau genug ist, um alle Gründe zu erkennen, warum der Code korrekt sein könnte
obwohl ein Fehler aufgetreten ist. Hier ist ein Beispiel, wie dies passieren kann:
{
int x;
Schalter (y)
{
Fall 1: x = 1;
break;
Fall 2: x = 4;
break;
Fall 3: x = 5;
}
foo (x);
}
Wenn der Wert von "y" immer 1, 2 oder 3 ist, wird "x" immer initialisiert, aber GCC
kennt das nicht. Um die Warnung zu unterdrücken, müssen Sie einen Standardfall mit . angeben
behaupten(0) oder ähnlicher Code.
Diese Option warnt auch, wenn eine nichtflüchtige automatische Variable durch a . geändert werden könnte
Aufruf von "longjmp". Auch diese Warnungen sind nur in der Optimierung möglich
Zusammenstellung.
Der Compiler sieht nur die Aufrufe von "setjmp". Es kann nicht wissen, wo "longjmp" sein wird
namens; tatsächlich könnte ein Signalhandler es an jeder Stelle im Code aufrufen. Als ein
Ergebnis erhalten Sie möglicherweise eine Warnung, auch wenn es tatsächlich kein Problem gibt, weil "longjmp"
nicht an der Stelle angerufen werden kann, die ein Problem verursachen würde.
Einige falsche Warnungen können vermieden werden, wenn Sie alle von Ihnen verwendeten Funktionen als solche deklarieren
kehre nie als "noreturn" zurück.
Diese Warnung wird aktiviert von -Wand or -Wextra.
-Wunknown-Pragmas
Warnen, wenn eine "#pragma"-Direktive angetroffen wird, die von GCC nicht verstanden wird. Wenn das
Befehlszeilenoption verwendet wird, werden sogar Warnungen für unbekannte Pragmas im System ausgegeben
Header-Dateien. Dies ist nicht der Fall, wenn die Warnungen nur durch die -Wand
Befehlszeilenoption.
-Wno-Pragmas
Warnen Sie nicht vor Missbrauch von Pragmas, wie z. B. falsche Parameter, ungültige Syntax oder
Konflikte zwischen Pragmas. Siehe auch -Wunknown-Pragmas.
-Wstrict-Aliasing
Diese Option ist nur aktiv, wenn -fstrict-aliasing ist aktiv. Es warnt vor Code, der
kann die strengen Aliasing-Regeln verletzen, die der Compiler für die Optimierung verwendet.
Die Warnung erfasst nicht alle Fälle, versucht jedoch, die häufigeren zu erfassen
Tücken. Es ist enthalten in -Wand. Es ist äquivalent zu -Wstrict-Aliasing=3
-Wstrict-Aliasing=n
Diese Option ist nur aktiv, wenn -fstrict-aliasing ist aktiv. Es warnt vor Code, der
kann die strengen Aliasing-Regeln verletzen, die der Compiler für die Optimierung verwendet.
Höhere Werte entsprechen einer höheren Genauigkeit (weniger falsch positive Ergebnisse). Höhere Stufen
entsprechen auch mehr Aufwand, ähnlich dem Weg -O Werke. -Wstrict-Aliasing is
entspricht -Wstrict-Aliasing=3.
Stufe 1: Am aggressivsten, am schnellsten, am wenigsten genau. Möglicherweise nützlich, wenn höhere Levels
nicht warnen aber -fstrict-aliasing bricht den Code immer noch, da er nur sehr wenige falsche enthält
Negative. Es hat jedoch viele falsch positive Ergebnisse. Warnt bei allen Zeigerumwandlungen
zwischen möglicherweise inkompatiblen Typen, auch wenn nie dereferenziert. Läuft vorne
nur enden.
Level 2: Aggressiv, schnell, nicht zu präzise. Kann immer noch viele falsch positive Ergebnisse haben (nicht
jedoch bis zu Stufe 1) und wenige falsch negative (aber möglicherweise mehr als Stufe 1).
Im Gegensatz zu Level 1 warnt es nur, wenn eine Adresse vergeben wird. Warnt vor unvollständigen Typen.
Läuft nur im Frontend.
Stufe 3 (Standard für -Wstrict-Aliasing): Sollte nur sehr wenige Fehlalarme und wenige . haben
falsch negative. Etwas langsamer als Stufe 1 oder 2, wenn die Optimierung aktiviert ist.
Kümmert sich um das übliche Wortspiel + Dereferenzierungsmuster im Frontend:
"*(int*)&some_float". Wenn die Optimierung aktiviert ist, wird sie auch im Backend ausgeführt, wobei
es behandelt mehrere Anweisungsfälle unter Verwendung von flusssensitiven Points-to-Informationen.
Warnt nur, wenn der konvertierte Zeiger dereferenziert wird. Warnt nicht vor Unvollständigkeit
Typen.
-Strenger-Überlauf
-Wstrict-overflow=n
Diese Option ist nur aktiv, wenn -fstrict-Überlauf ist aktiv. Es warnt vor Fällen
wobei der Compiler basierend auf der Annahme optimiert, dass ein Vorzeichenüberlauf nicht funktioniert
auftreten. Beachten Sie, dass es nicht in allen Fällen warnt, in denen der Code überlaufen könnte: es
warnt nur vor Fällen, in denen der Compiler eine Optimierung implementiert. Also das
Warnung hängt von der Optimierungsstufe ab.
Eine Optimierung, die davon ausgeht, dass kein Vorzeichenüberlauf auftritt, ist vollkommen sicher, wenn
die Werte der beteiligten Variablen sind so, dass ein Überlauf in der Tat nie stattfindet.
auftreten. Daher kann diese Warnung leicht ein falsch positives Ergebnis liefern: eine Warnung vor Code
das ist eigentlich kein problem. Um sich auf wichtige Themen zu konzentrieren, mehrere Warnungen
Ebenen definiert sind. Bei der Verwendung von undefiniertem Vorzeichenüberlauf werden keine Warnungen ausgegeben
bei der Schätzung, wie viele Iterationen eine Schleife erfordert, insbesondere bei der Bestimmung
ob überhaupt eine Schleife ausgeführt wird.
-Wstrict-overflow=1
Warnen Sie vor Fällen, die sowohl fragwürdig als auch leicht zu vermeiden sind. Zum Beispiel mit
-fstrict-Überlauf, vereinfacht der Compiler "x + 1 > x" auf 1. Diese Stufe von
-Strenger-Überlauf wird aktiviert durch -Wand; höhere Level sind es nicht und müssen es sein
ausdrücklich erbeten.
-Wstrict-overflow=2
Warnen Sie auch vor anderen Fällen, in denen ein Vergleich zu einer Konstanten vereinfacht wird. Zum
Beispiel: "abs (x) >= 0". Dies kann nur vereinfacht werden, wenn -fstrict-Überlauf in
Effekt, weil "abs (INT_MIN)" auf "INT_MIN" überläuft, das kleiner als Null ist.
-Strenger-Überlauf (ohne Level) ist dasselbe wie -Wstrict-overflow=2.
-Wstrict-overflow=3
Warnen Sie auch vor anderen Fällen, in denen ein Vergleich vereinfacht wird. Zum Beispiel: "x + 1
> 1" wird zu "x > 0" vereinfacht.
-Wstrict-overflow=4
Warnen Sie auch vor anderen Vereinfachungen, die von den oben genannten Fällen nicht abgedeckt werden. Zum
Beispiel: "(x * 10) / 5" wird zu "x * 2" vereinfacht.
-Wstrict-overflow=5
Warnen Sie auch vor Fällen, in denen der Compiler die Größe einer Konstante reduziert
an einem Vergleich beteiligt. Beispiel: "x + 2 > y" wird vereinfacht zu "x + 1 >= y".
Dies wird nur bei der höchsten Warnstufe gemeldet, da diese Vereinfachung
gilt für viele Vergleiche, daher gibt diese Warnstufe eine sehr große Anzahl von
falsch positive.
-Wsuggest-Attribut=[auch|const|keine Rückkehr|Format]
Warnen Sie vor Fällen, in denen das Hinzufügen eines Attributs von Vorteil sein kann. Die Attribute derzeit
unterstützt werden, sind unten aufgeführt.
-Wsuggest-Attribut=rein
-Wsuggest-Attribute=const
-Wsuggest-Attribut=noreturn
Warnen Sie vor Funktionen, die Kandidaten für die Attribute "pure", "const" oder . sein könnten
"keine Rückkehr". Der Compiler warnt nur vor Funktionen, die in anderen Kompilierungen sichtbar sind
Einheiten oder (bei "pure" und "const"), wenn nicht nachgewiesen werden kann, dass die Funktion
kehrt normal zurück. Eine Funktion kehrt normal zurück, wenn sie kein Unendlich enthält
Schleife oder Rückkehr abnormal durch Werfen, Aufrufen von "Abort" oder Trapping. Diese Analyse
erfordert Option -fipa-pure-const, die standardmäßig aktiviert ist bei -O und höher.
Höhere Optimierungsstufen verbessern die Genauigkeit der Analyse.
-Wsuggest-Attribut=Format
-Wmissing-Format-Attribute
Warnen Sie vor Funktionszeigern, die Kandidaten für "Format"-Attribute sein könnten.
Beachten Sie, dass dies nur mögliche Kandidaten sind, keine absoluten. GCC vermutet das
Funktionszeiger mit "format"-Attributen, die bei der Zuweisung verwendet werden,
Initialisierung, Parameterübergabe oder Rückgabeanweisungen sollten einen entsprechenden
"format"-Attribut im resultierenden Typ. Dh die linke Seite des
Zuweisung oder Initialisierung, der Typ der Parametervariablen oder die Rückgabe
Typ der enthaltenden Funktion sollte jeweils auch ein "format"-Attribut haben
um die Warnung zu vermeiden.
GCC warnt auch vor Funktionsdefinitionen, die Kandidaten für "Format" sein könnten
Attribute. Auch dies sind nur mögliche Kandidaten. GCC vermutet, dass "Format"
Attribute können für jede Funktion geeignet sein, die eine Funktion wie aufruft
"vprintf" oder "vscanf", aber dies ist möglicherweise nicht immer der Fall, und einige Funktionen
für die "Format"-Attribute geeignet sind, werden möglicherweise nicht erkannt.
-Wsuggest-final-types
Warnen Sie vor Typen mit virtuellen Methoden, bei denen die Codequalität verbessert würde, wenn der Typ
wurden mit dem C++11-Spezifizierer "final" deklariert oder, wenn möglich, in einem . deklariert
anonymer Namensraum. Dies ermöglicht es GCC, das polymorphe
Anrufe. Diese Warnung ist effektiver bei der Optimierung der Linkzeit, bei der die
Informationen zum Klassenhierarchiediagramm sind vollständiger.
-Wsuggest-final-Methoden
Warnen Sie vor virtuellen Methoden, bei denen die Codequalität verbessert würde, wenn die Methode
mit dem C++11 "final" Spezifizierer deklariert, oder, wenn möglich, wurde sein Typ in . deklariert
einem anonymen Namensraum oder mit dem Spezifizierer "final". Diese Warnung ist effektiver
mit Link-Time-Optimierung, wobei die Informationen über den Klassenhierarchie-Graphen sind
vollständiger. Es wird empfohlen, zuerst Vorschläge von
-Wsuggest-final-types und dann mit neuen Anmerkungen neu erstellen.
-Wsuggest-Override
Warnen Sie vor dem Überschreiben virtueller Funktionen, die nicht mit dem Schlüsselwort override gekennzeichnet sind.
-Warray-Grenzen
-Warray-Grenzen=n
Diese Option ist nur aktiv, wenn -ftree-vrp ist aktiv (Standard für -O2 und darüber). Es
warnt vor Indizes von Arrays, die immer außerhalb des zulässigen Bereichs liegen. Diese Warnung ist
aktiviert durch -Wand.
-Warray-Grenzen=1
Dies ist die Warnstufe von -Warray-Grenzen und wird aktiviert durch -Wand; höhere Stufen
sind nicht und müssen ausdrücklich angefordert werden.
-Warray-Grenzen=2
Diese Warnstufe warnt auch vor unzulässigem Zugriff für Arrays am Ende von
eine Struktur und für Arrays, auf die über Zeiger zugegriffen wird. Diese Warnstufe kann ein
größere Anzahl von False Positives und ist standardmäßig deaktiviert.
-Wbool-vergleichen
Warnung vor booleschen Ausdrücken im Vergleich zu einem ganzzahligen Wert, der sich von unterscheidet
"wahr falsch". Der folgende Vergleich ist beispielsweise immer falsch:
intn = 5;
...
wenn ((n > 1) == 2) { ... }
Diese Warnung wird aktiviert von -Wand.
-Wno-verworfen-Qualifier (nur C und Ziel-C)
Keine Warnung, wenn Typqualifizierer für Zeiger verworfen werden. Normalerweise ist die
Compiler warnt, wenn eine "const char *"-Variable an eine Funktion übergeben wird, die ein "char
*"-Parameter. Diese Option kann verwendet werden, um eine solche Warnung zu unterdrücken.
-Wno-discarded-array-Qualifiers (nur C und Ziel-C)
Nicht warnen, wenn Typqualifizierer auf Arrays, die Zeigerziele sind, verwendet werden
verworfen. Normalerweise warnt der Compiler, wenn eine Variable "const int (*)[]" an . übergeben wird
eine Funktion, die einen "int (*)[]"-Parameter akzeptiert. Diese Option kann verwendet werden, um
eine solche Warnung.
-Wno-inkompatible-Zeiger-Typen (nur C und Ziel-C)
Warnen Sie nicht, wenn eine Konvertierung zwischen Zeigern mit inkompatiblen Typen stattfindet.
Diese Warnung gilt für Fälle, die nicht von . abgedeckt sind -Wno-Zeiger-Zeichen, die für Zeiger warnt
Argumentübergabe oder Zuweisung mit unterschiedlichem Vorzeichen.
-Wno-int-Konvertierung (nur C und Ziel-C)
Warnen Sie nicht vor inkompatiblen Konvertierungen von Ganzzahlen in Zeiger und Zeiger auf Ganzzahlen.
Diese Warnung bezieht sich auf implizite Konvertierungen. für explizite Konvertierungen die Warnungen
-Wno-int-to-pointer-cast und -Wno-Zeiger-auf-int-cast könnte genutzt werden.
-Wno-Div-durch-Null
Keine Warnung vor einer Ganzzahldivision zur Kompilierzeit durch Null. Gleitkomma-Division durch
Null wird nicht gewarnt, da es ein legitimer Weg sein kann, Unendlichkeiten zu erhalten und
NaNs.
-Wsystem-Header
Warnmeldungen für Konstrukte ausgeben, die in Systemheaderdateien gefunden wurden. Warnungen von
Systemheader werden normalerweise unterdrückt, unter der Annahme, dass sie dies normalerweise nicht tun
weisen auf echte Probleme hin und würden die Compilerausgabe nur schwerer lesbar machen. Verwenden von
Diese Befehlszeilenoption weist GCC an, Warnungen von Systemheadern auszugeben, als ob sie
im Benutzercode aufgetreten. Beachten Sie jedoch, dass die Verwendung von -Wand in Verbindung mit dieser Option
die nicht warnen vor unbekannten Pragmas in Systemheadern --- dafür -Wunknown-Pragmas
muss auch verwendet werden.
-Wtrampoline
Warnen Sie vor Trampoline, die für Zeiger auf verschachtelte Funktionen generiert werden. Ein Trampolin ist ein
kleines Daten- oder Codestück, das zur Laufzeit auf dem Stack erstellt wird, wenn die Adresse
einer verschachtelten Funktion wird verwendet und zum indirekten Aufrufen der verschachtelten Funktion verwendet.
Bei einigen Zielen besteht es nur aus Daten und erfordert daher keine besondere Behandlung.
Bei den meisten Zielen besteht es jedoch aus Code und erfordert daher die Erstellung des Stack
ausführbar, damit das Programm ordnungsgemäß funktioniert.
-Wfloat-gleich
Warnen, wenn Gleitkommawerte in Gleichheitsvergleichen verwendet werden.
Die Idee dahinter ist, dass es manchmal (für den Programmierer) bequem ist,
Betrachten Sie Gleitkommawerte als Annäherungen an unendlich genaue reelle Zahlen.
Wenn Sie dies tun, müssen Sie berechnen (durch Analysieren des Codes oder in einigen
anders) der maximale oder wahrscheinliche maximale Fehler, den die Berechnung einführt, und
Lassen Sie es zu, wenn Sie Vergleiche durchführen (und wenn Sie eine Ausgabe erstellen, aber das ist a
anderes Problem). Anstatt auf Gleichheit zu testen, sollten Sie insbesondere überprüfen
um zu sehen, ob die beiden Werte Bereiche haben, die sich überschneiden; und das geht mit dem
Vergleichsoperatoren, daher sind Gleichheitsvergleiche wahrscheinlich falsch.
-Wtraditionell (nur C und Ziel-C)
Warnen Sie vor bestimmten Konstrukten, die sich in traditionellem und ISO C unterschiedlich verhalten
warnen vor ISO-C-Konstrukten, die kein traditionelles C-Äquivalent haben, und/oder problematisch
Konstrukte, die vermieden werden sollten.
* Makroparameter, die innerhalb von Zeichenfolgenliteralen im Makrokörper erscheinen. In
Die traditionelle C-Makro-Ersetzung findet innerhalb von String-Literalen statt, aber in ISO C
Es tut nicht.
* In traditionellem C existierten einige Präprozessordirektiven nicht. Traditionell
Präprozessoren betrachteten eine Zeile nur dann als Direktive, wenn die # erschien in der Spalte
1 auf der Linie. Deswegen -Wtraditionell warnt vor Richtlinien, die traditionelle C
versteht, aber ignoriert, weil die # erscheint nicht als erstes Zeichen auf
die Linie. Es schlägt auch vor, dass Sie Anweisungen wie "#pragma" ausblenden, die von nicht verstanden werden
traditionelles C, indem Sie sie einrücken. Einige traditionelle Implementierungen nicht
"#elif" erkennen, daher schlägt diese Option vor, es ganz zu vermeiden.
* Ein funktionsähnliches Makro, das ohne Argumente angezeigt wird.
* Der unäre Plus-Operator.
* Die U ganzzahliges konstantes Suffix oder die F or L konstante Gleitkomma-Suffixe.
(Traditionelles C unterstützt die L Suffix bei ganzzahligen Konstanten.) Beachten Sie, dass diese
Suffixe erscheinen in Makros, die in den Systemheadern der meisten modernen Systeme definiert sind,
zB die _MINDEST/_MAX Makros in " ". Die Verwendung dieser Makros im Benutzercode könnte
führen normalerweise zu falschen Warnungen, der integrierte Präprozessor von GCC hat jedoch
genügend Kontext, um in diesen Fällen Warnungen zu vermeiden.
* Eine Funktion, die in einem Block als extern deklariert und dann nach dem Ende des verwendet wird
blockieren.
* Eine "switch"-Anweisung hat einen Operanden vom Typ "long".
* Auf eine "statische" folgt eine nicht-"statische" Funktionsdeklaration. Dieses Konstrukt ist nicht
von einigen traditionellen C-Compilern akzeptiert.
* Der ISO-Typ einer ganzzahligen Konstanten hat eine andere Breite oder Vorzeichen als seine
traditioneller Typ. Diese Warnung wird nur ausgegeben, wenn die Basis der Konstanten zehn ist.
Dh hexadezimale oder oktale Werte, die typischerweise Bitmuster darstellen, sind nicht
davor gewarnt.
* Die Verwendung der ISO-String-Verkettung wurde erkannt.
* Initialisierung von automatischen Aggregaten.
* Identifikator kollidiert mit Labels. Traditionellem C fehlt ein separater Namespace für
Etiketten.
* Initialisierung von Gewerkschaften. Wenn der Initialisierer null ist, wird die Warnung ausgelassen.
Dies geschieht unter der Annahme, dass der Nullinitialisierer im Benutzercode erscheint
konditioniert auf zB "__STDC__", um fehlende Initialisierungswarnungen zu vermeiden und verlässt sich auf
Standard-Initialisierung auf Null im traditionellen C-Fall.
* Umrechnungen durch Prototypen zwischen Fest-/Gleitkommawerten und umgekehrt. Die
Das Fehlen dieser Prototypen beim Kompilieren mit traditionellem C verursacht schwerwiegende
Probleme. Dies ist eine Teilmenge der möglichen Conversion-Warnungen; für das komplette Set
- -Wtraditionelle-Umwandlung.
* Verwendung von Funktionsdefinitionen im ISO-C-Stil. Diese Warnung ist absichtlich nicht ausgegeben
für Prototyp-Deklarationen oder Variadic-Funktionen, da diese ISO-C-Funktionen
erscheinen in Ihrem Code, wenn Sie die traditionellen C-Kompatibilitätsmakros von liberty verwenden.
"PARAMS" und "VPARAMS". Diese Warnung wird auch bei verschachtelten Funktionen umgangen
weil diese Funktion bereits eine GCC-Erweiterung ist und daher nicht relevant für
traditionelle C-Kompatibilität.
-Wtraditionelle-Umwandlung (nur C und Ziel-C)
Warnen, wenn ein Prototyp eine Typkonvertierung verursacht, die sich von dem unterscheidet, was passieren würde
auf das gleiche Argument in Ermangelung eines Prototyps. Dies beinhaltet Umrechnungen von
Festkomma in Gleitkomma und umgekehrt, und Konvertierungen, die die Breite ändern oder
Vorzeichen eines Festkomma-Arguments, es sei denn, es ist mit der Standardheraufstufung identisch.
-WErklärung-nach-Erklärung (nur C und Ziel-C)
Warnen, wenn eine Deklaration nach einer Anweisung in einem Block gefunden wird. Dieses Konstrukt, bekannt
aus C++, wurde mit ISO C99 eingeführt und ist standardmäßig in GCC erlaubt. Es ist nicht
unterstützt von ISO C90.
-Wundef
Warnen, wenn in einer "#if"-Direktive ein undefinierter Bezeichner ausgewertet wird.
-Wno-Endif-Etiketten
Warnen Sie nicht, wenn auf ein "#else" oder ein "#endif" Text folgt.
-Schatten
Warnen, wenn eine lokale Variable oder Typdeklaration eine andere Variable überschattet,
Parameter, Typ, Klassenmember (in C++) oder Instanzvariable (in Objective-C) oder
wenn eine eingebaute Funktion überschattet wird. Beachten Sie, dass der Compiler in C++ warnt, wenn a
Die lokale Variable überschattet eine explizite Typedef, aber nicht, wenn sie eine Struktur/Klasse/Enumeration überschattet.
-Wno-Schatten-Ivar (nur Ziel-C)
Nicht warnen, wenn eine lokale Variable eine Instanzvariable in einem Objective-C . überschattet
Methode.
-Wgrößer-als=len
Warnen, wenn ein Objekt größer als len Bytes definiert.
-Wframe-größer-als=len
Warnen, wenn die Größe eines Funktionsrahmens größer als . ist len Bytes. Die Rechnung ist fertig
die Stack-Frame-Größe zu bestimmen, ist ungefähr und nicht konservativ. Die tatsächliche
Anforderungen können etwas größer sein als len auch wenn Sie keine Warnung erhalten. In
zusätzlich jeder Speicherplatz, der über "alloca", Arrays variabler Länge oder ähnliches zugewiesen wurde
Konstrukte wird vom Compiler nicht eingeschlossen, wenn er bestimmt, ob a ausgegeben werden soll oder nicht
Warnung.
-Wno-free-nonheap-Objekt
Geben Sie keine Warnung ab, wenn Sie versuchen, ein Objekt freizugeben, das nicht auf dem Heap zugewiesen wurde.
-Wstack-Nutzung=len
Warnen, wenn die Stack-Nutzung einer Funktion größer als . sein könnte len Bytes. Die Berechnung
getan, um die Stack-Nutzung zu bestimmen, ist konservativ. Jeder über "alloca" zugewiesene Speicherplatz,
Arrays mit variabler Länge oder verwandte Konstrukte werden vom Compiler eingeschlossen, wenn
entscheiden, ob eine Warnung ausgegeben werden soll oder nicht.
Die Nachricht stimmt mit der Ausgabe von überein -fstack-Nutzung.
* Wenn die Stack-Nutzung vollständig statisch ist, aber die angegebene Menge überschreitet, ist dies:
Warnung: Stack-Nutzung beträgt 1120 Byte
* Wenn die Stack-Nutzung (teilweise) dynamisch, aber begrenzt ist, ist dies:
Warnung: Stack-Nutzung kann 1648 Byte betragen
* Wenn die Stack-Nutzung (teilweise) dynamisch und nicht begrenzt ist, ist dies:
Warnung: Stack-Nutzung kann unbegrenzt sein
-Wunsafe-Loop-Optimierungen
Warnen, wenn die Schleife nicht optimiert werden kann, weil der Compiler nichts davon annehmen kann
die Grenzen der Schleifenindizes. Mit -funsafe-loop-optimierungen warnen, wenn der Compiler
macht solche Annahmen.
-Wno-pedantic-ms-Format (Nur MinGW-Ziele)
Bei Verwendung in Kombination mit -Wformat und -pedantisch ohne GNU-Erweiterungen, dies
Option deaktiviert die Warnungen über Nicht-ISO-Formatbreitenbezeichner "printf" / "scanf".
"I32", "I64" und "I" werden auf Windows-Zielen verwendet, die von der MS-Laufzeit abhängig sind.
-Wpointer-arith
Warnen Sie vor allem, was von der "Größe" eines Funktionstyps oder von "void" abhängt. GNU-C
weist diesen Typen eine Größe von 1 zu, um die Berechnungen mit "void *" zu erleichtern
Zeiger und Zeiger auf Funktionen. In C++ auch warnen, wenn eine arithmetische Operation
beinhaltet "NULL". Diese Warnung wird auch aktiviert von -Wpedantisch.
-Wtype-Grenzen
Warnen, wenn ein Vergleich aufgrund des begrenzten Bereichs der immer wahr oder immer falsch ist
Datentyp, aber warnen Sie nicht vor konstanten Ausdrücken. Warnen Sie beispielsweise, wenn ein nicht signiertes
Variable wird mit "<" oder ">=" gegen Null verglichen. Diese Warnung wird auch aktiviert von
-Wextra.
-Wbad-Funktions-Besetzung (nur C und Ziel-C)
Warnen, wenn ein Funktionsaufruf in einen nicht übereinstimmenden Typ umgewandelt wird. Warnen Sie beispielsweise, wenn ein Anruf
an eine Funktion, die einen Integer-Typ zurückgibt, wird in einen Zeigertyp umgewandelt.
-Wc90-c99-kompatibel (nur C und Ziel-C)
Warnen Sie vor Funktionen, die in ISO C90 nicht vorhanden sind, aber in ISO C99 vorhanden sind. Zum Beispiel,
warnt vor der Verwendung von Arrays mit variabler Länge, Typ "long long", Typ "bool", zusammengesetzt
Literale, designierte Initialisierer usw. Diese Option ist unabhängig von der
Standardmodus. Warnungen sind in dem Ausdruck deaktiviert, der auf "__extension__" folgt.
-Wc99-c11-kompatibel (nur C und Ziel-C)
Warnen Sie vor Funktionen, die in ISO C99 nicht vorhanden sind, aber in ISO C11 vorhanden sind. Zum Beispiel,
warnt vor der Verwendung anonymer Strukturen und Unions, Typqualifizierer "_Atomic",
Speicherklassenbezeichner "_Thread_local", Bezeichner "_Aligns", Operator "Alignof",
Schlüsselwort "_Generic" usw. Diese Option ist unabhängig vom Standardmodus.
Warnungen sind in dem Ausdruck deaktiviert, der auf "__extension__" folgt.
-Wc++-kompatibel (nur C und Ziel-C)
Warnen Sie vor ISO C-Konstrukten, die außerhalb der gemeinsamen Teilmenge von ISO C und ISO liegen
C++, zB Aufforderung zur impliziten Konvertierung von "void *" in einen Zeiger auf Nicht-"void"
Art.
-Wc++11-kompatibel (Nur C++ und Objective-C++)
Warnung vor C++-Konstrukten, deren Bedeutung sich zwischen ISO C++ 1998 und ISO C++ 2011 unterscheidet,
zB Bezeichner in ISO C++ 1998, die Schlüsselwörter in ISO C++ 2011 sind. Diese Warnung
schaltet sich ein -Verwirrung und wird aktiviert durch -Wand.
-Wc++14-kompatibel (Nur C++ und Objective-C++)
Warnen Sie vor C++-Konstrukten, deren Bedeutung sich zwischen ISO C++ 2011 und ISO C++ 2014 unterscheidet.
Diese Warnung wird aktiviert von -Wand.
-Wcast-Qualität
Warnen Sie jedes Mal, wenn ein Zeiger umgewandelt wird, um einen Typqualifizierer aus dem Zieltyp zu entfernen.
Warnen Sie beispielsweise, wenn ein "const char *" in ein normales "char *" umgewandelt wird.
Warnen Sie auch, wenn Sie eine Umwandlung vornehmen, die einen Typqualifizierer auf unsichere Weise einführt. Zum
Beispiel: Die Umwandlung von "char **" in "const char **" ist unsicher, wie in diesem Beispiel:
/* p ist char ** Wert. */
const char **q = (const char **) p;
/* Zuweisung eines schreibgeschützten Strings an const char * ist OK. */
*q = "Zeichenfolge";
/* Jetzt zeigt der char**-Zeiger auf den schreibgeschützten Speicher. */
**p = 'b';
-Wcast-Ausrichtung
Warnen Sie jedes Mal, wenn ein Zeiger so gewirkt wird, dass die erforderliche Ausrichtung des Ziels
erhöht. Warnen Sie beispielsweise, wenn ein "char *" in ein "int *" auf Computern umgewandelt wird, auf denen
Auf ganze Zahlen kann nur an Grenzen von XNUMX oder XNUMX Byte zugegriffen werden.
-Wwrite-Strings
Geben Sie beim Kompilieren von C String-Konstanten den Typ "const char[Länge]" damit kopieren
die Adresse von one in einen Nicht-"const"-"char *"-Zeiger erzeugt eine Warnung. Diese
Warnungen helfen Ihnen beim Kompilieren von Code, der versuchen kann, in einen String zu schreiben
konstant, aber nur, wenn Sie bei der Verwendung von "const" in Deklarationen sehr vorsichtig gewesen sind
und Prototypen. Ansonsten ist es nur ein Ärgernis. Deshalb haben wir es nicht gemacht -Wand
fordern Sie diese Warnungen an.
Warnen Sie beim Kompilieren von C++ vor der veralteten Konvertierung von Zeichenfolgenliteralen in "char
*". Diese Warnung ist standardmäßig für C++-Programme aktiviert.
-Wclobbered
Warnen Sie vor Variablen, die durch "longjmp" oder "vfork" geändert werden könnten. Diese Warnung ist
auch aktiviert von -Wextra.
-Wbedingt unterstützt (Nur C++ und Objective-C++)
Warnung vor bedingt unterstützten (C++11 [intro.defs]) Konstrukten.
-WUmwandlung
Warnen Sie vor impliziten Conversions, die einen Wert ändern können. Dies beinhaltet Konvertierungen
zwischen Real und Integer, wie "abs (x)", wenn "x" "double" ist; Umrechnungen zwischen
signiert und unsigned, wie "unsigned ui = -1"; und Umwandlungen in kleinere Typen, wie
"sqrtf (M_PI)". Nicht vor expliziten Umwandlungen wie "abs ((int) x)" und "ui = ." warnen
(unsigned) -1", oder wenn der Wert durch die Konvertierung nicht verändert wird wie in "abs (2.0)".
Warnungen über Konvertierungen zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlen können deaktiviert werden durch
Verwendung von -Wno-Zeichen-Konvertierung.
Für C++ warnen Sie auch vor verwirrender Überladungsauflösung für benutzerdefinierte Konvertierungen; und
Konvertierungen, die niemals einen Typkonvertierungsoperator verwenden: Konvertierungen in "void", das gleiche
Typ, eine Basisklasse oder eine Referenz darauf. Warnungen zu Konvertierungen zwischen signierten
und vorzeichenlose Ganzzahlen sind in C++ standardmäßig deaktiviert, es sei denn -Wsign-Konvertierung is
explizit aktiviert.
-Wno-conversion-null (Nur C++ und Objective-C++)
Warnen Sie nicht vor Konvertierungen zwischen "NULL" und Nicht-Zeiger-Typen. -Wconversion-null is
standardmäßig aktiviert.
-Wzero-as-null-pointer-constant (Nur C++ und Objective-C++)
Warnen, wenn ein Literal '0' als Nullzeigerkonstante verwendet wird. Dies kann nützlich sein, um
erleichtern die Konvertierung in "nullptr" in C++11.
-Wdate-Uhrzeit
Warnen, wenn Makros "__TIME__", "__DATE__" oder "__TIMESTAMP__" gefunden werden, wenn sie
kann bitweise identische reproduzierbare Kompilierungen verhindern.
-Wdelete-unvollständig (Nur C++ und Objective-C++)
Warnung beim Löschen eines Zeigers auf unvollständigen Typ, was zu undefiniertem Verhalten bei . führen kann
Laufzeit. Diese Warnung ist standardmäßig aktiviert.
-Wuseless-Besetzung (Nur C++ und Objective-C++)
Warnen, wenn ein Ausdruck in seinen eigenen Typ umgewandelt wird.
-Wempty-Körper
Warnen, wenn ein leerer Text in einer "if", "else" oder "do while"-Anweisung auftritt. Diese Warnung
wird auch aktiviert durch -Wextra.
-Wenum-vergleichen
Warnen Sie vor einem Vergleich zwischen Werten verschiedener Aufzählungstypen. In C++-Enumeration
Nichtübereinstimmungen in bedingten Ausdrücken werden ebenfalls diagnostiziert und die Warnung wird aktiviert durch
Ursprünglich. In C wird diese Warnung aktiviert durch -Wand.
-Wjump-fehlt-init (C, nur Ziel-C)
Warnen, wenn eine "goto"-Anweisung oder eine "switch"-Anweisung über die
Initialisierung einer Variablen oder springt zurück zu einem Label, nachdem die Variable
initialisiert. Dies warnt nur vor Variablen, die initialisiert werden, wenn sie
erklärt. Diese Warnung wird nur für C und Objective-C unterstützt; in C++ diese Art von
Branch ist auf jeden Fall ein Fehler.
-Wjump-fehlt-init ist enthalten in -Wc++-kompatibel. Es kann mit dem deaktiviert werden
-Wno-jump-misses-init .
-Wsign-vergleichen
Warnen, wenn ein Vergleich zwischen vorzeichenbehafteten und vorzeichenlosen Werten zu einem falschen
Ergebnis, wenn der vorzeichenbehaftete Wert in einen vorzeichenlosen Wert umgewandelt wird. Diese Warnung ist auch aktiviert
by -Wextra; um die anderen Warnungen zu erhalten -Wextra ohne diese Warnung verwenden -Wextra
-Wno-Zeichen-vergleichen.
-Wsign-Konvertierung
Warnung vor impliziten Konvertierungen, die das Vorzeichen eines ganzzahligen Werts ändern können, wie z
Zuweisen eines vorzeichenbehafteten Integer-Ausdrucks zu einer vorzeichenlosen Integer-Variablen. Ein explizites
Cast bringt die Warnung zum Schweigen. In C wird diese Option auch aktiviert durch -WUmwandlung.
-Wfloat-Konvertierung
Warnen Sie vor impliziten Konvertierungen, die die Genauigkeit eines realen Werts verringern. Dies
beinhaltet Konvertierungen von reell in ganzzahlig und von reell mit höherer Genauigkeit in niedrigere
Präzision reale Werte. Diese Option wird auch aktiviert durch -WUmwandlung.
-Wsized-Deallokation (Nur C++ und Objective-C++)
Warnung vor einer Definition einer nicht skalierten Aufhebungsfunktion
void-Operator delete (void *) noexcept;
void-Operator delete[] (void *) noexcept;
ohne Definition der entsprechend großen Aufhebungsfunktion
void-Operator delete (void *, std::size_t) noexcept;
void-Operator delete[] (void *, std::size_t) noexcept;
oder umgekehrt. Aktiviert von -Wextra zusammen mit -fsized-Freigabe.
-Wsizeof-pointer-memaccess
Warnung vor verdächtigen Längenparametern für bestimmte integrierte String- und Speicherfunktionen
wenn das Argument "sizeof" verwendet. Diese Warnung warnt zB vor "memset (ptr, 0, sizeof
(ptr));", wenn "ptr" kein Array, sondern ein Zeiger ist und eine mögliche Korrektur vorschlägt, oder
über "memcpy (&foo, ptr, sizeof (&foo));". Diese Warnung wird aktiviert von -Wand.
-Wsizeof-array-Argument
Warnen, wenn der Operator "sizeof" auf einen Parameter angewendet wird, der als Array deklariert ist
in einer Funktionsdefinition. Diese Warnung ist standardmäßig für C- und C++-Programme aktiviert.
-Wmemset-transponierte-args
Bei verdächtigen Aufrufen der integrierten Funktion "memset" warnen, wenn das zweite Argument . ist
nicht null und das dritte Argument ist null. Dies warnt zB@ vor "memset (buf, sizeof
buf, 0)", wobei höchstwahrscheinlich "memset (buf, 0, sizeof buf)" gemeint war
diagnostics wird nur ausgegeben, wenn das dritte Argument literal null ist. Wenn es etwas ist
Ausdruck, der auf Null gefaltet ist, eine Umwandlung von Null in einen bestimmten Typ usw., es ist viel weniger
wahrscheinlich, dass der Benutzer die Argumente versehentlich vertauscht hat und keine Warnung ausgegeben wird.
Diese Warnung wird aktiviert von -Wand.
-Watdress
Warnen Sie vor verdächtiger Verwendung von Speicheradressen. Dazu gehört die Verwendung der Adresse von a
Funktion in einem bedingten Ausdruck, wie "void func(void); if (func)", und
Vergleiche mit der Speicheradresse eines Zeichenfolgenliterals, z. B. "if (x == "abc")".
Solche Verwendungen weisen typischerweise auf einen Programmierfehler hin: Die Adresse einer Funktion ist immer
als wahr ausgewertet wird, so dass ihre Verwendung in einer Bedingung normalerweise darauf hindeutet, dass der Programmierer
vergaß die Klammern in einem Funktionsaufruf; und Vergleiche mit String-Literalen
führen zu unspezifiziertem Verhalten und sind in C nicht portierbar, daher zeigen sie normalerweise
dass der Programmierer beabsichtigte, "strcmp" zu verwenden. Diese Warnung wird aktiviert von -Wand.
-Wlogische-Op
Warnen Sie vor verdächtiger Verwendung logischer Operatoren in Ausdrücken. Dazu gehört die Verwendung
logische Operatoren in Kontexten, in denen wahrscheinlich ein bitweiser Operator erwartet wird.
-Wlogische-nicht-Klammern
Warnung vor logischer Nichtverwendung auf dem linken Operanden eines Vergleichs. Dies
Option warnt nicht, wenn der RHS-Operand einen booleschen Typ hat. Sein Zweck ist es,
verdächtigen Code wie den folgenden erkennen:
int ein;
...
if (!a > 1) { ... }
Es ist möglich, die Warnung zu unterdrücken, indem Sie das LHS in Klammern setzen:
if ((!a) > 1) { ... }
Diese Warnung wird aktiviert von -Wand.
-Waggregate-Rückgabe
Warnen Sie, wenn Funktionen definiert oder aufgerufen werden, die Strukturen oder Unions zurückgeben. (In
Sprachen, in denen Sie ein Array zurückgeben können, löst dies auch eine Warnung aus.)
-Wno-aggressive-loop-Optimierungen
Warnen, wenn der Compiler in einer Schleife mit konstanter Anzahl von Iterationen undefiniert erkennt
Verhalten in einer Anweisung während einer oder mehrerer Iterationen.
-Wno-Attribute
Warnen Sie nicht, wenn ein unerwartetes "__Attribut__" verwendet wird, z. B. nicht erkannte Attribute,
Funktionsattribute, die auf Variablen angewendet werden usw. Dies stoppt Fehler nicht für
falsche Verwendung von unterstützten Attributen.
-Wno-eingebautes-Makro neu definiert
Warnen Sie nicht, wenn bestimmte integrierte Makros neu definiert werden. Dies unterdrückt Warnungen für
Neudefinition von "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__" und
"__BASE_FILE__".
-Strenge-Prototypen (nur C und Ziel-C)
Warnen, wenn eine Funktion deklariert oder definiert wird, ohne die Argumenttypen anzugeben. (Ein
Funktionsdefinitionen im alten Stil sind ohne Warnung zulässig, wenn ihnen ein a . vorangestellt ist
Deklaration, die die Argumenttypen angibt.)
-Wold-Style-Deklaration (nur C und Ziel-C)
Warnen Sie in einer Erklärung vor veralteten Verwendungen gemäß dem C-Standard. Zum
warnen Sie beispielsweise, wenn Speicherklassenspezifizierer wie "statisch" nicht das Erste in einem sind
Erklärung. Diese Warnung wird auch aktiviert von -Wextra.
-Wold-Style-Definition (nur C und Ziel-C)
Warnen, wenn eine Funktionsdefinition alten Stils verwendet wird. Eine Warnung wird auch dann ausgegeben, wenn
ein früherer Prototyp.
-Wmissing-Parameter-Typ (nur C und Ziel-C)
Ein Funktionsparameter wird in K&R-ähnlichen Funktionen ohne Typbezeichner deklariert:
Leere foo(bar) { }
Diese Warnung wird auch aktiviert von -Wextra.
-Wmissing-Prototypen (nur C und Ziel-C)
Warnen, wenn eine globale Funktion ohne vorherige Prototypdeklaration definiert wird. Dies
Warnung wird auch dann ausgegeben, wenn die Definition selbst einen Prototyp bereitstellt. Verwenden Sie diese Option
um globale Funktionen zu erkennen, die keine übereinstimmende Prototypdeklaration in a . haben
Header-Datei. Diese Option ist für C++ nicht gültig, da alle Funktionsdeklarationen
Prototypen bereitstellen und eine nicht übereinstimmende Deklaration eine Überladung deklariert, anstatt
Widerspruch zu einer früheren Erklärung. Verwenden -Wmissing-Erklärungen um fehlende zu erkennen
Deklarationen in C++.
-Wmissing-Erklärungen
Warnen, wenn eine globale Funktion ohne vorherige Deklaration definiert ist. Tun Sie dies, auch wenn
die Definition selbst liefert einen Prototyp. Verwenden Sie diese Option, um globale
Funktionen, die nicht in Header-Dateien deklariert sind. In C werden keine Warnungen ausgegeben für
Funktionen mit früheren Nicht-Prototyp-Deklarationen; verwenden -Wmissing-Prototypen zu erkennen
fehlende Prototypen. In C++ werden keine Warnungen für Funktionsvorlagen ausgegeben, oder für
Inline-Funktionen oder für Funktionen in anonymen Namespaces.
-Wfehlende Feldinitialisierer
Warnen, wenn im Initialisierer einer Struktur einige Felder fehlen. Zum Beispiel die folgenden
Code verursacht eine solche Warnung, weil "xh" implizit null ist:
strukt s { int f, g, h; };
strukt sx = { 3, 4 };
Diese Option warnt nicht vor bestimmten Initialisierern, daher die folgende Änderung
löst keine Warnung aus:
strukt s { int f, g, h; };
strukt sx = { .f = 3, .g = 4 };
In C++ warnt diese Option auch nicht vor dem leeren Initialisierer { }, zum Beispiel:
strukt s { int f, g, h; };
sx = {};
Diese Warnung ist enthalten in -Wextra. Um andere zu bekommen -Wextra Warnungen ohne diese,
- -Wextra -Wno-missing-field-initializers.
-Wno-Multichar
Nicht warnen, wenn eine aus mehreren Zeichen bestehende Konstante ('FOOF') wird genutzt. Normalerweise zeigen sie a . an
Tippfehler im Code des Benutzers, da sie implementierungsdefinierte Werte haben und nicht sein sollten
in portablem Code verwendet.
-Wnormalisiert[=<keine|id|nfc|nfkc>]
In ISO C und ISO C++ unterscheiden sich zwei Bezeichner, wenn es sich um unterschiedliche Folgen von . handelt
Zeichen. Manchmal jedoch, wenn Zeichen außerhalb des grundlegenden ASCII-Zeichensatzes
verwendet werden, können Sie zwei verschiedene Zeichenfolgen haben, die gleich aussehen. Vermeiden
Verwirrung führt die Norm ISO 10646 einige Normalisierung Ohne eine erfahrene Medienplanung zur Festlegung von Regeln und Strategien beschleunigt der programmatische Medieneinkauf einfach die Rate der verschwenderischen Ausgaben. was, wenn angewendet
Stellen Sie sicher, dass zwei Sequenzen, die gleich aussehen, in dieselbe Sequenz umgewandelt werden. GCC
kann Sie warnen, wenn Sie nicht normalisierte Kennungen verwenden; diese Option
steuert diese Warnung.
Es gibt vier Warnstufen, die von GCC unterstützt werden. Die Standardeinstellung ist -Wnormalisiert=nfc,
die vor jedem Bezeichner warnt, der nicht in der normierten Form ISO 10646 "C" vorliegt,
NFC. NFC ist die empfohlene Form für die meisten Anwendungen. Es ist äquivalent zu -Wnormalisiert.
Leider sind einige Zeichen in Bezeichnern von ISO C und ISO C++ erlaubt
die, wenn sie in NFC umgewandelt werden, in Identifikatoren nicht erlaubt sind. Das heißt, es gibt keine Möglichkeit
um diese Symbole in portablem ISO C oder C++ zu verwenden und alle Ihre Bezeichner in NFC zu haben.
-Wnormalisiert=id unterdrückt die Warnung für diese Zeichen. Es ist zu hoffen, dass die Zukunft
Versionen der betreffenden Normen werden dies korrigieren, weshalb diese Option nicht
der Standard.
Sie können die Warnung für alle Zeichen ausschalten, indem Sie schreiben -Wnormalized=keine or
-Wno-normalisiert. Sie sollten dies nur tun, wenn Sie eine andere Normalisierung verwenden
Schema (wie "D"), da Sie sonst leicht Fehler erstellen können, die buchstäblich sind
unmöglich zu sehen.
Einige Zeichen in ISO 10646 haben unterschiedliche Bedeutungen, sehen aber in einigen Schriftarten identisch aus
oder Anzeigemethoden, insbesondere wenn die Formatierung angewendet wurde. Zum Beispiel
"\u207F", "SUPERSCRIPT LATIN SMALL LETTER N", wird wie ein normales "n" angezeigt, das
wurde hochgestellt. ISO 10646 definiert die NFKC Normalisierungsschema zu
wandeln Sie all dies ebenfalls in eine Standardform um, und GCC warnt, wenn Ihr Code nicht enthalten ist
NFKC, wenn Sie verwenden -Wnormalisiert=nfkc. Diese Warnung ist vergleichbar mit der Warnung vor jedem
Bezeichner, der den Buchstaben O enthält, da er mit der Ziffer 0 verwechselt werden könnte,
und ist daher nicht die Standardeinstellung, kann aber als lokale Codierungskonvention nützlich sein, wenn die
Programmierumgebung kann nicht festgelegt werden, um diese Zeichen deutlich anzuzeigen.
-Wno-veraltet
Warnen Sie nicht vor der Verwendung veralteter Funktionen.
-Wno-veraltet-Deklarationen
Warnen Sie nicht vor der Verwendung von Funktionen, Variablen und Typen, die als veraltet gekennzeichnet sind von
mit dem Attribut "veraltet".
-Wno-Überlauf
Warnen Sie nicht vor Kompilierzeitüberläufen in konstanten Ausdrücken.
-Wno-odr
Warnung vor Verstößen gegen eine Definitionsregel während der Linkzeitoptimierung. Erfordert
-flto-odr-type-merging aktiviert werden. Standardmäßig aktiviert.
-Wopenmp-simd
Warnen, wenn das Vektorisierungs-Kostenmodell die OpenMP- oder die Cilk Plus-Simd-Direktive überschreibt
vom Benutzer eingestellt. Die -fsimd-cost-model=unbegrenzt Option kann verwendet werden, um die Kosten zu senken
Modell.
-Woverride-init (nur C und Ziel-C)
Warnen, wenn ein initialisiertes Feld ohne Nebenwirkungen überschrieben wird, wenn das angegebene . verwendet wird
Initialisierer.
Diese Warnung ist enthalten in -Wextra. Um andere zu bekommen -Wextra Warnungen ohne diese,
- -Wextra -Wno-override-init.
-Verpackt
Warnen, wenn einer Struktur das gepackte Attribut gegeben wird, das gepackte Attribut aber keine
Auswirkungen auf das Layout oder die Größe der Struktur. Solche Strukturen können falsch ausgerichtet sein für
wenig Nutzen. In diesem Code ist zum Beispiel die Variable "fx" in "struct bar"
falsch ausgerichtet, obwohl "struct bar" selbst nicht das gepackte Attribut hat:
struct foo {
int x;
Zeichen a, b, c, d;
} __attribute __ ((gepackt));
Strukturleiste {
Zeichen z;
struct foo f;
};
-Wpacked-bitfield-kompatibel
Die 4.1-, 4.2- und 4.3-Serien von GCC ignorieren das "gepackte" Attribut auf Bitfeldern des Typs
"verkohlen". Dies wurde in GCC 4.4 behoben, aber die Änderung kann zu Unterschieden in der
Struktur-Layout. GCC informiert Sie, wenn sich der Offset eines solchen Feldes in GCC geändert hat
4.4. Zum Beispiel gibt es hier kein 4-Bit-Padding mehr zwischen den Feldern "a" und "b".
Struktur:
Struktur foo
{
Zeichen a:4;
Zeichen b:8;
} __Attribut__ ((gepackt));
Diese Warnung ist standardmäßig aktiviert. Verwenden -Wno-packed-bitfield-kompat um dies zu deaktivieren
Warnung.
-Gepolstert
Warnen, wenn Padding in einer Struktur enthalten ist, entweder um ein Element des
Struktur oder um die gesamte Struktur auszurichten. Wenn das passiert, ist es manchmal möglich
die Felder der Struktur neu anzuordnen, um die Polsterung zu reduzieren und so die
Struktur kleiner.
-Wredundant-Decls
Warnen, wenn etwas im selben Geltungsbereich mehr als einmal deklariert wird, auch in Fällen, in denen
Mehrfachdeklaration ist gültig und ändert nichts.
-Wnested-externs (nur C und Ziel-C)
Warnen, wenn in einer Funktion eine "extern"-Deklaration gefunden wird.
-Wno-vererbt-variadic-ctor
Unterdrücken Sie Warnungen über die Verwendung von C++11-Erbkonstruktoren, wenn die Basisklasse
geerbt von hat einen C-Variadic-Konstruktor; die Warnung ist standardmäßig aktiviert, da die
Auslassungspunkte werden nicht vererbt.
-Winline
Warnen Sie, wenn eine Funktion, die als inline deklariert ist, nicht inline eingebunden werden kann. Auch damit
Option warnt der Compiler nicht vor Fehlern bei Inline-Funktionen, die in deklariert sind
System-Header.
Der Compiler verwendet eine Vielzahl von Heuristiken, um zu bestimmen, ob a . eingebunden werden soll oder nicht
Funktion. Zum Beispiel berücksichtigt der Compiler die Größe der Funktion, die
inlined und die Menge an Inlining, die bereits in der aktuellen Funktion ausgeführt wurde.
Daher können scheinbar unbedeutende Änderungen im Quellprogramm dazu führen, dass
Warnungen produziert von -Winline erscheinen oder verschwinden.
-Wno-ungültig-offsetof (Nur C++ und Objective-C++)
Unterdrücken Sie Warnungen beim Anwenden des "offsetof"-Makros auf einen Nicht-POD-Typ. Entsprechend
der ISO C++-Standard von 2014, der "offsetof" auf einen Nicht-Standard-Layout-Typ anwendet, ist
nicht definiert. In bestehenden C++-Implementierungen gibt "offsetof" jedoch normalerweise
aussagekräftige Ergebnisse. Dieses Flag ist für Benutzer gedacht, die wissen, dass sie schreiben
nicht tragbaren Codes und die sich bewusst dafür entschieden haben, die Warnung darüber zu ignorieren.
Die Einschränkungen für "offsetof" können in einer zukünftigen Version des C++-Standards gelockert werden.
-Wno-int-to-pointer-cast
Unterdrücken Sie Warnungen von Umwandlungen in den Zeigertyp einer Ganzzahl anderer Größe. In
C++ ist die Umwandlung in einen kleineren Zeigertyp ein Fehler. Wint-to-Pointer-Cast is
standardmäßig aktiviert.
-Wno-Zeiger-auf-int-cast (nur C und Ziel-C)
Unterdrücken Sie Warnungen von Umwandlungen von einem Zeiger auf einen ganzzahligen Typ einer anderen Größe.
-Winvalid-pch
Warnen, wenn im Suchpfad ein vorkompilierter Header gefunden wird, der jedoch nicht verwendet werden kann.
-Wlang-lang
Warnen, wenn der Typ "long long" verwendet wird. Dies wird durch entweder aktiviert -Wpedantisch or
-Wtraditionell in den Modi ISO C90 und C++98. Um die Warnmeldungen zu unterdrücken, verwenden Sie
-Wno-lang-lang.
-Wvariadic-Makros
Warnen, wenn Variadic-Makros im ISO C90-Modus verwendet werden oder wenn die alternative GNU-Syntax . ist
im ISO C99-Modus verwendet. Dies wird durch entweder aktiviert -Wpedantisch or -Wtraditionell. Nach
sperren Sie die Warnmeldungen, verwenden Sie -Wno-variadic-Makros.
-Wvarargs
Warnen Sie bei fragwürdiger Verwendung der Makros, die verwendet werden, um variable Argumente wie
"va_start". Dies ist die Standardeinstellung. Um die Warnmeldungen zu unterdrücken, verwenden Sie -Wno-varargs.
-Wvektor-Betriebsleistung
Warnen, wenn der Vektorbetrieb nicht über die SIMD-Fähigkeiten der Architektur implementiert ist.
Hauptsächlich nützlich für das Leistungstuning. Vektorbetrieb realisierbar
"stückweise", was bedeutet, dass die Skalaroperation für jeden Vektor ausgeführt wird
Element; "parallel", was bedeutet, dass die Vektoroperation mit
Skalare breiteren Typs, die normalerweise leistungseffizienter sind; und "als Single
skalar", was bedeutet, dass der Vektor in einen Skalartyp passt.
-Wno-virtual-move-assign
Unterdrücken Sie Warnungen über das Vererben von einer virtuellen Basis mit einem nicht trivialen C++11-Zug
Aufgabenverwalter. Dies ist gefährlich, denn wenn die virtuelle Basis erreichbar ist
mehr als einem Pfad, wird er mehrmals verschoben, was bedeuten kann, dass beide Objekte in
der ausgezogene Staat. Wenn der Verschiebezuweisungsoperator geschrieben ist, um ein Verschieben von zu vermeiden
ein entferntes Objekt, kann diese Warnung deaktiviert werden.
-Wvla
Warnen, wenn im Code ein Array mit variabler Länge verwendet wird. -Wno-vla verhindert das -Wpedantisch
Warnung vor dem Array variabler Länge.
-Wvolatile-register-var
Warnen, wenn eine Registervariable als flüchtig deklariert wird. Der flüchtige Modifikator nicht
alle Optimierungen unterbinden, die Lese- und/oder Schreibvorgänge in Register eliminieren können
Variablen. Diese Warnung wird aktiviert von -Wand.
-Wdisabled-Optimierung
Warnen, wenn ein angeforderter Optimierungsdurchgang deaktiviert ist. Diese Warnung gilt nicht im Allgemeinen
geben Sie an, dass mit Ihrem Code etwas nicht stimmt; es weist lediglich darauf hin, dass GCCs
Optimierer können den Code nicht effektiv verarbeiten. Das Problem ist oft, dass Ihr
Code ist zu groß oder zu komplex; GCC weigert sich, Programme zu optimieren, wenn die Optimierung
selbst wird wahrscheinlich übermäßig viel Zeit in Anspruch nehmen.
-Wpointer-Zeichen (nur C und Ziel-C)
Warnung vor Zeigerargumentübergabe oder Zuweisung mit unterschiedlicher Vorzeichen. Dies
Option wird nur für C und Objective-C unterstützt. Es wird impliziert durch -Wand und durch
-Wpedantisch, die mit deaktiviert werden kann -Wno-Zeiger-Zeichen.
-Wstack-Schutz
Diese Option ist nur aktiv, wenn -stapelschutz ist aktiv. Es warnt vor Funktionen
die nicht gegen Stapelzertrümmerung geschützt sind.
-Überlänge-Saiten
Warnen Sie vor Stringkonstanten, die länger als die "minimale maximale" Länge sind
in der C-Norm angegeben. Moderne Compiler erlauben im Allgemeinen String-Konstanten, die
sind viel länger als die Mindestgrenze des Standards, aber sehr portable Programme sollten
vermeiden Sie die Verwendung längerer Saiten.
Es gilt die Grenze nachdem Stringkonstantenverkettung und zählt nicht die nachgestellten
NULL. In C90 betrug die Grenze 509 Zeichen; in C99 wurde es auf 4095 angehoben. C++98 tut es
kein normatives minimales Maximum angeben, daher diagnostizieren wir keine überlangen Strings in
C ++.
Diese Option wird impliziert durch -Wpedantisch, und kann mit deaktiviert werden
-Wno-Überlänge-Strings.
-Wunsuffixed-Float-Konstanten (nur C und Ziel-C)
Geben Sie eine Warnung für alle Floating-Konstanten aus, die kein Suffix haben. Wenn benutzt
Zusammen mit -Wsystem-Header es warnt vor solchen Konstanten in System-Header-Dateien.
Dies kann nützlich sein, wenn Sie Code für die Verwendung mit dem Pragma "FLOAT_CONST_DECIMAL64" vorbereiten
von der dezimalen Gleitkommaerweiterung zu C99.
-Wno-designated-init (nur C und Ziel-C)
Unterdrücken Sie Warnungen, wenn ein Positionsinitialisierer verwendet wird, um eine Struktur zu initialisieren, die
wurde mit dem Attribut "designated_init" gekennzeichnet.
Optionen für Fehlerbeseitigung Sie Programm or GCC
GCC bietet verschiedene spezielle Optionen, die zum Debuggen Ihres Programms oder von GCC verwendet werden:
-g Erstellen Sie Debugging-Informationen im nativen Format des Betriebssystems (stabs, COFF,
XCOFF oder ZWERG 2). GDB kann mit diesen Debugging-Informationen arbeiten.
Auf den meisten Systemen, die das stabs-Format verwenden, -g ermöglicht die Verwendung zusätzlicher Debugging-Informationen
die nur GDB verwenden kann; Diese zusätzlichen Informationen machen das Debuggen in GDB besser, aber
bringt wahrscheinlich andere Debugger zum Absturz oder weigern sich, das Programm zu lesen. Wenn du möchtest
um sicher zu sein, ob die zusätzlichen Informationen generiert werden sollen, verwenden Sie -gstabs+, -gstabs,
-gxcoff+, -gxcoff, oder auch -gvms (siehe unten).
GCC ermöglicht Ihnen die Verwendung von -g mit -O. Die Abkürzungen, die von optimiertem Code verwendet werden, können
führen gelegentlich zu überraschenden Ergebnissen: Einige von Ihnen deklarierte Variablen existieren möglicherweise nicht unter
alle; Der Kontrollfluss kann sich kurz dahin verschieben, wo Sie ihn nicht erwartet haben; einige Aussagen können
nicht ausgeführt werden, weil sie konstante Ergebnisse berechnen oder ihre Werte bereits bei . sind
Hand; einige Anweisungen können an verschiedenen Stellen ausgeführt werden, weil sie verschoben wurden
von Schleifen.
Trotzdem ist es möglich, optimierte Ausgaben zu debuggen. Das macht es vernünftig
den Optimierer für Programme zu verwenden, die möglicherweise Fehler enthalten.
Die folgenden Optionen sind nützlich, wenn GCC mit der Fähigkeit für mehr generiert wird
als ein Debugging-Format.
-gsplit-Zwerg
Trennen Sie so viele Debugging-Informationen wie möglich in eine separate Ausgabedatei
mit der Erweiterung .dwo. Diese Option ermöglicht es dem Build-System, das Verknüpfen von Dateien zu vermeiden
mit Debug-Informationen. Um nützlich zu sein, erfordert diese Option einen Debugger, der in der Lage ist,
Lesen von .dwo-Dateien.
-ggdb
Erstellen Sie Debugging-Informationen zur Verwendung durch GDB. Dies bedeutet, die ausdrucksstärkste zu verwenden
verfügbares Format (DWARF 2, stabs oder das native Format, wenn keines davon verfügbar ist
unterstützt), wenn möglich einschließlich GDB-Erweiterungen.
-gpubnamen
Generieren Sie Zwerg-.debug_pubnames- und .debug_pubtypes-Abschnitte.
-ggnu-Pubnames
Generieren Sie .debug_pubnames- und .debug_pubtypes-Abschnitte in einem für . geeigneten Format
Umwandlung in einen GDB-Index. Diese Option ist nur bei einem Linker sinnvoll, der
GDB-Indexversion 7 erstellen.
-gstabs
Erstellen Sie Debugging-Informationen im stabs-Format (sofern dies unterstützt wird), ohne GDB
Erweiterungen. Dies ist das Format, das von DBX auf den meisten BSD-Systemen verwendet wird. Auf MIPS, Alpha und
Bei Systemen mit System V Release 4 erzeugt diese Option eine Ausgabe von Stabs-Debugging, die nicht
von DBX oder SDB verstanden. Auf Systemen mit System V Release 4 erfordert diese Option das GNU
Assembler.
-feiminate-unused-debug-symbols
Erstellen Sie Debugging-Informationen im stabs-Format (sofern dies unterstützt wird), nur für Symbole
die tatsächlich genutzt werden.
-femit-class-debug-immer
Anstatt Debuginformationen für eine C++-Klasse in nur einer Objektdatei auszugeben,
Geben Sie es in alle Objektdateien aus, die die Klasse verwenden. Diese Option sollte nur mit verwendet werden
Debugger, die nicht in der Lage sind, die Art und Weise zu verarbeiten, wie GCC normalerweise Debugging-Informationen ausgibt
für Klassen, da die Verwendung dieser Option die Größe der Debugging-Informationen um . erhöht
so viel wie ein Faktor von zwei.
-fdebug-types-Sektion
Bei Verwendung von DWARF Version 4 oder höher können die Typ DIEs in ihre eigenen eingebaut werden
".debug_types"-Abschnitt, anstatt sie in den ".debug_info"-Abschnitt aufzunehmen. Es
Es ist effizienter, sie in separate comdat-Abschnitte zu legen, da der Linker dies dann kann
Duplikate entfernen. Aber noch nicht alle DWARF-Konsumenten unterstützen ".debug_types"-Abschnitte
und bei einigen Objekten erzeugt ".debug_types" größere statt kleinere Debugging
Informationen.
-gstabs+
Erstellen Sie Debugging-Informationen im stabs-Format (sofern dies unterstützt wird), unter Verwendung von GNU
Erweiterungen, die nur vom GNU-Debugger (GDB) verstanden werden. Die Verwendung dieser Erweiterungen ist
wahrscheinlich andere Debugger zum Absturz bringen oder das Lesen des Programms verweigern.
-gcoff
Erstellen Sie Debugging-Informationen im COFF-Format (sofern dies unterstützt wird). Dies ist das
Format, das von SDB auf den meisten System V-Systemen vor System V Release 4 verwendet wird.
-gxcoff
Erstellen Sie Debugging-Informationen im XCOFF-Format (sofern dies unterstützt wird). Dies ist das
Format, das vom DBX-Debugger auf IBM RS/6000-Systemen verwendet wird.
-gxcoff+
Erstellen Sie Debugging-Informationen im XCOFF-Format (sofern unterstützt), unter Verwendung von GNU
Erweiterungen, die nur vom GNU-Debugger (GDB) verstanden werden. Die Verwendung dieser Erweiterungen ist
wahrscheinlich zum Absturz anderer Debugger oder zum Verweigern des Lesens des Programms und kann dazu führen, dass
andere Assembler als der GNU-Assembler (GAS) mit einem Fehler fehlschlagen.
-Zwerg-Version
Erstellen Sie Debugging-Informationen im DWARF-Format (sofern dies unterstützt wird). Der Wert von
Version kann entweder 2, 3, 4 oder 5 sein; die Standardversion für die meisten Ziele ist 4. DWARF
Version 5 ist nur experimentell.
Beachten Sie, dass bei DWARF Version 2 einige Ports einige konfliktfreie erfordern und immer verwenden
DWARF 3-Erweiterungen in den Abwickeltabellen.
Version 4 erfordert möglicherweise GDB 7.0 und -fvar-Tracking-Zuweisungen für maximalen Nutzen.
-grecord-gcc-switches
Dieser Schalter bewirkt, dass die Befehlszeilenoptionen verwendet werden, um den Compiler aufzurufen, der möglicherweise
Auswirkungen auf die Codegenerierung, die an das DW_AT_producer-Attribut in DWARF angehängt wird
Debugging-Informationen. Die Optionen sind mit Leerzeichen verkettet, die sie von trennen
untereinander und von der Compiler-Version. Siehe auch -frecord-gcc-switches für einander
Möglichkeit zum Speichern von Compileroptionen in der Objektdatei. Dies ist die Standardeinstellung.
-gno-record-gcc-switches
Anhängen von Befehlszeilenoptionen an das DW_AT_producer-Attribut in DWARF nicht zulassen
Debugging-Informationen.
-gstrict-Zwerg
Verbieten Sie die Verwendung von Erweiterungen einer späteren DWARF-Standardversion als ausgewählt mit
-Zwerg-Version. Auf den meisten Zielen, die konfliktfreie DWARF-Erweiterungen von später verwenden
Standardversionen sind erlaubt.
-gno-strenger-zwerg
Erlaube die Verwendung von Erweiterungen einer späteren DWARF-Standardversion als ausgewählt mit
-Zwerg-Version.
-gz[=tippe]
Erstellen Sie komprimierte Debug-Abschnitte im DWARF-Format, wenn dies unterstützt wird. Wenn tippe is
nicht angegeben, der Standardtyp hängt von den Fähigkeiten des Assemblers und Linkers ab
benutzt. tippe kann einer von sein keine (Debug-Abschnitte nicht komprimieren), zlib (benutze zlib
Komprimierung im ELF gABI-Format), oder zlib-gnu (Verwenden Sie die Zlib-Komprimierung in traditionellem GNU
Format). Wenn der Linker das Schreiben komprimierter Debug-Abschnitte nicht unterstützt, ist die Option
ist abgelehnt. Andernfalls, wenn der Assembler sie nicht unterstützt, -gz ist still
beim Erstellen von Objektdateien ignoriert.
-gvms
Erstellen Sie Debugging-Informationen im Alpha/VMS-Debug-Format (sofern dies unterstützt wird). Dies
ist das Format, das von DEBUG auf Alpha/VMS-Systemen verwendet wird.
-gGrad des
-ggdbGrad des
-gstabsGrad des
-gcoffGrad des
-gxcoffGrad des
-gvmsGrad des
Debugging-Informationen anfordern und auch verwenden Grad des um anzugeben, wie viele Informationen. Die
Standardstufe ist 2.
Level 0 erzeugt überhaupt keine Debug-Informationen. Daher, -g0 negiert -g.
Level 1 produziert minimale Informationen, genug, um in Teilen des
Programm, das Sie nicht debuggen möchten. Dazu gehören Funktionsbeschreibungen und
externe Variablen und Zeilennummerntabellen, aber keine Informationen zu lokalen Variablen.
Ebene 3 enthält zusätzliche Informationen, wie z. B. alle Makrodefinitionen, die in der
Programm. Einige Debugger unterstützen die Makroerweiterung, wenn Sie . verwenden -g3.
-zwerg-2 akzeptiert keine verketteten Debug-Ebenen, da GCC früher eine
zu erhalten -zwerg das bedeutete, Debug-Informationen in Version 1 des DWARF zu generieren
Format (das sich stark von Version 2 unterscheidet), und es wäre zu verwirrend gewesen.
Dieses Debug-Format ist längst veraltet, aber die Option kann jetzt nicht geändert werden. Verwenden Sie stattdessen
ein zusätzliches -gGrad des Option zum Ändern des Debug-Levels für DWARF.
-gtoggle
Schalten Sie die Generierung von Debug-Informationen aus, wenn Sie diese Option auslassen, oder schalten Sie sie aus
auf Stufe 2 sonst. Die Position dieses Arguments in der Befehlszeile ist nicht
Gegenstand; es wird wirksam, nachdem alle anderen Optionen verarbeitet wurden, und zwar erst
einmal, egal wie oft es gegeben wird. Dies ist hauptsächlich für die Verwendung mit . gedacht
-fcompare-debug.
-fsanitize=Adresse
Aktivieren Sie AddressSanitizer, einen schnellen Speicherfehlerdetektor. Anweisungen für den Speicherzugriff sind
instrumentiert, um Out-of-Bounds und Use-after-free-Bugs zu erkennen. Sehen
<https://github.com/google/sanitizers/wiki/AddressSanitizer> für mehr Details. Die
Laufzeitverhalten kann über die ASAN_OPTIONEN Umgebungsvariable. Wann
auf "help=1" gesetzt, werden die verfügbaren Optionen beim Start des Instruments angezeigt
Programm. Sehen
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> für a
Liste der unterstützten Optionen.
-fsanitize=Kernel-Adresse
Aktivieren Sie AddressSanitizer für den Linux-Kernel. Sehenhttps://github.com/google/kasan/wiki>
für weitere Informationen an.
-fsanitize=Thread
Aktivieren Sie ThreadSanitizer, einen schnellen Detektor für Datenrennen. Anweisungen für den Speicherzugriff sind
instrumentiert, um Data Race Bugs zu erkennen. Sehen
<https://github.com/google/sanitizers/wiki#threadsanitizer> für mehr Details. Der Lauf-
Zeitverhalten kann mit Hilfe der TSAN_OPTIONS Umgebungsvariable; sehen
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> für eine Liste von
unterstützte Optionen.
-fsanitize=leck
Aktivieren Sie LeakSanitizer, einen Speicherleckdetektor. Diese Option ist nur für die Verknüpfung von
ausführbare Dateien und wenn keine -fsanitize=Adresse noch -fsanitize=Thread wird genutzt. Darin
Falls die ausführbare Datei mit einer Bibliothek verknüpft ist, die "malloc" und andere überschreibt
Allokator-Funktionen. Sehen
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> für mehr
Einzelheiten. Das Laufzeitverhalten kann über die LSAN_OPTIONEN -Umgebung
variabel.
-fsanitize=undefiniert
Aktivieren Sie UndefinedBehaviorSanitizer, einen schnellen Detektor für undefiniertes Verhalten. Verschieden
Berechnungen werden instrumentiert, um undefiniertes Verhalten zur Laufzeit zu erkennen. Strom
Unteroptionen sind:
-fsanitize=shift
Diese Option ermöglicht die Überprüfung, dass das Ergebnis einer Verschiebungsoperation nicht
nicht definiert. Beachten Sie, dass sich das, was genau als undefiniert gilt, geringfügig unterscheidet
zwischen C und C++, sowie zwischen ISO C90 und C99 usw.
-fsanitize=integer-divide-by-null
Erkennt ganzzahlige Division durch Null sowie "INT_MIN / -1" Division.
-fsanitize=unerreichbar
Mit dieser Option verwandelt der Compiler den "__builtin_unreachable"-Aufruf in einen
stattdessen einen Diagnosemeldungsaufruf. Beim Erreichen des "__builtin_unreachable"-Aufrufs,
das Verhalten ist undefiniert.
-fsanitize=vla-gebunden
Diese Option weist den Compiler an, zu überprüfen, ob die Größe einer variablen Länge
Array ist positiv.
-fsanitize=null
Diese Option aktiviert die Zeigerprüfung. Insbesondere die Anwendung, die mit erstellt wurde
Wenn diese Option aktiviert ist, wird eine Fehlermeldung ausgegeben, wenn versucht wird, a . zu dereferenzieren
NULL-Zeiger, oder wenn eine Referenz (möglicherweise eine Rvalue-Referenz) an eine NULL gebunden ist
-Zeiger, oder wenn eine Methode für ein Objekt aufgerufen wird, auf das ein NULL-Zeiger zeigt.
-fsanitize=zurück
Diese Option aktiviert die Überprüfung der return-Anweisung. Mit dieser Option erstellte Programme
eingeschaltet ist, wird eine Fehlermeldung ausgegeben, wenn das Ende einer Nicht-Void-Funktion ist
erreicht, ohne tatsächlich einen Wert zurückzugeben. Diese Option funktioniert nur in C++.
-fsanitize=signed-integer-overflow
Diese Option aktiviert die Überprüfung von vorzeichenbehafteten Integer-Überläufen. Wir überprüfen, ob das Ergebnis von
"+", "*" und sowohl unär als auch binär "-" laufen im Vorzeichen nicht über
Arithmetik. Beachten Sie, dass Integer-Promotion-Regeln berücksichtigt werden müssen. Das ist,
Folgendes ist kein Überlauf:
Zeichen mit Vorzeichen a = SCHAR_MAX;
a ++;
-fsanitize=Grenzen
Diese Option aktiviert die Instrumentierung von Arraygrenzen. Diverse außerhalb der Grenzen
Zugriffe werden erkannt. Flexible Array-Member, flexible Array-Member-ähnliche Arrays,
und Initialisierer von Variablen mit statischem Speicher werden nicht instrumentiert.
-fsanitize=Ausrichtung
Diese Option ermöglicht die Überprüfung der Ausrichtung von Zeigern, wenn sie dereferenziert sind.
oder wenn eine Referenz an ein unzureichend ausgerichtetes Ziel gebunden ist oder wenn eine Methode oder
Der Konstruktor wird für ein unzureichend ausgerichtetes Objekt aufgerufen.
-fsanitize=Objektgröße
Diese Option ermöglicht die Instrumentierung von Speicherreferenzen mit dem
Funktion "__builtin_object_size". Verschiedene Zeigerzugriffe außerhalb der Grenzen sind
nachgewiesen.
-fsanitize=float-dividiere-durch-null
Gleitkomma-Division durch Null erkennen. Im Gegensatz zu anderen ähnlichen Optionen,
-fsanitize=float-dividiere-durch-null wird nicht aktiviert von -fsanitize=undefiniert, Da
Gleitkommadivision durch Null kann ein legitimer Weg sein, Unendlichkeiten zu erhalten
und NaNs.
-fsanitize=float-cast-overflow
Diese Option aktiviert die Überprüfung der Konvertierung von Gleitkommatypen in Ganzzahlen. Wir überprüfen
dass das Ergebnis der Konvertierung nicht überläuft. Im Gegensatz zu anderen ähnlichen
Optionen, -fsanitize=float-cast-overflow wird nicht aktiviert von -fsanitize=undefiniert.
Diese Option funktioniert nicht gut, wenn "FE_INVALID"-Ausnahmen aktiviert sind.
-fsanitize=nonnull-Attribut
Diese Option ermöglicht die Instrumentierung von Anrufen, indem überprüft wird, ob Nullwerte nicht
an Argumente übergeben, die von der Funktion "nicht null" als einen Wert ungleich null erfordern
Attribut.
-fsanitize=returns-nonnull-attribute
Diese Option ermöglicht die Instrumentierung von return-Anweisungen in Funktionen, die mit gekennzeichnet sind
Funktionsattribut "returns_nonnull", um die Rückgabe von Nullwerten von solchen zu erkennen
Funktionen.
-fsanitize=bool
Diese Option ermöglicht die Instrumentierung von Lasten von bool. Wenn ein anderer Wert als 0/1
geladen wird, wird ein Laufzeitfehler ausgegeben.
-fsanitize=enum
Diese Option ermöglicht die Instrumentierung von Lasten von einem Aufzählungstyp. Wenn ein Wert
außerhalb des Wertebereichs für den Enum-Typ geladen wird, ist ein Laufzeitfehler
problematisch.
-fsanitize=vptr
Diese Option ermöglicht die Instrumentierung von C++-Memberfunktionsaufrufen, Memberzugriffen
und einige Konvertierungen zwischen Zeigern auf Basis- und abgeleitete Klassen, um die
referenziertes Objekt hat den richtigen dynamischen Typ.
Während -ftrapv bewirkt, dass Traps für signierte Überläufe ausgegeben werden, -fsanitize=undefiniert
gibt eine Diagnosemeldung aus. Dies funktioniert derzeit nur für die C-Sprachfamilie.
-fno-sanitize=alle
Diese Option deaktiviert alle zuvor aktivierten Desinfektionsmittel. -fsanitize=alle ist nicht
erlaubt, da einige Desinfektionsmittel nicht zusammen verwendet werden können.
-fasan-shadow-offset=Anzahl
Diese Option zwingt GCC, benutzerdefinierten Schatten-Offset in AddressSanitizer-Prüfungen zu verwenden. es ist
nützlich zum Experimentieren mit verschiedenen Schattenspeicher-Layouts im Kernel
AdresseSanitizer.
-fsanitize-recover[=entscheidet sich]
-fsanitize-recover= steuert den Fehlerbeseitigungsmodus für Desinfektionsmittel, die in Komma-
getrennte Liste von entscheidet sich. Wenn Sie diese Option für eine Desinfektionsmittelkomponente aktivieren, wird diese
Versuchen Sie, das Programm weiter auszuführen, als ob kein Fehler aufgetreten wäre. Das bedeutet mehrere
Laufzeitfehler können in einem einzigen Programmlauf gemeldet werden und der Exit-Code des
Programm kann auch dann Erfolg anzeigen, wenn Fehler gemeldet wurden. Die
-fno-sanitize-recover= Option kann verwendet werden, um dieses Verhalten zu ändern: nur die erste
erkannter Fehler wird gemeldet und das Programm wird dann mit einem Exit-Code ungleich Null beendet.
Derzeit funktioniert diese Funktion nur für -fsanitize=undefiniert (und seine Unteroptionen außer
für -fsanitize=unerreichbar und -fsanitize=zurück), -fsanitize=float-cast-overflow,
-fsanitize=float-dividiere-durch-null und -fsanitize=Kernel-Adresse. Für diese Desinfektionsmittel
Fehlerkorrektur ist standardmäßig aktiviert. -fsanitize-recover=alle und
-fno-sanitize-recover=alle wird auch akzeptiert, ersteres ermöglicht Genesung für alle
Desinfektionsmittel, die dies unterstützen, deaktiviert die Wiederherstellung für alle Desinfektionsmittel, die
unterstütze es.
Syntax ohne explizit entscheidet sich Parameter ist veraltet. Es ist äquivalent zu
-fsanitize-recover=undefined,float-cast-overflow,float-dividieren-durch-null
Ähnlich -Fno-sanitieren Sie die Wiederherstellung entspricht
-fno-sanitize-recover=undefined,float-cast-overflow,float-divide-by-null
-fsanitize-undefined-trap-on-error
Die -fsanitize-undefined-trap-on-error Option weist den Compiler an zu melden
undefiniertes Verhalten, das "__builtin_trap" anstelle einer "libubsan"-Bibliotheksroutine verwendet.
Dies hat den Vorteil, dass die Bibliothek "libubsan" nicht benötigt wird und nicht verlinkt ist
in, sodass dies auch in freistehenden Umgebungen verwendet werden kann.
-fcheck-pointer-bounds
Aktivieren Sie die Pointer Bounds Checker-Instrumentierung. Jede Speicherreferenz ist instrumentiert
mit Überprüfungen des Zeigers, der für den Speicherzugriff verwendet wird, gegen die damit verbundenen Grenzen
Zeiger.
Derzeit ist nur eine Implementierung für Intel MPX verfügbar, also x86-Target und
-mmpx sind erforderlich, um diese Funktion zu aktivieren. MPX-basierte Instrumentierung erfordert a
Laufzeitbibliothek, um MPX in der Hardware zu aktivieren und Grenzverletzungssignale zu verarbeiten. Von
Standard wenn -fcheck-pointer-bounds und -mmpx Optionen werden verwendet, um ein Programm zu verknüpfen, die
GCC-Treiberlinks gegen die libmpx Laufzeitbibliothek und libmpxwrappers Bücherei. Es
übergibt auch '-z bndplt' an einen Linker, falls er diese Option unterstützt (die aktiviert ist)
in der libmpx-Konfiguration). Beachten Sie, dass alte Versionen des Linkers die Option ignorieren können. Gold
Linker unterstützt die Option '-z bndplt' nicht. Ohne '-z bndplt'-Unterstützung im Linker all
Aufrufe an dynamische Bibliotheken verlieren überschrittene Grenzen, wodurch das allgemeine Schutzniveau reduziert wird. Es ist
Es wird dringend empfohlen, Linker mit '-z bndplt'-Unterstützung zu verwenden. Falls ein solcher Linker nicht
verfügbar, es wird empfohlen, immer zu verwenden -static-libmpxwrappers für besseren Schutz
Ebene oder verwenden -statisch externe Aufrufe dynamischer Bibliotheken vollständig zu vermeiden. MPX-
basierte Instrumentierung kann zum Debuggen verwendet werden und kann auch in die Produktion integriert werden
Code zur Erhöhung der Programmsicherheit. Je nach Nutzung können Sie unterschiedliche
Anforderungen an die Laufzeitbibliothek. Die aktuelle Version der MPX-Laufzeitbibliothek
ist eher auf die Verwendung als Debugging-Tool ausgerichtet. Die Verwendung der MPX-Laufzeitbibliothek impliziert
-lpthread. Siehe auch -static-libmpx. Das Verhalten der Laufzeitbibliothek kann beeinflusst werden
mit verschiedenen CHKP_RT_* Umgebungsvariablen. Sehen
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> für mehr
Details.
Generierte Instrumentierung kann durch verschiedene -fchkp-* Optionen und durch die
Strukturfeldattribut "bnd_variable_size" und "bnd_legacy" und "bnd_instrument"
Funktionsattribute. GCC bietet auch eine Reihe von integrierten Funktionen zur Steuerung
der Pointer Bounds Checker.
-fchkp-check-incomplete-type
Generieren Sie Zeigergrenzenüberprüfungen für Variablen mit unvollständigem Typ. Aktiviert von
default.
-fchkp-narrow-bounds
Steuert Grenzen, die von Pointer Bounds Checker für Zeiger auf Objektfelder verwendet werden. Wenn
wird die Einengung aktiviert, dann werden Feldgrenzen verwendet. Andernfalls werden Objektgrenzen verwendet.
[VORLÄUFIGE VOLLAUTOMATISCHE TEXTÜBERSETZUNG - muss noch überarbeitet werden. Wir bitten um Ihr Verständnis.] -fchkp-narrow-to-innermost-array und -fchkp-erstes-Feld-hat-eigene-Grenzen.
Standardmäßig aktiviert.
-fchkp-erstes-Feld-hat-eigene-Grenzen
Zwingt den Pointer Bounds Checker, eingeengte Grenzen für die Adresse des ersten zu verwenden
Feld in der Struktur. Standardmäßig hat ein Zeiger auf das erste Feld die gleichen Grenzen
als Hinweis auf die gesamte Struktur.
-fchkp-narrow-to-innermost-array
Zwingt den Pointer Bounds Checker, die Grenzen der innersten Arrays zu verwenden, wenn verschachtelt
statischer Array-Zugriff. Standardmäßig ist diese Option deaktiviert und die Grenzen der äußersten
Array verwendet werden.
-fchkp-optimieren
Aktiviert Pointer Bounds Checker-Optimierungen. Bei der Optimierung standardmäßig aktiviert
Level -O, -O2, -O3.
-fchkp-use-fast-string-functions
Ermöglicht die Verwendung von *_nobnd-Versionen von String-Funktionen (kein Kopieren von Grenzen) durch Pointer
Grenzen-Checker. Standardmäßig deaktiviert.
-fchkp-use-nochk-string-Funktionen
Ermöglicht die Verwendung von *_nochk-Versionen von String-Funktionen (keine Überprüfung von Grenzen) durch Pointer
Grenzen-Checker. Standardmäßig deaktiviert.
-fchkp-use-static-bounds
Erlauben Sie Pointer Bounds Checker, statische Grenzen zu generieren, die Grenzen von static halten
Variablen. Standardmäßig aktiviert.
-fchkp-use-static-const-bounds
Verwenden Sie statisch initialisierte Grenzen für konstante Grenzen, anstatt sie einzeln zu generieren
Zeit sie benötigt werden. Standardmäßig aktiviert, wenn -fchkp-use-static-bounds aktiviert.
-fchkp-treat-zero-dynamic-size-as-unendlich
Mit dieser Option werden Objekte mit unvollständigem Typ, deren dynamisch abgerufene Größe Null ist
werden stattdessen von Pointer Bounds Checker als unendlich groß behandelt. Diese Option
kann hilfreich sein, wenn ein Programm mit einer Bibliothek verknüpft ist, bei der die Größeninformationen für einige fehlen
Symbole. Standardmäßig deaktiviert.
-fchkp-check-read
Weist Pointer Bounds Checker an, Prüfungen für alle Lesezugriffe auf den Speicher zu generieren.
Standardmäßig aktiviert.
-fchkp-check-write
Weist Pointer Bounds Checker an, Prüfungen für alle Schreibzugriffe auf den Speicher zu generieren.
Standardmäßig aktiviert.
-FCHKP-Store-Bounds
Weist Pointer Bounds Checker an, Begrenzungsspeicher für Zeigerschreibvorgänge zu generieren.
Standardmäßig aktiviert.
-fchkp-instrument-aufrufe
Weist Pointer Bounds Checker an, Zeigergrenzen an Aufrufe zu übergeben. Standardmäßig aktiviert.
-fchkp-instrument-marked-only
Weist Pointer Bounds Checker an, nur Funktionen zu instrumentieren, die mit dem gekennzeichnet sind
"bnd_instrument"-Attribut. Standardmäßig deaktiviert.
-fchkp-use-wrapper
Ermöglicht Pointer Bounds Checker, Aufrufe an integrierte Funktionen durch Aufrufe an . zu ersetzen
Wrapper-Funktionen. Wann -fchkp-use-wrapper wird verwendet, um ein Programm zu verknüpfen, den GCC-Treiber
automatisch verlinkt gegen libmpxwrappers. Siehe auch -static-libmpxwrappers. Ermöglicht
standardmäßig.
-fdump-final-insns[=Datei]
Dump der endgültigen internen Darstellung (RTL) auf Datei. Wenn das optionale Argument ist
weggelassen (oder wenn Datei ist "."), wird der Name der Dump-Datei durch Anhängen bestimmt
".gkd" an den Namen der Kompilierungsausgabedatei.
-fcompare-debug[=entscheidet sich]
Wenn während der Kompilierung kein Fehler auftritt, führen Sie den Compiler ein zweites Mal aus und fügen Sie hinzu: entscheidet sich und
-fcompare-debug-second zu den Argumenten, die an die zweite Kompilierung übergeben werden. Entleeren Sie die
endgültige interne Darstellung in beiden Kompilierungen und geben einen Fehler aus, wenn sie sich unterscheiden.
Wenn das Gleichheitszeichen weggelassen wird, ist die Vorgabe -gtoggle wird eingesetzt.
Die Umgebungsvariable GCC_COMPARE_DEBUG, falls definiert, nicht leer und ungleich null,
implizit aktiviert -fcompare-debug. Wenn GCC_COMPARE_DEBUG ist zu einer Zeichenfolge definiert
beginnend mit einem Bindestrich, dann wird es verwendet für entscheidet sich, sonst die Vorgabe -gtoggle is
benutzt.
-fcompare-debug=, mit Gleichheitszeichen aber ohne entscheidet sich, ist äquivalent zu
-fno-compare-debug, wodurch das Dumping der endgültigen Darstellung deaktiviert wird und die
zweite Zusammenstellung, verhindert sogar GCC_COMPARE_DEBUG ab in Kraft treten.
Um die vollständige Abdeckung während . zu überprüfen -fcompare-debug testen, einstellen GCC_COMPARE_DEBUG sagen
-fcompare-debug-nicht-überschrieben, die GCC als ungültige Option in jedem tatsächlichen ablehnt
Kompilieren (anstatt Vorverarbeitung, Assemblierung oder Verlinkung). Um nur eine Warnung zu erhalten,
Einstellung GCC_COMPARE_DEBUG zu -w%n-fcompare-debug nicht überschrieben Wird besorgt.
-fcompare-debug-second
Diese Option wird implizit an den Compiler für die zweite angeforderte Kompilierung übergeben
by -fcompare-debug, zusammen mit Optionen zum Stummschalten von Warnungen und Auslassen anderer Optionen
das würde zu Nebeneffekt-Compilerausgaben in Dateien oder in die Standardausgabe führen.
Dump-Dateien und beibehaltene temporäre Dateien werden umbenannt, sodass sie das ".gk" enthalten
zusätzliche Erweiterung bei der zweiten Kompilierung, um diese nicht zu überschreiben
von der ersten erzeugt.
Wenn diese Option an den Compiler-Treiber übergeben wird, führt dies dazu, dass die zuerst Zusammenstellung zu
übersprungen werden, was es für wenig anderes als das Debuggen des eigentlichen Compilers nützlich macht.
-feliminate-zwerg2-dups
Komprimieren Sie DWARF 2-Debugging-Informationen, indem Sie doppelte Informationen über
jedes Symbol. Diese Option ist nur beim Generieren von DWARF 2-Debugging sinnvoll
Informationen mit -zwerg-2.
-femit-struct-debug-baseonly
Geben Sie Debug-Informationen für strukturähnliche Typen nur dann aus, wenn der Basisname des
Kompilierungsquelldatei stimmt mit dem Basisnamen der Datei überein, in der die Struktur definiert ist.
Diese Option reduziert die Größe der Debugging-Informationen erheblich, aber bei
erheblicher potenzieller Verlust von Typinformationen für den Debugger. Sehen
-femit-struct-debug-reduziert für eine weniger aggressive Option. Sehen
-femit-struct-debug-detailliert für eine genauere Kontrolle.
Diese Option funktioniert nur mit DWARF 2.
-femit-struct-debug-reduziert
Geben Sie Debug-Informationen für strukturähnliche Typen nur dann aus, wenn der Basisname des
Kompilierungsquelldatei stimmt mit dem Basisnamen der Datei überein, in der der Typ definiert ist,
es sei denn, die Struktur ist eine Vorlage oder in einem Systemheader definiert.
Diese Option reduziert die Größe der Debugging-Informationen erheblich, mit einigen
potenzieller Verlust von Typinformationen für den Debugger. Sehen -femit-struct-debug-baseonly
für eine aggressivere Option. Sehen -femit-struct-debug-detailliert für detaillierter
steuern.
Diese Option funktioniert nur mit DWARF 2.
-femit-struct-debug-detailliert[=Spezifikationsliste]
Geben Sie die strukturähnlichen Typen an, für die der Compiler Debuginformationen generiert. Die
Die Absicht besteht darin, doppelte Debug-Informationen für Structs zwischen verschiedenen Objektdateien zu reduzieren
innerhalb desselben Programms.
Diese Option ist eine detaillierte Version von -femit-struct-debug-reduziert und
-femit-struct-debug-baseonly, die die meisten Bedürfnisse erfüllt.
Eine Spezifikation hat die Syntax[Richt:|ind:][ordnung:|Genre:](jedem|sys|Base|keine)
Das optionale erste Wort schränkt die Spezifikation auf Strukturen ein, die direkt verwendet werden
(Richt:) oder indirekt verwendet (ind:). Ein Strukturtyp wird direkt verwendet, wenn es der Typ ist
einer Variablen, Mitglied. Indirekte Verwendungen entstehen durch Zeiger auf Strukturen. Das ist,
wenn die Verwendung einer unvollständigen Struktur zulässig ist, ist die Verwendung indirekt. Ein Beispiel ist struct
dank One Direkte; struct XNUMX * indirekt;.
Das optionale zweite Wort beschränkt die Spezifikation auf gewöhnliche Strukturen (ordnung:oder
generische Strukturen (Genre:). Generische Strukturen sind etwas kompliziert zu erklären. Für C++,
dies sind nicht explizite Spezialisierungen von Template-Klassen oder Nicht-Template-Klassen
innerhalb der oben. Andere Programmiersprachen haben Generika, aber
-femit-struct-debug-detailliert setzt sie noch nicht um.
Das dritte Wort gibt die Quelldateien für die Strukturen an, für die der Compiler
sollte Debug-Informationen ausgeben. Die Werte keine und jedem die normale Bedeutung haben. Die
Wert Base bedeutet, dass die Basis des Namens der Datei, in der die Typdeklaration
angezeigt wird, muss mit der Basis des Namens der Hauptkompilierungsdatei übereinstimmen. In der Praxis,
das bedeutet, dass beim Kompilieren foo.c, werden Debug-Informationen für Typen generiert
in dieser Datei deklariert und foo.h, aber keine anderen Header-Dateien. Der Wert sys Mittel
diese Typen befriedigend Base oder in System- oder Compiler-Headern deklariert.
Möglicherweise müssen Sie experimentieren, um die besten Einstellungen für Ihre Anwendung zu ermitteln.
Die Standardeinstellung ist -femit-struct-debug-detailed=all.
Diese Option funktioniert nur mit DWARF 2.
-fno-merge-debug-strings
Weisen Sie den Linker an, keine Strings in den Debug-Informationen zusammenzuführen, die
in verschiedenen Objektdateien identisch. Zusammenführen wird nicht von allen Assemblern unterstützt oder
Linker. Das Zusammenführen verringert die Größe der Debug-Informationen in der Ausgabedatei um
die Kosten für die Verlängerung der Verbindungsverarbeitungszeit. Das Zusammenführen ist standardmäßig aktiviert.
-fdebug-prefix-map=alt=neu
Beim Kompilieren von Dateien im Verzeichnis alt, zeichnen Sie Debugging-Informationen auf, die sie beschreiben als
in neu stattdessen.
-fno-dwarf2-cfi-asm
Geben Sie DWARF 2-Unwind-Informationen als vom Compiler generierten Abschnitt ".eh_frame" aus, anstatt zu verwenden
GAS-Anweisungen ".cfi_*".
-p Generieren Sie zusätzlichen Code, um Profilinformationen zu schreiben, die für das Analyseprogramm geeignet sind
profi. Sie müssen diese Option verwenden, wenn Sie die Quelldateien kompilieren, zu denen Sie Daten benötigen.
und Sie müssen es auch beim Verlinken verwenden.
-S Generieren Sie zusätzlichen Code, um Profilinformationen zu schreiben, die für das Analyseprogramm geeignet sind
gprof. Sie müssen diese Option verwenden, wenn Sie die Quelldateien kompilieren, zu denen Sie Daten benötigen.
und Sie müssen es auch beim Verlinken verwenden.
-Q Lässt den Compiler jeden Funktionsnamen ausdrucken, während er kompiliert wird, und einige ausgeben
Statistiken über jeden Durchgang, wenn er fertig ist.
-ftime-Bericht
Lässt den Compiler einige Statistiken über die von jedem Durchlauf verbrauchte Zeit ausgeben, wenn
endet.
-fmem-Bericht
Lässt den Compiler einige Statistiken über die permanente Speicherzuweisung ausgeben, wenn er
endet.
-fmem-report-wpa
Lässt den Compiler einige Statistiken über die permanente Speicherzuweisung für den WPA ausgeben
nur Phase.
-fpre-ipa-mem-bericht
-fpost-ipa-mem-bericht
Lässt den Compiler einige Statistiken über die permanente Speicherzuweisung ausgeben, bevor oder
nach interprozeduraler Optimierung.
-fprofile-bericht
Lässt den Compiler einige Statistiken über die Konsistenz des (geschätzten) Profils ausgeben
und Wirkung einzelner Pässe.
-fstack-Nutzung
Macht die Compiler-Ausgabe-Stack-Verwendungsinformationen für das Programm auf eine Funktion pro Funktion
Basis. Der Dateiname für den Dump entsteht durch Anhängen . Su zu den Hilfsname. Hilfsname is
aus dem Namen der Ausgabedatei generiert, wenn explizit angegeben und es sich nicht um eine
ausführbar, andernfalls ist es der Basisname der Quelldatei. Ein Eintrag besteht aus
drei Felder:
* Der Name der Funktion.
* Eine Anzahl von Bytes.
* Ein oder mehrere Qualifizierer: "statisch", "dynamisch", "begrenzt".
Der Qualifier "static" bedeutet, dass die Funktion den Stack statisch manipuliert: a
feste Anzahl von Bytes wird dem Frame bei Funktionseintritt zugewiesen und freigegeben bei
Funktion beenden; Ansonsten werden in der Funktion keine Stack-Anpassungen vorgenommen. Der Zweite
Feld ist diese feste Anzahl von Bytes.
Der Qualifier "dynamic" bedeutet, dass die Funktion den Stack dynamisch manipuliert: in
Zusätzlich zu der oben beschriebenen statischen Zuordnung werden Stack-Anpassungen im
Hauptteil der Funktion, um beispielsweise Argumente um Funktionsaufrufe herum zu pushen/einzublenden. Wenn die
Qualifier "bounded" ist ebenfalls vorhanden, der Betrag dieser Anpassungen ist begrenzt auf
Kompilierzeit und das zweite Feld ist eine Obergrenze der Gesamtmenge des verwendeten Stapels
durch die Funktion. Wenn es nicht vorhanden ist, ist der Betrag dieser Anpassungen nicht begrenzt
zur Kompilierzeit und das zweite Feld stellt nur den begrenzten Teil dar.
-fprofile-Bögen
Fügen Sie Code hinzu, damit das Programm abläuft Bögen instrumentiert sind. Während der Ausführung des Programms
zeichnet auf, wie oft jede Verzweigung und jeder Aufruf ausgeführt und wie oft sie angenommen werden
oder zurückgibt. Wenn das kompilierte Programm beendet wird, speichert es diese Daten in einer Datei namens
auxname.gcda für jede Quelldatei. Die Daten dürfen für profilorientierte
Optimierungen (-fbranch-Wahrscheinlichkeiten) oder zur Testabdeckungsanalyse
(-Ftest-Abdeckung). Jede Objektdatei ist Hilfsname wird aus dem Namen des
Ausgabedatei, falls explizit angegeben und es sich nicht um die endgültige ausführbare Datei handelt, andernfalls
ist der Basisname der Quelldatei. In beiden Fällen wird jegliches Suffix entfernt (zB
foo.gcda für Eingabedatei dir/foo.c, oder auch dir/foo.gcda für Ausgabedatei angegeben als -o
dir/foo.o).
--Abdeckung
Diese Option wird verwendet, um Code zu kompilieren und zu verknüpfen, der für die Coverage-Analyse instrumentiert wurde. Die
Option ist ein Synonym für -fprofile-Bögen -Ftest-Abdeckung (beim Kompilieren) und -lgcov
(beim Verlinken). Weitere Informationen finden Sie in der Dokumentation zu diesen Optionen.
* Kompilieren Sie die Quelldateien mit -fprofile-Bögen plus Optimierung und Codegenerierung
Optionen. Verwenden Sie für die Analyse der Testabdeckung das zusätzliche -Ftest-Abdeckung .
Sie müssen nicht für jede Quelldatei in einem Programm ein Profil erstellen.
* Verknüpfen Sie Ihre Objektdateien mit -lgcov or -fprofile-Bögen (letzteres impliziert die
ehemalige).
* Führen Sie das Programm mit einer repräsentativen Arbeitslast aus, um das Bogenprofil zu generieren
Information. Dies kann beliebig oft wiederholt werden. Sie können gleichzeitig laufen
Instanzen Ihres Programms und vorausgesetzt, das Dateisystem unterstützt das Sperren, die
Datendateien werden korrekt aktualisiert. Auch "Fork"-Anrufe werden erkannt und
richtig gehandhabt (Doppelzählungen werden nicht durchgeführt).
* Kompilieren Sie für profilorientierte Optimierungen die Quelldateien erneut mit demselben
Optimierungs- und Codegenerierungsoptionen plus -fbranch-Wahrscheinlichkeiten.
* Verwenden Sie für die Testabdeckungsanalyse gcov um für Menschen lesbare Informationen zu erzeugen
.gcnr und .ggda Dateien. Siehe die gcov Dokumentation für weitere
Informationen.
Mit -fprofile-Bögen, für jede Funktion Ihres Programms erstellt GCC einen Programmablauf
graph und findet dann einen aufspannenden Baum für den Graphen. Nur Bögen, die nicht auf dem . sind
Spanning Tree müssen instrumentiert werden: Der Compiler fügt Code hinzu, um die Anzahl der
Mal, dass diese Bögen ausgeführt werden. Wenn ein Bogen der einzige Ausgang oder einzige Eingang ist
ein Block, der Instrumentierungscode kann dem Block hinzugefügt werden; ansonsten ein neues Basic
Es muss ein Block erstellt werden, der den Instrumentierungscode enthält.
-Ftest-Abdeckung
Erstellen Sie eine Notizendatei, die die gcov Code-Coverage-Dienstprogramm kann verwenden, um Programm anzuzeigen
Abdeckung. Die Notizdatei jeder Quelldatei heißt Zusatzname.gcno. Siehe die
-fprofile-Bögen Option oben für eine Beschreibung von Hilfsname und Anleitungen dazu
Generieren von Testabdeckungsdaten. Abdeckungsdaten stimmen besser mit den Quelldateien überein, wenn
Sie optimieren nicht.
-fdbg-cnt-liste
Geben Sie den Namen und die obere Grenze des Zählers für alle Debug-Zähler aus.
-fdbg-cnt=Gegenwertliste
Legen Sie die Obergrenze des internen Debug-Zählers fest. Gegenwertliste ist durch Kommas getrennt
Liste der Name:Wert Paare, die die obere Grenze jedes Debug-Zählers festlegen Name zu
Wert. Alle Debug-Zähler haben die anfängliche obere Grenze von "UINT_MAX"; also "dbg_cnt"
gibt immer true zurück, es sei denn, die Obergrenze wird durch diese Option festgelegt. Zum Beispiel mit
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" gibt nur für die ersten 10 . wahr zurück
Anrufungen.
-abwehrbar-Art-passieren
-fdeaktiviert-Art-passieren=Bereichsliste
Dies ist eine Reihe von Optionen, die verwendet werden, um die Optimierung explizit zu deaktivieren/aktivieren
geht vorbei. Diese Optionen sind für das Debuggen von GCC gedacht. Compiler-Benutzer sollten
Verwenden Sie stattdessen die regulären Optionen zum Aktivieren/Deaktivieren von Pässen.
-fdisable-ipa-passieren
IPA-Pass deaktivieren passieren. passieren ist der Passname. Wenn der gleiche Pass statisch ist
mehrfach im Compiler aufgerufen, sollte der Passname mit a . angehängt werden
fortlaufende Nummer beginnend mit 1.
-fdisable-rtl-passieren
-fdisable-rtl-passieren=Bereichsliste
RTL-Pass deaktivieren passieren. passieren ist der Passname. Wenn der gleiche Pass statisch ist
mehrfach im Compiler aufgerufen, sollte der Passname mit a . angehängt werden
fortlaufende Nummer beginnend mit 1. Bereichsliste ist eine durch Kommas getrennte Liste von
Funktionsbereiche oder Assemblernamen. Jeder Bereich ist ein durch a . getrenntes Zahlenpaar
Doppelpunkt. Das Sortiment ist an beiden Enden inklusive. Wenn der Bereich trivial ist, ist die Zahl
Paar kann als einzelne Zahl vereinfacht werden. Wenn der Aufrufgraphknoten der Funktion
uid in einen der angegebenen Bereiche fällt, die passieren ist dafür deaktiviert
Funktion. Das uid wird im Funktionsheader einer Dump-Datei angezeigt, und der Pass
Namen können mit Option gelöscht werden -fdump-pässe.
-fdisable-tree-passieren
-fdisable-tree-passieren=Bereichsliste
Baumpass deaktivieren passieren. Sehen -fdisable-rtl zur Beschreibung der Option
Argumente.
-fenable-ipa-passieren
IPA-Pass aktivieren passieren. passieren ist der Passname. Wenn der gleiche Pass statisch ist
mehrfach im Compiler aufgerufen, sollte der Passname mit a . angehängt werden
fortlaufende Nummer beginnend mit 1.
-fenable-rtl-passieren
-fenable-rtl-passieren=Bereichsliste
RTL-Pass aktivieren passieren. Sehen -fdisable-rtl für Optionsargumentbeschreibung und
Beispiele.
-fenable-baum-passieren
-fenable-baum-passieren=Bereichsliste
Baumpass aktivieren passieren. Sehen -fdisable-rtl für die Beschreibung von Optionsargumenten.
Hier sind einige Beispiele, die die Verwendung dieser Optionen zeigen.
# ccp1 für alle Funktionen deaktivieren
-fdisable-tree-ccp1
# Deaktivieren Sie das vollständige Abrollen für eine Funktion, deren cgraph-Knoten-UID 1 ist
-fenable-tree-cunroll=1
# gcse2 für Funktionen in den folgenden Bereichen deaktivieren [1,1],
# [300,400] und [400,1000]
# gcse2 für die Funktionen foo und foo2 deaktivieren
-fdisable-rtl-gcse2=foo,foo2
# Frühes Inlining deaktivieren
-fdisable-tree-inline
# Ipa-Inlining deaktivieren
-fdisable-ipa-inline
# Baum vollständig entrollen aktivieren
-fenable-tree-unroll
-dBriefe
-fdump-rtl-passieren
-fdump-rtl-passieren=Dateinamen
Sagt, Debugging-Dumps während der Kompilierung zu den von . angegebenen Zeiten zu erstellen Briefe. Dies
wird zum Debuggen der RTL-basierten Durchgänge des Compilers verwendet. Die Dateinamen für die meisten
der Dumps werden durch Anhängen einer Passnummer und eines Wortes an die Dumpnameund der
Dateien werden im Verzeichnis der Ausgabedatei erstellt. Im Falle von =Dateinamen Option,
der Dump wird in der angegebenen Datei anstelle der durchnummerierten Dump-Dateien ausgegeben. Notiz
dass die Ausweisnummer statisch berechnet wird, wenn die Ausweise im Ausweis registriert werden
Manager. Somit hängt die Nummerierung nicht mit der dynamischen Reihenfolge der Ausführung von zusammen
geht vorbei. Insbesondere kann ein von einem Plugin installierter Pass eine Nummer über 200 haben, sogar
wenn es ziemlich früh ausgeführt wurde. Dumpname wird aus dem Namen der Ausgabedatei generiert,
wenn explizit angegeben und es ist keine ausführbare Datei, andernfalls ist es der Basisname von
die Quelldatei. Diese Schalter können unterschiedliche Auswirkungen haben, wenn -E wird verwendet für
Vorverarbeitung.
Debug-Dumps können mit a . aktiviert werden -fdump-rtl Schalter oder so -d zu erhalten Briefe. Hier
sind die möglichen Buchstaben für die Verwendung in passieren und Briefe, und ihre Bedeutungen:
-fdump-rtl-Ausrichtungen
Dump, nachdem Verzweigungsausrichtungen berechnet wurden.
-fdump-rtl-asmcons
Dump nach dem Korrigieren von rtl-Anweisungen, die nicht erfüllte Ein-/Aus-Einschränkungen aufweisen.
-fdump-rtl-auto_inc_dec
Dump nach Auto-Inc-Dec-Erkennung. Dieser Pass wird nur auf Architekturen ausgeführt, die
haben Auto-Inc- oder Auto-Dec-Anweisungen.
-fdump-rtl-barrieren
Entleeren Sie nach dem Reinigen der Barriereanweisungen.
-fdump-rtl-bbpart
Dump nach der Partitionierung von heißen und kalten Basisblöcken.
-fdump-rtl-bbro
Dump nach der Neuordnung von Blöcken.
-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 und -fdump-rtl-btl2 Dumping nach den zwei Verzweigungszielen aktivieren
Lastoptimierung geht.
-fdump-rtl-bypass
Dump-After-Jump-Bypassing und Kontrollflussoptimierungen.
-fdump-rtl-combine
Dump nach dem RTL-Befehlskombinationsdurchlauf.
-fdump-rtl-compgotos
Dump nach dem Duplizieren der berechneten Gotos.
-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2 und -fdump-rtl-ce3 Dumping nach den drei aktivieren
wenn die Konvertierung erfolgreich ist.
-fdump-rtl-cprop_hardreg
Dump nach der Verbreitung von Hard-Register-Kopien.
-fdump-rtl-csa
Dump nach dem Kombinieren von Stapelanpassungen.
-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 und -fdump-rtl-cse2 aktivieren Dumping nach den beiden gemeinsamen
Unterausdruck-Elimination geht.
-fdump-rtl-dce
Dump, nachdem die eigenständige Eliminierung von totem Code erfolgreich war.
-fdump-rtl-dbr
Dump nach verzögerter Filialplanung.
-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 und -fdump-rtl-dce2 Dumping nach den zwei toten Speichern aktivieren
Eliminierung geht.
-fdump-rtl-eh
Dump nach Fertigstellung des EH-Handling-Codes.
-fdump-rtl-eh_ranges
Dump nach Konvertierung der EH-Handling-Bereichsbereiche.
-fdump-rtl-expand
Dump nach RTL-Generierung.
-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 und -fdump-rtl-fwprop2 aktivieren Dumping nach den beiden Vorwärts
Vermehrung geht.
-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 und -fdump-rtl-gcse2 Dumping nach Global Common aktivieren
Eliminierung von Unterausdrücken.
-Fdump-rtl-init-Regs
Dump nach der Initialisierung der Register.
-fdump-rtl-initvals
Dump nach der Berechnung der Anfangswertsätze.
-fdump-rtl-into_cfglayout
Dump nach der Konvertierung in den cfglayout-Modus.
-fdump-rtl-ira
Dump nach iterierter Registerzuweisung.
-fdump-rtl-jump
Dump nach der zweiten Sprungoptimierung.
-fdump-rtl-loop2
-fdump-rtl-loop2 aktiviert das Dumping, nachdem die Optimierung der rtl-Schleife durchlaufen wurde.
-fdump-rtl-mach
Dump nach Durchführen des maschinenabhängigen Reorganisationsdurchgangs, wenn dieser Durchgang
besteht.
-fdump-rtl-mode_sw
Dump nach dem Entfernen redundanter Modusschalter.
-fdump-rtl-rnreg
Dump nach der Neunummerierung des Registers.
-fdump-rtl-outof_cfglayout
Dump nach der Konvertierung aus dem cfglayout-Modus.
-fdump-rtl-peephole2
Dump nach dem Gucklochpass.
-fdump-rtl-postreload
Dump nach Optimierungen nach dem Neuladen.
-fdump-rtl-pro_and_epilogue
Dump nach dem Generieren der Funktionsprologe und Epiloge.
-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 und -fdump-rtl-sched2 Dumping nach dem Basisblock aktivieren
Terminplanung geht.
-fdump-rtl-ree
Dump nach Eliminierung von Vorzeichen/Null-Erweiterung.
-fdump-rtl-seqabstr
Dump nach gemeinsamer Sequenzerkennung.
-fdump-rtl-kürzen
Dump nach dem Kürzen von Ästen.
-fdump-rtl-geschwister
Dump nach Optimierungen für Geschwisteranrufe.
-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
Diese Optionen ermöglichen das Dumping nach fünf Runden der Befehlsaufteilung.
-fdump-rtl-sms
Dump nach Modulo-Scheduling. Dieser Pass wird nur auf einigen Architekturen ausgeführt.
-fdump-rtl-stack
Dump nach der Konvertierung von GCCs "Flat Register File"-Registern in die x87's
stapelähnliche Register. Dieser Pass wird nur auf x86-Varianten ausgeführt.
-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 und -fdump-rtl-subreg2 Dumping nach den beiden Subreg aktivieren
Erweiterung geht.
-fdump-rtl-nichthare
Dump, nachdem alle rtl freigegeben wurden.
-fdump-rtl-vartrack
Dump nach variablem Tracking.
-fdump-rtl-vregs
Dump nach der Konvertierung von virtuellen Registern in harte Register.
-fdump-rtl-Web
Dump nach Live Range Splitting.
-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Diese Dumps sind definiert, erzeugen aber immer leere Dateien.
-in
-fdump-rtl-all
Erstellen Sie alle oben aufgeführten Dumps.
-da Kommentieren Sie die Assembler-Ausgabe mit verschiedenen Debugging-Informationen.
-dd Alle Makrodefinitionen am Ende der Vorverarbeitung zusätzlich zu normal ausgeben
Ausgabe.
-dH Erstellen Sie einen Core-Dump, wenn ein Fehler auftritt.
-dp Kommentieren Sie die Assembler-Ausgabe mit einem Kommentar, der angibt, welches Muster und
alternativ verwendet wird. Die Länge jeder Anweisung wird ebenfalls gedruckt.
-dP Geben Sie die RTL in der Assembler-Ausgabe als Kommentar vor jeder Anweisung aus. Ebenfalls
schaltet sich ein -dp Anmerkung.
-dx Generieren Sie einfach RTL für eine Funktion, anstatt sie zu kompilieren. Wird normalerweise mit verwendet
-fdump-rtl-expand.
-fdump-noaddr
Unterdrücken Sie beim Ausführen von Debug-Dumps die Adressausgabe. Dies macht es möglich,
Verwenden Sie diff zum Debuggen von Dumps für Compileraufrufe mit verschiedenen Compiler-Binärdateien
und/oder andere Text-/Bss-/Daten-/Heap-/Stack-/DSO-Startorte.
-freport-Fehler
Sammeln und speichern Sie Debug-Informationen in einer temporären Datei, wenn ICE im C/C++-Compiler
aufgetreten ist.
-fdump-unnummeriert
Unterdrücken Sie beim Ausführen von Debug-Dumps die Befehlsnummern und die Adressausgabe. Dies
macht es praktikabler, diff zum Debuggen von Dumps für Compileraufrufe mit zu verwenden
verschiedene Optionen, insbesondere mit und ohne -g.
-fdump-unnummerierte-links
Beim Debuggen von Dumps (siehe -d Option oben), Anweisungsnummern für die unterdrücken
Links zu den vorherigen und nächsten Anweisungen in einer Sequenz.
-fdump-Übersetzungseinheit (nur C++)
-fdump-Übersetzungseinheit-Optionen (nur C++)
Geben Sie eine Darstellung der Baumstruktur für die gesamte Übersetzungseinheit in eine Datei aus.
Der Dateiname entsteht durch Anhängen .Du zum Quelldateinamen, und die Datei ist
im selben Verzeichnis wie die Ausgabedatei erstellt. Wenn die -Optionen Formular verwendet wird,
Optionen steuert die Details des Dumps wie für die -fdump-Baum Optionen.
-fdump-Klassenhierarchie (nur C++)
-fdump-class-hierarchy-Optionen (nur C++)
Geben Sie eine Darstellung der Hierarchie und des virtuellen Funktionstabellen-Layouts jeder Klasse in a . aus
Datei. Der Dateiname entsteht durch Anhängen .Klasse auf den Quelldateinamen und die Datei
wird im selben Verzeichnis wie die Ausgabedatei erstellt. Wenn die -Optionen Formular verwendet wird,
Optionen steuert die Details des Dumps wie für die -fdump-Baum Optionen.
-fdump-ipa-wechseln
Steuern Sie das Dumping in verschiedenen Stadien des interprozeduralen Analyse-Sprachbaums, um a
Datei. Der Dateiname wird durch Anhängen eines Switch-spezifischen Suffixes an die Quelle generiert
Dateiname, und die Datei wird im selben Verzeichnis wie die Ausgabedatei erstellt. Die
Folgende Dumps sind möglich:
alle Aktiviert alle verfahrensübergreifenden Analyse-Dumps.
cgraph
Speichert Informationen über die Optimierung von Aufrufgraphen, das Entfernen nicht verwendeter Funktionen und
Inlining-Entscheidungen.
Inline-
Dump nach dem Inlining der Funktion.
-fdump-pässe
Löschen Sie die Liste der Optimierungsdurchgänge, die vom aktuellen ein- und ausgeschaltet werden
Befehlszeilenoptionen.
-fdump-Statistik-zu erhalten
Aktivieren und kontrollieren Sie das Dumping von Pass-Statistiken in einer separaten Datei. Der Dateiname ist
erzeugt durch Anhängen eines Suffixes mit der Endung .Statistiken auf den Quelldateinamen und die
Datei wird im selben Verzeichnis wie die Ausgabedatei erstellt. Wenn die -zu erhalten Form ist
benutzt, -Statistiken bewirkt, dass Zähler über die gesamte Kompilierungseinheit summiert werden, während
-Einzelheiten gibt jedes Ereignis aus, wenn die Pässe sie generieren. Die Standardeinstellung ohne Option ist
Zähler für jede kompilierte Funktion zu summieren.
-fdump-Baum-wechseln
-fdump-Baum-wechseln-Optionen
-fdump-Baum-wechseln-Optionen=Dateinamen
Steuern Sie das Dumping in verschiedenen Stadien der Verarbeitung des Zwischensprachenbaums, um
eine Datei. Der Dateiname wird durch Anhängen eines switchspezifischen Suffixes an das
Quelldateiname, und die Datei wird im selben Verzeichnis wie die Ausgabedatei erstellt. In
Bei =Dateinamen Option wird der Dump in der angegebenen Datei anstelle des auto ausgegeben
benannte Dump-Dateien. Wenn die -Optionen Formular verwendet wird, Optionen ist eine Liste von - getrennt
Optionen, die die Details des Dumps steuern. Nicht alle Optionen gelten für alle
Deponien; diejenigen, die nicht aussagekräftig sind, werden ignoriert. Folgende Optionen stehen zur Verfügung
Adresse
Geben Sie die Adresse jedes Knotens aus. Normalerweise ist dies nicht sinnvoll, da es sich ändert
je nach Umgebung und Quelldatei. Seine primäre Verwendung ist zum Binden von a
dump-Datei mit einer Debug-Umgebung.
asmname
Wenn "DECL_ASSEMBLER_NAME" für einen bestimmten Decl gesetzt wurde, verwenden Sie das im Dump
statt "DECL_NAME". Sein Hauptzweck ist die Benutzerfreundlichkeit, die rückwärts von
verstümmelte Namen in der Assembly-Datei.
schlank
Beim Dumping von Front-End-Zwischendarstellungen das Dumping von Mitgliedern von verhindern
einen Geltungsbereich oder Hauptteil einer Funktion, nur weil dieser Geltungsbereich erreicht wurde. Nur
entsorgen Sie solche Elemente, wenn sie über einen anderen Pfad direkt erreichbar sind.
Beim Abladen von hübsch bedruckten Bäumen verhindert diese Option das Abladen der Leichen von
Kontrollstrukturen.
Drucken Sie beim Ausgeben von RTL die RTL in schlanker (verdichteter) Form anstelle der Standardform
LISP-ähnliche Darstellung.
roh Drucken Sie eine Rohdarstellung des Baums. Standardmäßig werden Bäume hübsch gedruckt in
eine C-ähnliche Darstellung.
Details
Aktivieren Sie detailliertere Dumps (wird nicht von jeder Dump-Option berücksichtigt). Beinhaltet auch
Informationen aus den Optimierungsdurchläufen.
Statistik
Aktiviere das Dumping verschiedener Statistiken über den Pass (wird nicht von jedem Dump berücksichtigt .)
Möglichkeit).
Blöcke
Aktivieren Sie die Anzeige grundlegender Blockgrenzen (in Raw-Dumps deaktiviert).
Graph
Für jede der anderen angegebenen Dump-Dateien (-fdump-rtl-passieren), entsorgen a
Darstellung des Kontrollflussdiagramms geeignet zur Anzeige mit GraphViz to
file.passid.pass.dot. Jede Funktion in der Datei wird als Untergraph gedruckt,
damit GraphViz sie alle in einem einzigen Plot rendern kann.
Diese Option funktioniert derzeit nur für RTL-Dumps, und die RTL wird immer in
schlanke Form.
Vops
Aktivieren Sie die Anzeige virtueller Operanden für jede Anweisung.
Linie Nr
Aktivieren Sie die Anzeige von Zeilennummern für Anweisungen.
uid Aktivieren Sie die Anzeige der eindeutigen ID ("DECL_UID") für jede Variable.
ausführlich
Aktivieren Sie das Anzeigen des Tree-Dumps für jede Anweisung.
eh Aktivieren Sie die Anzeige der EH-Regionsnummer, die jede Anweisung enthält.
scev
Aktivieren Sie die Anzeige von Details zur Skalarentwicklungsanalyse.
optimiert
Anzeige von Optimierungsinformationen aktivieren (nur in bestimmten Durchgängen verfügbar).
vermisst
Aktivieren Sie die Anzeige verpasster Optimierungsinformationen (nur in bestimmten Durchgängen verfügbar).
beachten
Aktivieren Sie weitere detaillierte Optimierungsinformationen (nur in bestimmten Durchgängen verfügbar).
=Dateinamen
Anstelle einer automatisch benannten Dump-Datei, Ausgabe in den angegebenen Dateinamen. Die Datei
Namen stdout und stderr werden speziell behandelt und gelten als bereits geöffnet
Standard-Streams. Zum Beispiel,
gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr-Datei.c
gibt Vectorizer-Dump in . aus foo.dump, während der PRE-Dump auf ausgegeben wird stderr.
Wenn zwei widersprüchliche Dump-Dateinamen für denselben Durchgang angegeben werden, dann letzterer
Option überschreibt die vorherige.
alle Alle Optionen aktivieren, außer roh, schlank, ausführlich und Linie Nr.
optall
Schalten Sie alle Optimierungsoptionen ein, z. optimiert, vermisst und beachten.
Folgende Baumdeponien sind möglich:
Original
Dump vor jeder baumbasierten Optimierung, um Datei.Original.
optimiert
Nach der baumbasierten Optimierung ausgeben, um Datei.optimiert.
gimp
Geben Sie jede Funktion vor und nach dem Gimplification-Durchgang in eine Datei aus. Die Datei
Name entsteht durch Anhängen .gimpl zum Quelldateinamen.
cfg Geben Sie das Kontrollflussdiagramm jeder Funktion in eine Datei aus. Der Dateiname wird erstellt von
anhängen .cfg zum Quelldateinamen.
ch Deponieren Sie jede Funktion, nachdem Sie die Loop-Header kopiert haben. Der Dateiname entsteht durch Anhängen
. Ch zum Quelldateinamen.
ssa Geben Sie SSA-bezogene Informationen in eine Datei aus. Der Dateiname entsteht durch Anhängen .SSSA
zum Quelldateinamen.
alias
Dump-Aliasing-Informationen für jede Funktion. Der Dateiname entsteht durch Anhängen
.alias zum Quelldateinamen.
ccp Dump jede Funktion nach CCP. Der Dateiname entsteht durch Anhängen .ccp zu den
Name der Quelldatei.
storeccp
Dump jede Funktion nach STORE-CCP. Der Dateiname entsteht durch Anhängen .storeccp
zum Quelldateinamen.
vor Dump-Bäume nach teilweiser Redundanzbeseitigung. Der Dateiname wird erstellt von
anhängen .Vor zum Quelldateinamen.
Fr. Dump-Bäume nach vollständiger Redundanzbeseitigung. Der Dateiname entsteht durch Anhängen
.frei zum Quelldateinamen.
kopieren
Dump-Bäume nach der Kopienausbreitung. Der Dateiname entsteht durch Anhängen .copyprop
zum Quelldateinamen.
store_copyprop
Dump-Bäume nach der Speicherkopie-Propagierung. Der Dateiname entsteht durch Anhängen
.store_copyprop zum Quelldateinamen.
dce Geben Sie jede Funktion nach der Eliminierung des toten Codes aus. Der Dateiname wird erstellt von
anhängen .dce zum Quelldateinamen.
sra Löschen Sie jede Funktion, nachdem Sie skalare Ersetzungen von Aggregaten durchgeführt haben. Die Datei
Name entsteht durch Anhängen .sra zum Quelldateinamen.
Waschbecken
Geben Sie jede Funktion aus, nachdem Sie Code-Senken durchgeführt haben. Der Dateiname wird erstellt von
anhängen .Waschbecken zum Quelldateinamen.
dom Geben Sie jede Funktion aus, nachdem Sie Dominatorbaum-Optimierungen angewendet haben. Der Dateiname ist
gemacht durch Anhängen .dom zum Quelldateinamen.
dse Deponieren Sie jede Funktion, nachdem Sie die Dead-Store-Eliminierung angewendet haben. Der Dateiname ist gebildet
durch anhängen .dse zum Quelldateinamen.
phiopt
Geben Sie jede Funktion nach der Optimierung von PHI-Knoten in geraden Code aus. Die Datei
Name entsteht durch Anhängen φopt zum Quelldateinamen.
Vortrieb
Geben Sie jede Funktion nach der Vorwärtspropagierung von Einwegvariablen aus. Der Dateiname
erfolgt durch Anhängen .forwprop zum Quelldateinamen.
kopierenumbenennen
Geben Sie jede Funktion aus, nachdem Sie die Optimierung der Kopierumbenennung angewendet haben. Der Dateiname ist
gemacht durch Anhängen .kopierenumbenennen zum Quelldateinamen.
Nr Geben Sie jede Funktion aus, nachdem Sie die benannte Rückgabewertoptimierung auf generisch angewendet haben
Bäume. Der Dateiname entsteht durch Anhängen .nrv zum Quelldateinamen.
vect
Geben Sie jede Funktion aus, nachdem Sie die Vektorisierung von Schleifen angewendet haben. Der Dateiname ist gebildet
durch anhängen .vect zum Quelldateinamen.
slp Geben Sie jede Funktion aus, nachdem Sie die Vektorisierung von Basisblöcken angewendet haben. Der Dateiname ist
gemacht durch Anhängen .slp zum Quelldateinamen.
vrp Dump jeder Funktion nach Value Range Propagation (VRP). Der Dateiname wird erstellt von
anhängen .vrp zum Quelldateinamen.
alle Aktivieren Sie alle verfügbaren Tree-Dumps mit den in dieser Option bereitgestellten Flags.
-fopt-info
-fopt-info-Optionen
-fopt-info-Optionen=Dateinamen
Steuert Optimierungs-Dumps aus verschiedenen Optimierungsdurchgängen. Wenn die -Optionen Form ist
benutzt, Optionen ist eine Liste von - getrennte Optionsschlüsselwörter zur Auswahl der Dump-Details und
Optimierungen.
Die Optionen lassen sich in zwei Gruppen einteilen: Optionen, die die Ausführlichkeit der
dump und Optionen, die beschreiben, welche Optimierungen eingeschlossen werden sollen. Die Optionen von
beide Gruppen können frei gemischt werden, da sie sich nicht überlappen. Im Falle von
Bei Konflikten überschreiben die späteren Optionen die früheren Optionen in der Befehlszeile.
Die folgenden Optionen steuern die Ausführlichkeit des Dumps:
optimiert
Informationen drucken, wenn eine Optimierung erfolgreich angewendet wurde. Es liegt an einem Pass
zu entscheiden, welche Informationen relevant sind. Zum Beispiel übergibt der Vektorisierer print
der Quellort von Schleifen, die erfolgreich vektorisiert wurden.
vermisst
Drucken Sie Informationen über verpasste Optimierungen. Individuelle Pässe kontrollieren die
Informationen, die in die Ausgabe aufgenommen werden sollen.
beachten
Ausführliche Informationen zu Optimierungen ausgeben, z. B. bestimmte Transformationen,
ausführlichere Meldungen zu Entscheidungen etc.
alle Drucken Sie detaillierte Optimierungsinformationen. Das beinhaltet optimiert, vermisst und
beachten.
Eines oder mehrere der folgenden Optionsschlüsselwörter können verwendet werden, um eine Gruppe von
Optimierungen:
ipa Aktivieren Sie Dumps von allen interprozeduralen Optimierungen.
Schleife
Aktivieren Sie Dumps von allen Schleifenoptimierungen.
Inline-
Aktivieren Sie Dumps von allen Inlining-Optimierungen.
vec Aktivieren Sie Dumps von allen Vektorisierungsoptimierungen.
optall
Dumps von allen Optimierungen aktivieren. Dies ist eine Obermenge der Optimierungsgruppen
oben aufgelistet.
If Optionen weggelassen wird, ist es standardmäßig optimiert-optall, was bedeutet, alle Infos zu entsorgen
über erfolgreiche Optimierungen aus allen Pässen.
Besitzt das Dateinamen bereitgestellt wird, sind die Dumps aller anwendbaren Optimierungen
verkettet in die Dateinamen. Andernfalls wird der Dump ausgegeben auf stderr. Obwohl
mehrere -fopt-info Optionen werden akzeptiert, nur eine davon kann a . enthalten Dateinamen. Wenn
Wenn andere Dateinamen angegeben werden, werden alle bis auf die erste dieser Optionen ignoriert.
Beachten Sie, dass die Ausgabe Dateinamen wird bei mehreren Übersetzungseinheiten überschrieben. Wenn
eine kombinierte Ausgabe von mehreren Übersetzungseinheiten erwünscht ist, stderr sollte benutzt werden
stattdessen.
Im folgenden Beispiel wird die Optimierungsinfo ausgegeben an stderr:
gcc -O3 -fopt-info
Dieses Beispiel:
gcc -O3 -fopt-info-missed=missed.all
gibt einen Bericht über verpasste Optimierungen von allen Durchgängen aus in verpasst.all, und das hier:
gcc -O2 -ftree-vectorize -fopt-info-vec-missed
druckt Informationen über verpasste Optimierungsmöglichkeiten aus Vektorisierungsdurchgängen
on stderr. Beachten Sie, dass -fopt-info-vec-verpasst entspricht -FOPT-INFO-MISSED-VEC.
Als weiteres Beispiel
gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
gibt Informationen über verpasste Optimierungen sowie optimierte Standorte von allen aus
das Inlining geht in inline.txt.
Bedenken Sie abschließend:
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
Hier die beiden Ausgabedateinamen vec.miss und Schleife.opt sind in Konflikt, da nur einer
Ausgabedatei ist erlaubt. In diesem Fall wird nur die erste Option wirksam und die
nachfolgende Optionen werden ignoriert. Also nur vec.miss produziert wird, die Deponien enthält
vom Vectorizer über verpasste Gelegenheiten.
-frandom-Seed=Anzahl
Diese Option bietet einen Seed, den GCC anstelle von Zufallszahlen bei der Generierung verwendet
bestimmte Symbolnamen, die in jeder kompilierten Datei unterschiedlich sein müssen. Es ist auch
Wird verwendet, um einzigartige Stempel in Coverage-Datendateien und die Objektdateien zu platzieren, die produzieren
Sie. Du kannst den ... benutzen -frandom-samen Möglichkeit, reproduzierbare identische Objekte herzustellen
Dateien.
Die Anzahl sollte für jede kompilierte Datei unterschiedlich sein.
-fsched-verbose=n
Bei Zielen, die Instruktionsplanung verwenden, steuert diese Option die Menge an
Debugging-Ausgabe, die der Scheduler ausgibt. Diese Informationen werden in Standardfehler geschrieben,
es sei denn -fdump-rtl-sched1 or -fdump-rtl-sched2 angegeben ist, dann wird es ausgegeben
zur üblichen Dump-Listing-Datei, .sched1 or .sched2 bzw. Jedoch für n
größer als neun, wird die Ausgabe immer mit Standardfehler gedruckt.
Für n größer als null, -fsched-ausführlich gibt die gleichen Informationen aus wie
-fdump-rtl-sched1 und -fdump-rtl-sched2. For n größer als eins, gibt es auch basic aus
Blockwahrscheinlichkeiten, detaillierte Bereitschaftslisteninformationen und Einheiten-/Insn-Informationen. Zum n
größer als zwei, enthält RTL am Abbruchpunkt, Kontrollfluss- und Regionsinformationen. Und
für n über vier, -fsched-ausführlich enthält auch Abhängigkeitsinformationen.
-Save-Temps
-save-temps=cwd
Speichern Sie die üblichen "temporären" Zwischendateien dauerhaft; lege sie in den Strom
Verzeichnis und benennen Sie sie basierend auf der Quelldatei. So kompilieren foo.c mit -c
-Save-Temps produziert Dateien foo.i und foo.s, sowie foo.o. Dies schafft eine
vorverarbeitet foo.i Ausgabedatei, obwohl der Compiler jetzt normalerweise eine
integrierter Präprozessor.
Bei Verwendung in Kombination mit dem -x Befehlszeilenoption, -Save-Temps ist sinnvoll
genug, um zu vermeiden, dass eine Eingabequelldatei mit der gleichen Erweiterung wie an . überschrieben wird
Zwischendatei. Die entsprechende Zwischendatei erhalten Sie durch Umbenennen
die Quelldatei vor der Verwendung -Save-Temps.
Wenn Sie GCC parallel aufrufen, kompilieren Sie mehrere verschiedene Quelldateien, die eine gemeinsame
gemeinsamer Basisname in verschiedenen Unterverzeichnissen oder dieselbe Quelldatei kompiliert für
mehrere Ausgabeziele, ist es wahrscheinlich, dass die verschiedenen parallelen Compiler
sich gegenseitig stören und die temporären Dateien überschreiben. Zum Beispiel:
gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&
Kann dazu führen foo.i und foo.o von beiden Compilern gleichzeitig beschrieben werden.
-save-temps=obj
Speichern Sie die üblichen "temporären" Zwischendateien dauerhaft. Wenn die -o Option verwendet wird,
die temporären Dateien basieren auf der Objektdatei. Wenn die -o Option nicht verwendet wird, die
-save-temps=obj Schalter verhält sich wie -Save-Temps.
Beispielsweise:
gcc -save-temps=obj -c foo.c
gcc -save-temps=obj -c bar.c -o dir/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar
schafft foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s und
dir2/yfoobar.o.
-Zeit[=Datei]
Melden Sie die CPU-Zeit, die von jedem Unterprozess in der Kompilierungssequenz benötigt wird. Für C
Quelldateien, dies ist der eigentliche Compiler und der Assembler (plus der Linker, wenn das Verlinken
getan).
Ohne Angabe einer Ausgabedatei sieht die Ausgabe so aus:
#cc1 0.12 0.01
# als 0.00 0.01
Die erste Zahl in jeder Zeile ist die "Benutzerzeit", d. h. die Zeit, die für die Ausführung der
Programm selbst. Die zweite Zahl ist die "Systemzeit", die Zeit, die für die Ausführung des Betriebs benötigt wird
Systemroutinen im Namen des Programms. Beide Zahlen sind in Sekunden angegeben.
Bei Angabe einer Ausgabedatei wird die Ausgabe an die benannte Datei angehängt,
und es sieht so aus:
0.12 0.01 cc1
0.00 0.01 as
Die "Benutzerzeit" und die "Systemzeit" werden vor den Programmnamen verschoben und die
an das Programm übergebene Optionen werden angezeigt, damit man später erkennen kann, um welche Datei es sich handelt
kompiliert wird und mit welchen Optionen.
-fvar-tracking
Führen Sie einen variablen Tracking-Pass aus. Es berechnet, wo Variablen an jeder Position gespeichert werden
in Code. Es werden dann bessere Debugging-Informationen generiert (wenn die Debugging-Informationen
Format unterstützt diese Informationen).
Sie ist beim Kompilieren mit Optimierung standardmäßig aktiviert (-Du, -O, -O2, ...),
Debugging-Informationen (-g) und das Debug-Info-Format unterstützt dies.
-fvar-Tracking-Zuweisungen
Kommentieren Sie Zuweisungen zu Benutzervariablen zu Beginn der Kompilierung und versuchen Sie, sie zu übertragen
die Anmerkungen durch die gesamte Zusammenstellung bis zum Ende, in einem Versuch
um Debug-Informationen zu verbessern und gleichzeitig zu optimieren. Gebrauch von -zwerg-4 wird mit empfohlen
mit ihm.
Es kann auch dann aktiviert werden, wenn Var-Tracking deaktiviert ist. In diesem Fall sind Anmerkungen
erstellt und gepflegt, aber am Ende verworfen. Dieses Flag ist standardmäßig aktiviert
Zusammen mit -fvar-tracking, außer wenn die selektive Planung aktiviert ist.
-fvar-tracking-zuweisungen-umschalten
Toggle -fvar-Tracking-Zuweisungenauf die gleiche Weise wie -gtoggle schaltet ein -g.
-print-dateiname=Bibliothek
Drucken Sie den vollständigen absoluten Namen der Bibliotheksdatei Bibliothek das würde verwendet werden, wenn
verlinken --- und nichts anderes tun. Mit dieser Option kompiliert oder verlinkt GCC nicht
irgendetwas; es druckt nur den Dateinamen.
-Multi-Verzeichnis drucken
Geben Sie den Verzeichnisnamen aus, der der von anderen Schaltern ausgewählten Multilib entspricht
in der Befehlszeile vorhanden. Dieses Verzeichnis soll existieren in GCC_EXEC_PREFIX.
-print-multi-lib
Drucken Sie die Zuordnung von Multilib-Verzeichnisnamen zu Compilerschaltern, die sie aktivieren.
Der Verzeichnisname wird von den Schaltern getrennt durch ;, und jeder Schalter beginnt mit einem
@ anstatt der -, ohne Leerzeichen zwischen mehreren Schaltern. Das soll
einfache Verarbeitung der Schale.
-print-multi-os-Verzeichnis
Geben Sie den Pfad zu den OS-Bibliotheken für die ausgewählte Multilib relativ zu einigen aus lib
Unterverzeichnis. Wenn OS-Bibliotheken im lib Unterverzeichnis und keine Multilibs
verwendet werden, ist dies normalerweise nur ., wenn OS-Bibliotheken vorhanden sind in libsuffix Geschwister
Verzeichnisse dies druckt zB ../lib64, ../ lib or ../lib32, oder wenn Betriebssystembibliotheken
anwesend in lib/Unterdir Unterverzeichnisse es druckt zB amd64, sparcv9 or ev6.
-print-multiarch
Drucken Sie den Pfad zu den Betriebssystembibliotheken für den ausgewählten Multiarch relativ zu einigen lib
Unterverzeichnis.
-print-prog-name=Programm
Like -Dateiname drucken, sucht aber nach einem Programm wie cpp.
-print-libgcc-Dateiname
Das gleiche wie -print-Dateiname=libgcc.a.
Dies ist nützlich, wenn Sie verwenden -nostdlib or -nodefaultlibs aber du möchtest dich verlinken
libgcc.a. Du kannst tun:
gcc -nostdlib ... `gcc -print-libgcc-Dateiname`
-Suchverzeichnisse drucken
Drucken Sie den Namen des konfigurierten Installationsverzeichnisses und eine Liste der Programme und
Bibliotheksverzeichnisse gcc sucht --- und nichts anderes tun.
Dies ist nützlich, wenn gcc druckt die Fehlermeldung Installation Problem, kann keine exec
cpp0: Nein so Datei or Verzeichnis. Um dies zu beheben, müssen Sie entweder setzen cpp0 und der
andere Compilerkomponenten, bei denen gcc erwartet, sie zu finden, oder Sie können die
variable Umgebung GCC_EXEC_PREFIX in das Verzeichnis, in dem Sie sie installiert haben. Nicht
vergiss den nachzug /.
-Print-Sysroot
Drucken Sie das Ziel-Sysroot-Verzeichnis, das während der Kompilierung verwendet wird. Dies ist das
Ziel-Sysroot, das entweder zum Zeitpunkt der Konfiguration oder mit dem -Sysroot Option,
möglicherweise mit einem zusätzlichen Suffix, das von den Kompilierungsoptionen abhängt. Wenn kein Ziel
sysroot angegeben ist, gibt die Option nichts aus.
-print-sysroot-headers-suffix
Geben Sie das Suffix aus, das der Ziel-Sysroot bei der Suche nach Headern hinzugefügt wurde, oder geben Sie ein
Fehler, wenn der Compiler nicht mit einem solchen Suffix konfiguriert ist --- und nichts tun
sonst.
-Kippmaschine
Drucken Sie den Zielcomputer des Compilers (z. i686-pc-linux-gnu)---und tu es nicht
noch etwas.
-Dumpversion
Geben Sie die Compiler-Version aus (z. B. 3.0) --- und tun Sie nichts anderes.
-Dumpspecs
Drucken Sie die eingebauten Spezifikationen des Compilers --- und tun Sie nichts anderes. (Dies wird verwendet, wenn
GCC selbst wird gebaut.)
-fno-eliminiere-nicht verwendete-debug-Typen
Normalerweise vermeidet GCC beim Erstellen von DWARF 2-Ausgaben die Erstellung von Debug-Symbolausgaben für
Typen, die in der zu kompilierenden Quelldatei nirgendwo verwendet werden. Manchmal ist es nützlich
damit GCC Debugging-Informationen für alle in einer Kompilierungseinheit deklarierten Typen ausgibt,
unabhängig davon, ob sie tatsächlich in dieser Kompilationseinheit verwendet werden oder nicht, z
Beispiel, wenn Sie im Debugger einen Wert in einen Typ umwandeln möchten, der nicht wirklich ist
in Ihrem Programm verwendet (aber deklariert). Häufiger führt dies jedoch zu a
erheblichen Platzverschwendung.
Optionen Dass Control OPTIMIERUNG
Diese Optionen steuern verschiedene Arten von Optimierungen.
Ohne Optimierungsmöglichkeit besteht das Ziel des Compilers darin, die Kosten für die Kompilierung zu reduzieren
und damit das Debuggen die erwarteten Ergebnisse liefert. Aussagen sind unabhängig: wenn Sie
Stoppen Sie das Programm mit einem Breakpoint zwischen den Anweisungen, Sie können dann einen neuen Wert zuweisen
eine beliebige Variable oder ändern Sie den Programmzähler in eine andere Anweisung in der Funktion und erhalten Sie
genau die Ergebnisse, die Sie vom Quellcode erwarten.
Durch das Aktivieren von Optimierungsflags versucht der Compiler, die Leistung zu verbessern und/oder
Codegröße auf Kosten der Kompilierungszeit und möglicherweise der Möglichkeit, die Fehler zu beheben
Der Compiler führt die Optimierung basierend auf den Kenntnissen des Programms durch.
Das gleichzeitige Kompilieren mehrerer Dateien in einen einzigen Ausgabedateimodus ermöglicht dem Compiler die Verwendung von
Informationen, die aus allen Dateien bei der Zusammenstellung jeder von ihnen gewonnen werden.
Nicht alle Optimierungen werden direkt durch ein Flag gesteuert. Nur Optimierungen mit a
Flag sind in diesem Abschnitt aufgeführt.
Die meisten Optimierungen werden nur aktiviert, wenn ein -O level wird in der Kommandozeile eingestellt. Andernfalls
sie sind deaktiviert, auch wenn einzelne Optimierungsflags angegeben sind.
Abhängig vom Ziel und der Konfiguration von GCC kann ein etwas anderer Satz von
Optimierungen können jeweils aktiviert werden -O Niveau als die hier aufgeführten. Sie können GCC aufrufen
mit -Q --help=Optimierer um den genauen Satz von Optimierungen herauszufinden, die unter aktiviert sind
jede Ebene.
-O
-O1 Optimieren. Die Optimierung der Kompilierung benötigt etwas mehr Zeit und viel mehr Speicher für
eine große Funktion.
Mit -O, versucht der Compiler, die Codegröße und die Ausführungszeit zu reduzieren, ohne dies auszuführen
alle Optimierungen, die viel Kompilierungszeit in Anspruch nehmen.
-O aktiviert die folgenden Optimierungsflags:
-fauto-inc-dez -fbranch-count-reg -fcombine-Stack-Anpassungen -fvergleiche-elim
-fcprop-register -fdce -fdefer-pop -fdelayed-branch -fdse -fforward-propagieren
-fguess-Zweig-Wahrscheinlichkeit -fif-conversion2 -fif-Konvertierung
-finline-Funktionen-einmal genannt -fipa-pure-const -fipa-Profil -fipa-Referenz
-fmerge-Konstanten -fmove-loop-invarianten -fshrink-wrap -fsplit-breite Typen
-ftree-bit-ccp -ftree-ccp -fssa-phiopt -ftree-ch -ftree-copy-prop -ftree-copyrename
-ftree-dce -Ftree-Dominator-Opts -ftree-dse -ftree-forwprop -frei -ftree-phiprop
-ftree-waschbecken -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -Spaß-zu-einer-Zeit
-O schaltet sich auch ein -fomit-Frame-Zeiger an Maschinen, wo dies nicht stört
mit Debugging.
-O2 Optimieren Sie noch mehr. GCC führt fast alle unterstützten Optimierungen durch, die dies nicht tun
einen Kompromiss zwischen Raum und Geschwindigkeit einschließen. Verglichen mit -O, diese Option erhöht beide
Kompilierungszeit und die Leistung des generierten Codes.
-O2 schaltet alle Optimierungsflags ein, die durch . angegeben sind -O. Es schaltet auch Folgendes ein
Optimierungsflags: -fThread-Sprünge -falign-Funktionen -Falign-Sprünge -falign-Schleifen
-falign-Etiketten -fcaller-speichert -fCrossspringen -fcse-follow-jumps -fcse-skip-blöcke
-fdelete-null-pointer-checks -fdevirtualisieren -fdevirtualize-spekulativ
-Kostengünstige-Optimierungen -fgcse -fgcse-lm -fhoist-angrenzende-Lasten
-finline-kleine-Funktionen -findirect-Inlining -fipa-cp -fipa-cp-Ausrichtung -fipa-sra
-fipa-icf -fisolate-fehlerhafte-Pfade-dereferenzieren -flra-remat -foptimize-Geschwisteranrufe
-foptimize-strlen -fpartielles Inlining -fGuckloch2 -freorder-Blöcke
-Blöcke-und-Partition neu bestellen -freorder-Funktionen -frerun-cse-after-loop
-fsched-interblock -fsched-spez -fschedule-insns -fschedule-insns2 -fstrict-aliasing
-fstrict-Überlauf -ftree-eingebauter-Aufruf-dce -Ftree-Switch-Umwandlung -ftree-tail-merge
-ftree-pre -ftree-vrp -fipa-ra
Bitte beachten Sie die Warnung unter -fgcse über das Aufrufen -O2 auf Programmen, die berechnete
gehe zu S.
HINWEIS: In Ubuntu 8.10 und späteren Versionen -D_FORTIFY_SOURCE=2 ist standardmäßig eingestellt und ist
aktiviert, wenn -O auf 2 oder höher eingestellt ist. Dies ermöglicht zusätzliche Kompilierzeit und
Laufzeitprüfungen für mehrere libc-Funktionen. Zum Deaktivieren geben Sie entweder
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.
-O3 Optimieren Sie noch mehr. -O3 schaltet alle von . angegebenen Optimierungen ein -O2 und schaltet sich auch ein
-finline-Funktionen, -Funswitch-Schleifen, -fpredictive-commoning, -fgcse-after-reload,
-ftree-loop-vektorisieren, -ftree-loop-patterns verteilen, -ftree-slp-vektorisieren,
-fvect-cost-model, -ftree-partial-pre und -fipa-cp-klon Optionen.
-O0 Reduzieren Sie die Kompilierungszeit und sorgen Sie dafür, dass das Debugging die erwarteten Ergebnisse liefert. Dies ist das
default.
-Du Optimieren Sie die Größe. -Du ermöglicht alle -O2 Optimierungen, die normalerweise nicht steigen
Codegröße. Es führt auch weitere Optimierungen durch, um die Codegröße zu reduzieren.
-Du deaktiviert die folgenden Optimierungsflags: -falign-Funktionen -Falign-Sprünge
-falign-Schleifen -falign-Etiketten -freorder-Blöcke -Blöcke-und-Partition neu bestellen
-fprefetch-loop-arrays
-Ofast
Missachten Sie die strikte Einhaltung von Standards. -Ofast ermöglicht alle -O3 Optimierungen. Es auch
ermöglicht Optimierungen, die nicht für alle standardkonformen Programme gültig sind. Es
schaltet sich ein -ffast-mathe und die Fortran-spezifische -fno-protect-parens und -fstack-Arrays.
-Og Optimieren Sie das Debugging-Erlebnis. -Og ermöglicht Optimierungen, die nicht stören
debuggen. Es sollte die Optimierungsstufe der Wahl für die Standardbearbeitung sein.
Compile-Debug-Zyklus, der ein angemessenes Optimierungsniveau bei gleichzeitiger Wartung bietet
schnelle Kompilierung und eine gute Debugging-Erfahrung.
Wenn Sie mehrere verwenden -O Optionen, mit oder ohne Levelnummern, die letzte Option ist die
eine, die wirksam ist.
Optionen des Formulars -fFlagge spezifizieren maschinenunabhängige Flags. Die meisten Flaggen haben beides
positive und negative Formen; die Negativform von -ffoo is -fno-foo. In der Tabelle unten,
Es ist nur eines der Formulare aufgeführt – dasjenige, das Sie normalerweise verwenden. Du kannst das andere herausfinden
bilden, indem Sie entweder entfernen Nein- oder hinzufügen.
Die folgenden Optionen steuern spezifische Optimierungen. Sie werden entweder aktiviert durch -O
Optionen oder beziehen sich auf solche, die es sind. Sie können die folgenden Flags in den seltenen verwenden
Fälle, in denen eine "Feinabstimmung" der durchzuführenden Optimierungen erwünscht ist.
-fno-aufschieben-pop
Geben Sie immer die Argumente für jeden Funktionsaufruf ein, sobald diese Funktion zurückkehrt. Zum
Maschinen, die nach einem Funktionsaufruf Argumente ausgeben müssen, lässt der Compiler normalerweise
Argumente sammeln sich auf dem Stack für mehrere Funktionsaufrufe an und legen sie alle auf
Einmal.
Auf Stufen deaktiviert -O, -O2, -O3, -Du.
-fforward-propagieren
Führen Sie einen Forward-Propagation-Pass für RTL durch. Der Pass versucht, zwei Anweisungen zu kombinieren
und prüft, ob das Ergebnis vereinfacht werden kann. Wenn das Abrollen der Schleife aktiv ist, zwei Durchgänge
ausgeführt und die zweite wird nach dem Abrollen der Schleife geplant.
Diese Option ist standardmäßig auf Optimierungsstufen aktiviert -O, -O2, -O3, -Du.
-ffp-Vertrag=Stil
-ffp-vertrag=aus deaktiviert die Kontraktion von Gleitkommaausdrücken. -ffp-vertrag=schnell
ermöglicht die Kontraktion von Gleitkommaausdrücken wie das Bilden von fusioniertem Multiply-Add
-Operationen, wenn das Ziel systemeigene Unterstützung dafür hat. -ffp-vertrag=on ermöglicht
Fließkomma-Ausdrucksverkürzung, wenn dies vom Sprachstandard erlaubt ist. Das ist
derzeit nicht umgesetzt und gleich behandelt -ffp-vertrag=aus.
Die Standardeinstellung ist -ffp-vertrag=schnell.
-fomit-Frame-Zeiger
Bewahren Sie den Rahmenzeiger nicht in einem Register für Funktionen auf, die keinen benötigen. Dies
vermeidet die Anweisungen zum Speichern, Einrichten und Wiederherstellen von Rahmenzeigern; es macht auch ein
zusätzliches Register in vielen Funktionen verfügbar. It ebenfalls macht Debugging unmöglich on
einige Maschinen.
Auf einigen Maschinen, wie dem VAX, hat dieses Flag keine Auswirkung, da der Standard
aufrufende Sequenz verarbeitet automatisch den Rahmenzeiger und nichts wird von . gespeichert
so tun, als ob es nicht existiert. Das Maschinenbeschreibungsmakro "FRAME_POINTER_REQUIRED"
steuert, ob ein Zielcomputer dieses Flag unterstützt.
Die Standardeinstellung (wenn nicht auf Größe optimiert) für 32-Bit GNU/Linux x86 und 32-Bit
Darwin x86-Ziele ist -fomit-Frame-Zeiger. Sie können GCC mit dem
--enable-frame-pointer configure-Option, um die Standardeinstellung zu ändern.
Auf Stufen aktiviert -O, -O2, -O3, -Du.
-foptimize-Geschwisteranrufe
Optimieren Sie rekursive Aufrufe von Geschwistern und Tail.
Auf Stufen aktiviert -O2, -O3, -Du.
-foptimize-strlen
Optimieren Sie verschiedene Standard-C-String-Funktionen (zB "strlen", "strchr" oder "strcpy") und
ihre "_FORTIFY_SOURCE"-Gegenstücke in schnellere Alternativen umwandeln.
Auf Stufen aktiviert -O2, -O3.
-fno-inline
Erweitern Sie keine Funktionen inline, außer denen, die mit "always_inline" gekennzeichnet sind
Attribut. Dies ist die Standardeinstellung, wenn nicht optimiert wird.
Einzelne Funktionen können vom Inlining ausgenommen werden, indem sie mit dem "noinline" gekennzeichnet werden
Attribut.
-finline-kleine-Funktionen
Integrieren Sie Funktionen in ihre Aufrufer, wenn ihr Körper kleiner als erwartet ist
Funktionsaufrufcode (damit die Gesamtgröße des Programms kleiner wird). Der Compiler
entscheidet heuristisch, welche Funktionen einfach genug sind, um eine Integration wert zu sein
Hier entlang. Dieses Inlining gilt für alle Funktionen, auch für diejenigen, die nicht inline deklariert sind.
Auf Stufe aktiviert -O2.
-findirect-Inlining
Inline auch indirekte Aufrufe, die zur Kompilierzeit als bekannt erkannt werden dank
vorheriges Inlining. Diese Option hat nur Auswirkungen, wenn Inlining selbst aktiviert ist
von dem -finline-Funktionen or -finline-kleine-Funktionen Optionen.
Auf Stufe aktiviert -O2.
-finline-Funktionen
Berücksichtigen Sie alle Funktionen für das Inlining, auch wenn sie nicht inline deklariert sind. Die
Der Compiler entscheidet heuristisch, welche Funktionen es wert sind, auf diese Weise integriert zu werden.
Wenn alle Aufrufe einer bestimmten Funktion integriert sind und die Funktion deklariert ist
"statisch", dann wird die Funktion normalerweise nicht als eigenständiger Assemblercode ausgegeben.
Auf Stufe aktiviert -O3.
-finline-Funktionen-einmal genannt
Berücksichtigen Sie alle "statischen" Funktionen, die einmal aufgerufen werden, um sie in ihren Aufrufer einzubinden, auch wenn
sie sind nicht mit "inline" gekennzeichnet. Wenn ein Aufruf einer bestimmten Funktion integriert ist, dann wird die
Die Funktion wird nicht als eigenständiger Assemblercode ausgegeben.
Auf Stufen aktiviert -O1, -O2, -O3 und -Du.
-ängstlich-inlining
Inline-Funktionen, die mit "always_inline" gekennzeichnet sind, und Funktionen, deren Körper kleiner erscheint als
den Funktionsaufruf-Overhead früh, bevor Sie dies tun -fprofile-generieren Instrumentierung und
echter Inlining-Pass. Dadurch wird die Profilerstellung erheblich billiger und in der Regel
schnelleres Inlining bei Programmen mit großen Ketten von verschachtelten Wrapper-Funktionen.
Standardmäßig aktiviert.
-fipa-sra
Führen Sie einen interprozeduralen skalaren Austausch von Aggregaten durch, entfernen Sie nicht verwendete Parameter
und Ersetzen von Parametern, die als Referenz übergeben wurden, durch Parameter, die als Wert übergeben wurden.
Auf Stufen aktiviert -O2, -O3 und -Du.
-finline-limit=n
Standardmäßig begrenzt GCC die Größe der Funktionen, die eingebunden werden können. Diese Flagge erlaubt
grobe Kontrolle dieser Grenze. n ist die Größe der Funktionen, die inline eingebunden werden können
Anzahl der Pseudobefehle.
Das Inlining wird tatsächlich durch eine Reihe von Parametern gesteuert, die angegeben werden können
individuell durch Verwendung --param Name=Wertdem „Vermischten Geschmack“. Seine -finline-limit=n Option setzt einige von
diese Parameter wie folgt:
max-inline-insns-single
eingestellt ist n/ 2.
max-inline-insns-auto
eingestellt ist n/ 2.
Siehe unten für eine Dokumentation der einzelnen Parameter, die das Inlining steuern und
für die Voreinstellungen dieser Parameter.
Hinweis: es kann keinen Wert für geben -finline-limit das führt zu einem Standardverhalten.
Hinweis: Pseudoinstruktion stellt in diesem speziellen Kontext eine Zusammenfassung dar
Messung der Funktionsgröße. Es stellt in keiner Weise eine Zählung der Montage dar
Anweisungen und ihre genaue Bedeutung kann sich von einer Version zu einer ändern
eine andere.
-fno-keep-inline-dllexport
Dies ist eine feinere Version von -fkeep-inline-Funktionen, gilt nur für
Funktionen, die mit dem Attribut "dllexport" oder declspec . deklariert werden
-fkeep-inline-Funktionen
Geben Sie in C "statische" Funktionen aus, die "inline" in die Objektdatei deklariert sind, auch wenn
die Funktion wurde in alle ihre Aufrufer integriert. Dieser Schalter hat keinen Einfluss
Funktionen mit der Erweiterung "extern inline" in GNU C90. Geben Sie in C++ alles aus
Inline-Funktionen in die Objektdatei.
-Fekee-statische Konst
Geben Sie Variablen aus, die als "static const" deklariert sind, wenn die Optimierung nicht aktiviert ist, auch wenn die
Variablen werden nicht referenziert.
GCC aktiviert diese Option standardmäßig. Wenn Sie den Compiler zwingen möchten, zu überprüfen, ob a
Variable referenziert wird, unabhängig davon, ob die Optimierung aktiviert ist oder nicht, verwenden Sie
-fno-keep-static-consts .
-fmerge-Konstanten
Versuch, identische Konstanten (String-Konstanten und Gleitkomma-Konstanten) zusammenzuführen
über Kompilierungseinheiten hinweg.
Diese Option ist die Standardeinstellung für die optimierte Kompilierung, wenn Assembler und Linker
unterstütze es. Verwenden -fno-merge-Konstanten dieses Verhalten zu hemmen.
Auf Stufen aktiviert -O, -O2, -O3, -Du.
-fmerge-all-Konstanten
Versuchen Sie, identische Konstanten und identische Variablen zusammenzuführen.
Diese Option impliziert -fmerge-Konstanten. Zusätzlich zu -fmerge-Konstanten fehlen uns die Worte.
berücksichtigt zB auch konstant initialisierte Arrays oder initialisierte konstante Variablen mit
Ganzzahl- oder Gleitkommatypen. Sprachen wie C oder C++ erfordern jede Variable,
Einschließen mehrerer Instanzen derselben Variablen in rekursive Aufrufe, um unterschiedliche
Die Verwendung dieser Option führt zu nicht konformem Verhalten.
-fmodulo-sched
Führen Sie die Swing-Modulo-Planung unmittelbar vor dem ersten Planungsdurchlauf durch. Dies
pass untersucht die innersten Schleifen und ordnet ihre Anweisungen neu, indem sie verschiedene überlappen
Iterationen.
-fmodulo-sched-allow-regmoves
Führen Sie ein aggressiveres SMS-basiertes Modulo-Scheduling mit erlaubten Registerbewegungen durch. Von
Durch Setzen dieses Flags werden bestimmte Anti-Abhängigkeits-Kanten gelöscht, was den
Generierung von Reg-Moves basierend auf der Lebensdaueranalyse. Diese Option ist effektiv
nur mit -fmodulo-sched aktiviert.
-fno-zweigzahl-reg
Verwenden Sie keine "Dekrementieren und Verzweigen"-Anweisungen für ein Zählregister, sondern
Generieren Sie eine Folge von Befehlen, die ein Register dekrementieren, vergleichen Sie es mit
Null, dann verzweigt basierend auf dem Ergebnis. Diese Option ist nur sinnvoll bei
Architekturen, die solche Befehle unterstützen, darunter x86, PowerPC, IA-64 und
S/390.
Standardmäßig aktiviert um -O1 und höher.
Die Standardeinstellung ist -fbranch-count-reg.
-fno-Funktion-cse
Tragen Sie keine Funktionsadressen in Register ein; Machen Sie jede Anweisung, die a . aufruft
konstante Funktion enthalten explizit die Adresse der Funktion.
Diese Option führt zu weniger effizientem Code, aber einigen seltsamen Hacks, die die
Die Assembler-Ausgabe kann durch die durchgeführten Optimierungen verwechselt werden, wenn diese Option aktiviert ist
nicht benutzt.
Die Standardeinstellung ist -ffunction-cse
-fno-null-initialisiert-in-bss
Wenn das Ziel einen BSS-Abschnitt unterstützt, setzt GCC standardmäßig Variablen, die
auf Null in BSS initialisiert. Dies kann im resultierenden Code Platz sparen.
Diese Option deaktiviert dieses Verhalten, da einige Programme explizit auf Variablen angewiesen sind
Gehen Sie zum Datenabschnitt --- zB, damit die resultierende ausführbare Datei die
Anfang dieses Abschnitts und/oder machen Annahmen, die darauf basieren.
Die Standardeinstellung ist -fzero-initialisiert-in-bss.
-fThread-Sprünge
Führen Sie Optimierungen durch, die prüfen, ob ein Sprung zu einer Stelle verzweigt, an der ein anderer
Vergleich mit dem ersten subsumiert gefunden wird. Wenn ja, wird die erste Verzweigung umgeleitet zu
entweder das Ziel der zweiten Abzweigung oder ein direkt darauffolgender Punkt,
abhängig davon, ob die Bedingung als wahr oder falsch bekannt ist.
Auf Stufen aktiviert -O2, -O3, -Du.
-fsplit-breite Typen
Bei Verwendung eines Typs, der mehrere Register belegt, z. B. "long long" auf einem 32-Bit
die Register aufteilen und unabhängig voneinander zuordnen. Das ist normalerweise
generiert besseren Code für diese Typen, kann aber das Debuggen erschweren.
Auf Stufen aktiviert -O, -O2, -O3, -Du.
-fcse-follow-jumps
In Common Subexpression Elimination (CSE) durchsuchen Sie Sprungbefehle, wenn die
Das Sprungziel wird von keinem anderen Weg erreicht. Zum Beispiel, wenn CSE auf
eine "if"-Anweisung mit einer "else"-Klausel, CSE folgt dem Sprung, wenn die Bedingung
getestet ist falsch.
Auf Stufen aktiviert -O2, -O3, -Du.
-fcse-skip-blöcke
Das ist ähnlich wie -fcse-follow-jumps, bewirkt aber, dass CSE Sprüngen folgt, die
bedingt überspringen Blöcke. Wenn CSE auf eine einfache "if"-Anweisung mit no . stößt
Sonst-Klausel, -fcse-skip-blöcke bewirkt, dass CSE dem Sprung um den Körper des folgt
"wenn".
Auf Stufen aktiviert -O2, -O3, -Du.
-frerun-cse-after-loop
Führen Sie die Eliminierung allgemeiner Unterausdrücke erneut aus, nachdem Schleifenoptimierungen durchgeführt wurden.
Auf Stufen aktiviert -O2, -O3, -Du.
-fgcse
Führen Sie einen globalen Eliminierungsdurchgang für allgemeine Unterausdrücke durch. Dieser Pass funktioniert auch
globale Konstante und Kopienausbreitung.
Hinweis: Beim Kompilieren eines Programms mit Computer-Gotos, einer GCC-Erweiterung, erhalten Sie möglicherweise
bessere Laufzeitleistung, wenn Sie die globale Eliminierung von allgemeinen Unterausdrücken deaktivieren
passieren durch Hinzufügen -fno-gcse zur Befehlszeile.
Auf Stufen aktiviert -O2, -O3, -Du.
-fgcse-lm
Wann -fgcse-lm aktiviert ist, versucht die globale Eliminierung von allgemeinen Unterausdrücken zu verschieben
Lasten, die nur von Geschäften in sich selbst getötet werden. Dies ermöglicht eine Schleife mit a
Laden/Speichern-Sequenz, die zu einem Laden außerhalb der Schleife und einem Kopieren/Speichern innerhalb der Schleife geändert werden soll
die Schleife.
Standardmäßig aktiviert, wenn -fgcse aktiviert.
-fgcse-sm
Wann -fgcse-sm aktiviert ist, wird ein Speicherbewegungsdurchlauf nach dem globalen Common ausgeführt
Eliminierung von Unterausdrücken. Dieser Durchgang versucht, Stores aus Schleifen zu entfernen. Wenn benutzt
in Verbindung mit -fgcse-lm, Loops, die eine Load/Store-Sequenz enthalten, können geändert werden
zu einem Laden vor der Schleife und einem Speichern nach der Schleife.
Auf keiner Optimierungsstufe aktiviert.
-fgcse-las
Wann -fgcse-las aktiviert ist, wird der globale allgemeine Unterausdruck-Eliminationsdurchgang
eliminiert redundante Lasten, die nach Speichern an derselben Speicherstelle (beide
Teil- und Vollentlassungen).
Auf keiner Optimierungsstufe aktiviert.
-fgcse-after-reload
Wann -fgcse-after-reload aktiviert ist, wird ein redundanter Lastbeseitigungsdurchgang durchgeführt
nach neu laden. Der Zweck dieses Durchgangs besteht darin, überflüssiges Verschütten zu beseitigen.
-faggressive-loop-Optimierungen
Diese Option weist den Schleifenoptimierer an, Sprachbeschränkungen zu verwenden, um Grenzen für . abzuleiten
die Anzahl der Iterationen einer Schleife. Dies setzt voraus, dass Schleifencode nicht aufruft
undefiniertes Verhalten, indem beispielsweise vorzeichenbehaftete Integer-Überläufe oder Out-of-Bound-Werte verursacht werden
Array-Zugriffe. Die Grenzen für die Anzahl der Iterationen einer Schleife dienen zur Führung
Schleifenabrollen und -schälen und Schleifenausgangstestoptimierungen. Diese Option ist aktiviert
standardmäßig.
-funsafe-loop-optimierungen
Diese Option weist den Schleifenoptimierer an, anzunehmen, dass Schleifenindizes nicht überlaufen, und
dass Schleifen mit nichttrivialer Austrittsbedingung nicht unendlich sind. Dies ermöglicht ein breiteres
Reihe von Schleifenoptimierungen, auch wenn der Schleifenoptimierer selbst nicht beweisen kann, dass diese
Annahmen sind gültig. Wenn du benutzt -Wunsafe-Loop-Optimierungen, warnt Sie der Compiler
wenn es diese Art von Schleife findet.
-fCrossspringen
Führen Sie eine Cross-Spring-Transformation durch. Diese Transformation vereinheitlicht äquivalenten Code und
spart Codegröße. Der resultierende Code kann eine bessere Leistung erbringen als ohne Cross-
Springen.
Auf Stufen aktiviert -O2, -O3, -Du.
-fauto-inc-dez
Kombinieren Sie Inkremente oder Dekremente von Adressen mit Speicherzugriffen. Dieser Pass ist
immer auf Architekturen übersprungen, die keine Anweisungen haben, um dies zu unterstützen.
Standardmäßig aktiviert um -O und höher auf Architekturen, die dies unterstützen.
-fdce
Führen Sie die Totcode-Eliminierung (DCE) bei RTL durch. Standardmäßig aktiviert um -O und höher.
-fdse
Führen Sie die Dead-Store-Elimination (DSE) bei RTL durch. Standardmäßig aktiviert um -O und höher.
-fif-Konvertierung
Versuchen Sie, bedingte Sprünge in Äquivalente ohne Zweige umzuwandeln. Das beinhaltet
Verwendung von bedingten Zügen, Min, Max, Set-Flags und ABS-Anweisungen und einige Tricks
durch Standardarithmetik machbar. Die Verwendung der bedingten Ausführung auf Chips, wo sie ist
verfügbar wird gesteuert von -fif-conversion2.
Auf Stufen aktiviert -O, -O2, -O3, -Du.
-fif-conversion2
Verwenden Sie die bedingte Ausführung (sofern verfügbar), um bedingte Sprünge in umzuwandeln
zweiglose Äquivalente.
Auf Stufen aktiviert -O, -O2, -O3, -Du.
-fdeclone-ctor-dtor
Die C++ ABI erfordert mehrere Einstiegspunkte für Konstruktoren und Destruktoren: einen für a
Basis-Unterobjekt, eines für ein vollständiges Objekt und eines für einen virtuellen Destruktor, der aufruft
Betreiber danach löschen. Für eine Hierarchie mit virtuellen Basen, die Basis und vollständig
Varianten sind Klone, also zwei Kopien der Funktion. Mit dieser Option wird die
Basis- und Komplettvarianten werden in Thunks geändert, die eine gemeinsame Implementierung aufrufen.
Aktiviert von -Du.
-fdelete-null-pointer-checks
Nehmen Sie an, dass Programme Nullzeiger nicht sicher dereferenzieren können und dass kein Code oder Daten
Element liegt dort. Dies ermöglicht überhaupt einfache ständige Faltoptimierungen
Optimierungsstufen bzw. Darüber hinaus verwenden andere Optimierungsdurchgänge in GCC dieses Flag, um
globale Datenflussanalysen steuern, die nutzlose Prüfungen auf Nullzeiger eliminieren;
diese gehen davon aus, dass, wenn ein Zeiger überprüft wird, nachdem er bereits dereferenziert wurde, es
kann nicht Null sein.
Beachten Sie jedoch, dass diese Annahme in einigen Umgebungen nicht zutrifft. Verwenden
-fno-delete-null-pointer-checks um diese Optimierung für Programme zu deaktivieren, die abhängig sind
auf dieses Verhalten.
Einige Ziele, insbesondere eingebettete, deaktivieren diese Option auf allen Ebenen. Andernfalls
es ist auf allen Ebenen aktiviert: -O0, -O1, -O2, -O3, -Du. Pässe, die die Informationen verwenden
werden unabhängig voneinander auf verschiedenen Optimierungsstufen aktiviert.
-fdevirtualisieren
Versuchen Sie, Aufrufe in virtuelle Funktionen in Direktaufrufe umzuwandeln. Das wird beides gemacht
innerhalb eines Verfahrens und verfahrensübergreifend im Rahmen des indirekten Inlinings
(-findirect-Inlining) und interprozedurale Konstantenausbreitung (-fipa-cp). Aktiviert um
Level -O2, -O3, -Du.
-fdevirtualize-spekulativ
Versuchen Sie, Aufrufe virtueller Funktionen in spekulative Direktaufrufe umzuwandeln. Beyogen auf
die Analyse des Typvererbungsgraphen, bestimme für einen gegebenen Aufruf die Menge von
wahrscheinliche Ziele. Wenn das Set klein ist, vorzugsweise von Größe 1, ändern Sie den Aufruf in a
bedingte Entscheidung zwischen direkten und indirekten Anrufen. Die spekulativen Anrufe ermöglichen
weitere Optimierungen, wie Inlining. Wenn sie nach weiterem nutzlos erscheinen
Optimierung werden sie wieder in die ursprüngliche Form überführt.
-fdevirtualize-at-ltrans
Streamen Sie zusätzliche Informationen, die für eine aggressive Devirtualisierung benötigt werden, wenn Sie den Link ausführen.
Zeitoptimierer im lokalen Transformationsmodus. Diese Option ermöglicht mehr
Devirtualisierung, sondern erhöht die Größe der gestreamten Daten erheblich. Dafür
Grund ist es standardmäßig deaktiviert.
-Kostengünstige-Optimierungen
Führen Sie eine Reihe kleinerer Optimierungen durch, die relativ teuer sind.
Auf Stufen aktiviert -O2, -O3, -Du.
-kostenlos
Versuchen Sie, redundante Erweiterungsanweisungen zu entfernen. Dies ist besonders hilfreich für
die x86-64-Architektur, die sich implizit in 64-Bit-Registern nach dem
Schreiben in ihre untere 32-Bit-Hälfte.
Aktiviert für Alpha, AArch64 und x86 auf Stufen -O2, -O3, -Du.
-fno-lifetime-dse
In C++ wird der Wert eines Objekts nur durch Änderungen innerhalb seiner Lebensdauer beeinflusst: wenn
der Konstruktor beginnt, das Objekt hat einen unbestimmten Wert und alle Änderungen während
die Lebensdauer des Objekts ist tot, wenn das Objekt zerstört wird. Normalerweise toter Laden
Eliminierung wird dies ausnutzen; wenn Ihr Code auf dem Wert von beruht
Objektspeicher über die Lebensdauer des Objekts hinaus bestehen bleibt, können Sie dieses Flag verwenden, um
deaktivieren Sie diese Optimierung.
-Five-Range-Schwindung
Versuchen Sie, den Registerdruck durch die Verkleinerung des Register-Lebensdauerbereichs zu verringern. Das ist
hilfreich für schnelle Prozessoren mit kleinen oder mittelgroßen Registersätzen.
-fira-Algorithmus=Algorithmus
Verwenden Sie den angegebenen Farbalgorithmus für den integrierten Registerzuordner. Die
Algorithmus Argument kann sein Prioritätsliste, die die vorrangige Farbgebung von Chow angibt, oder CB,
die die Chaitin-Briggs-Färbung angibt. Chaitin-Briggs-Färbung ist nicht implementiert
für alle Architekturen, aber für die Ziele, die es unterstützen, ist es die Standardeinstellung
weil es besseren Code generiert.
-fira-region=Region
Verwenden Sie angegebene Regionen für den integrierten Registerzuordner. Die Region Argument
sollte einer der folgenden sein:
alle Verwenden Sie alle Schleifen als Registerzuweisungsregionen. Dies kann die besten Ergebnisse für
Maschinen mit kleinem und/oder unregelmäßigem Registersatz.
gemischt
Verwenden Sie alle Loops außer Loops mit kleinem Registerdruck als Regionen. Dies
Wert in den meisten Fällen und für die meisten Architekturen die besten Ergebnisse liefert, und
ist beim Kompilieren standardmäßig mit Geschwindigkeitsoptimierung aktiviert (-O, -O2, ...).
dank One Verwenden Sie alle Funktionen als eine einzige Region. Dies führt normalerweise zum kleinsten Code
Größe und ist standardmäßig aktiviert für -Du or -O0.
-fira-hebezeug-druck
Verwenden Sie IRA, um den Registerdruck im Code-Hebepass für Entscheidungen zum Heben zu bewerten
Ausdrücke. Diese Option führt normalerweise zu kleinerem Code, kann jedoch die
Compiler runter.
Diese Option ist auf Ebene aktiviert -Du für alle Ziele.
-fira-Schleifendruck
Verwenden Sie IRA, um den Registerdruck in Schleifen für Entscheidungen zum Verschieben von Schleifeninvarianten auszuwerten.
Diese Option führt normalerweise zur Generierung von schnellerem und kleinerem Code auf Maschinen mit
große Registerdateien (>= 32 Register), aber es kann den Compiler verlangsamen.
Diese Option ist auf Ebene aktiviert -O3 für einige Ziele.
-fno-ira-share-save-slots
Deaktivieren Sie die gemeinsame Nutzung von Stack-Slots, die zum Speichern von durch Aufrufen verwendeten Hardregistern verwendet werden
ein Anruf. Jedes Hardregister erhält einen separaten Stack-Slot und damit Funktionsstack
Rahmen sind größer.
-fno-ira-share-spill-slots
Deaktivieren Sie die gemeinsame Nutzung von Stack-Slots, die für Pseudoregister zugewiesen sind. Jedes Pseudoregister
das kein hartes Register bekommt, bekommt einen separaten Stack-Slot und als Ergebnis Funktion
Stapelrahmen sind größer.
-fira-verbose=n
Steuern Sie die Ausführlichkeit der Dump-Datei für den integrierten Registerzuordner. Die
Standardwert ist 5. Wenn der Wert n größer oder gleich 10 ist, wird die Dump-Ausgabe gesendet
nach stderr im gleichen Format wie n minus 10.
-flra-remat
Aktivieren Sie die CFG-sensitive Rematerialisierung in LRA. Anstatt Werte von verschüttetem . zu laden
pseudos versucht LRA, Werte zu rematerialisieren (neu zu berechnen), wenn es profitabel ist.
Auf Stufen aktiviert -O2, -O3, -Du.
-fdelayed-branch
Wenn dies für den Zielcomputer unterstützt wird, versuchen Sie, die Anweisungen zum Ausnutzen neu anzuordnen
Befehlsschlitze, die nach verzögerten Verzweigungsbefehlen verfügbar sind.
Auf Stufen aktiviert -O, -O2, -O3, -Du.
-fschedule-insns
Falls für den Zielcomputer unterstützt, versuchen Sie, die Anweisungen neu anzuordnen, um
Die Ausführung wird unterbrochen, da erforderliche Daten nicht verfügbar sind. Das hilft Maschinen, die
langsame Gleitkomma- oder Speicherladebefehle haben, indem andere Befehle zugelassen werden
ausgegeben werden, bis das Ergebnis des Lade- oder Gleitkommabefehls benötigt wird.
Auf Stufen aktiviert -O2, -O3.
-fschedule-insns2
Ähnlich -fschedule-insns, fordert aber einen zusätzlichen Durchlauf der Instruktionsplanung
nach erfolgter Registerzuordnung. Dies ist besonders nützlich bei Maschinen mit a
relativ kleine Anzahl von Registern und wo Speicherladebefehle mehr als benötigen
ein Zyklus.
Auf Stufen aktiviert -O2, -O3, -Du.
-fno-sched-interblock
Planen Sie Anweisungen nicht über grundlegende Blöcke hinweg. Dies ist normalerweise standardmäßig aktiviert
bei der Planung vor Registerzuordnung, dh mit -fschedule-insns oder -O2 or
höher.
-fno-plan-spez
Erlauben Sie keine spekulative Bewegung von Nicht-Ladebefehlen. Dies wird normalerweise aktiviert durch
Default beim Scheduling vor Registerzuordnung, dh mit -fschedule-insns oder
-O2 oder höher.
-fsched-Druck
Aktivieren Sie die druckempfindliche insn-Zeitplanung für Register vor der Registerzuordnung. Dies
ist nur sinnvoll, wenn das Scheduling vor der Registerzuordnung aktiviert ist, also mit
-fschedule-insns oder -O2 oder höher. Die Verwendung dieser Option kann das generierte verbessern
Code und verkleinern Sie seine Größe, indem Sie verhindern, dass der Registerdruck über die Zahl steigt
verfügbarer harter Register und nachfolgende Überschreitungen bei der Registerzuordnung.
-fsched-spec-load
Erlauben Sie spekulative Bewegungen einiger Ladebefehle. Das macht nur Sinn, wenn
Scheduling vor Registerzuordnung, dh mit -fschedule-insns oder -O2 oder höher.
-fsched-spec-load-gefährlich
Erlauben Sie spekulative Bewegungen von mehr Ladebefehlen. Das macht nur Sinn, wenn
Scheduling vor Registerzuordnung, dh mit -fschedule-insns oder -O2 oder höher.
-fsched-stalled-insns
-fsched-stalled-insns=n
Definieren Sie, wie viele Insns (falls vorhanden) vorzeitig aus der Warteschlange der blockierten entfernt werden können
insns in die Ready-Liste während des zweiten Scheduling-Durchgangs. -fno-sched-stalled-insns
bedeutet, dass keine Inns vorzeitig verlegt werden, -fsched-stalled-insns=0 bedeutet, dass es keine gibt
begrenzen, wie viele Insns in der Warteschlange vorzeitig verschoben werden können. -fsched-stalled-insns
ohne Wert entspricht -fsched-stalled-insns=1.
-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
Definieren Sie, wie viele insn-Gruppen (Zyklen) auf eine Abhängigkeit von einer blockierten insn untersucht werden
das ist ein Kandidat für eine vorzeitige Entfernung aus der Warteschlange der blockierten insns. Das hat
eine Wirkung nur während des zweiten Fahrplandurchlaufs und nur, wenn -fsched-stalled-insns is
benutzt. -fno-sched-festgelegt-insns-dep entspricht -fsched-stalled-insns-dep=0.
-fsched-stalled-insns-dep ohne Wert entspricht
-fsched-stalled-insns-dep=1.
-fsched2-use-superblocks
Verwenden Sie beim Scheduling nach der Registerzuordnung die Superblock-Scheduling. Dies erlaubt
Bewegung über grundlegende Blockgrenzen hinweg, was zu schnelleren Zeitplänen führt. Diese Option ist
experimentell, da nicht alle von GCC verwendeten Maschinenbeschreibungen die CPU genau genug modellieren
um unzuverlässige Ergebnisse des Algorithmus zu vermeiden.
Dies ist nur sinnvoll bei der Planung nach Registerzuordnung, also mit
-fschedule-insns2 oder -O2 oder höher.
-fsched-group-heuristik
Aktivieren Sie die Gruppenheuristik im Scheduler. Diese Heuristik begünstigt die Anweisung
die zu einer Zeitplangruppe gehört. Dies ist standardmäßig aktiviert, wenn die Planung
aktiviert, dh mit -fschedule-insns or -fschedule-insns2 oder -O2 oder höher.
-fsched-kritischer-Pfad-Heuristik
Aktivieren Sie die Heuristik des kritischen Pfads im Scheduler. Diese Heuristik begünstigt
Anweisungen zum kritischen Pfad. Dies ist standardmäßig aktiviert, wenn die Planung
aktiviert, dh mit -fschedule-insns or -fschedule-insns2 oder -O2 oder höher.
-fsched-spec-insn-heuristik
Aktivieren Sie die spekulative Anweisungsheuristik im Scheduler. Diese Heuristik begünstigt
spekulative Anweisungen mit größerer Abhängigkeitsschwäche. Dies ist standardmäßig aktiviert
wenn die Zeitplanung aktiviert ist, dh mit -fschedule-insns or -fschedule-insns2 oder -O2
oder höher.
-fsched-rank-Heuristik
Aktivieren Sie die Rangheuristik im Scheduler. Diese Heuristik begünstigt die Anweisung
Zugehörigkeit zu einem Basisblock mit größerer Größe oder Häufigkeit. Dies ist standardmäßig aktiviert
wenn die Zeitplanung aktiviert ist, dh mit -fschedule-insns or -fschedule-insns2 oder -O2
oder höher.
-fsched-last-insn-heuristik
Aktivieren Sie die Heuristik der letzten Anweisung im Scheduler. Diese Heuristik begünstigt die
Anweisung, die weniger von der zuletzt geplanten Anweisung abhängig ist. Dies ist aktiviert
standardmäßig, wenn die Zeitplanung aktiviert ist, dh mit -fschedule-insns or -fschedule-insns2
oder -O2 oder höher.
-fsched-dep-count-heuristisch
Aktivieren Sie die abhängige Zählheuristik im Scheduler. Diese Heuristik begünstigt die
Anweisung, die davon abhängig mehr Anweisungen enthält. Dies ist standardmäßig aktiviert
wenn die Zeitplanung aktiviert ist, dh mit -fschedule-insns or -fschedule-insns2 oder -O2
oder höher.
-freschedule-modulo-scheduled-loops
Das Modulo-Scheduling wird vor dem herkömmlichen Scheduling durchgeführt. Wenn eine Schleife modulo . ist
geplant, spätere Planungsdurchgänge können den Zeitplan ändern. Verwenden Sie diese Option, um
dieses Verhalten kontrollieren.
-fselektive-Planung
Planen Sie Anweisungen unter Verwendung des selektiven Planungsalgorithmus. Selektive Planungsläufe
anstelle des ersten Scheduler-Passes.
-fselektive Planung2
Planen Sie Anweisungen unter Verwendung des selektiven Planungsalgorithmus. Selektive Planungsläufe
anstelle des zweiten Scheduler-Passes.
-fsel-sched-pipelining
Aktivieren Sie das Software-Pipelining der innersten Schleifen während der selektiven Planung. Dies
Option hat keine Wirkung, es sei denn, eine von -fselektive-Planung or -fselektive Planung2
Ist eingeschaltet.
-fsel-sched-pipelining-outer-loops
Beim Pipelining von Schleifen während des selektiven Schedulings werden auch äußere Schleifen der Pipeline verwendet. Dies
Option hat keine Wirkung, es sei denn -fsel-sched-pipelining Ist eingeschaltet.
-fsemantische-Interposition
Einige Objektformate, wie ELF, ermöglichen das Einfügen von Symbolen durch den dynamischen Linker.
Dies bedeutet, dass der Compiler für Symbole, die aus dem DSO exportiert wurden, keine
Interprozedurale Propagation, Inlining und andere Optimierungen in Erwartung, dass die
Die betreffende Funktion oder Variable kann sich ändern. Diese Funktion ist zwar nützlich, z
Um beispielsweise Speicherzuweisungsfunktionen durch eine Debugging-Implementierung neu zu schreiben, ist es
teuer in Bezug auf die Codequalität. Mit -fno-semantische-Interposition der Compiler
geht davon aus, dass bei einer Interposition für Funktionen die Überschreibfunktion
genau die gleiche Semantik (und Nebenwirkungen). Ebenso wenn Interposition passiert
für Variablen ist der Konstruktor der Variablen derselbe. Die Flagge hat kein
Effekt für Funktionen, die explizit inline deklariert sind (wo es nie erlaubt ist
Interposition zur Änderung der Semantik) und für explizit schwach deklarierte Symbole.
-fshrink-wrap
Geben Sie Funktionsprologe nur vor Teilen der Funktion aus, die sie benötigen, und nicht bei
die Spitze der Funktion. Dieses Flag ist standardmäßig aktiviert bei -O und höher.
-fcaller-speichert
Aktivieren Sie die Zuweisung von Werten zu Registern, die durch Funktionsaufrufe überfüllt sind, durch
Ausgeben zusätzlicher Anweisungen zum Sichern und Wiederherstellen der Register um solche Aufrufe herum. Eine solche
Die Zuweisung erfolgt nur, wenn dies zu einem besseren Code zu führen scheint.
Diese Option ist auf bestimmten Computern standardmäßig immer aktiviert, normalerweise auf denen mit
keine ruferhaltenen Register, die stattdessen verwendet werden können.
Auf Stufen aktiviert -O2, -O3, -Du.
-fcombine-Stack-Anpassungen
Verfolgt Stack-Anpassungen (Pushes und Pops) und Stack-Speicherreferenzen und versucht es dann
Wege zu finden, sie zu kombinieren.
Standardmäßig aktiviert um -O1 und höher.
-fipa-ra
Verwenden Sie Caller Save-Register für die Zuweisung, wenn diese Register von keinem Angerufenen verwendet werden
Funktion. In diesem Fall ist es nicht erforderlich, sie um Anrufe herum zu speichern und wiederherzustellen.
Dies ist nur möglich, wenn aufgerufene Funktionen Teil derselben Übersetzungseinheit sind wie die aktuelle
Funktion und sie werden davor kompiliert.
Auf Stufen aktiviert -O2, -O3, -Du.
-fconserve-stack
Versuchen Sie, die Stapelnutzung zu minimieren. Der Compiler versucht sogar, weniger Stack-Speicherplatz zu belegen
wenn das das Programm langsamer macht. Diese Option beinhaltet die Einstellung der Großstapel-Rahmen
Parameter auf 100 und die Large-Stack-Frame-Wachstum Parameter auf 400.
-ftree-reassoc
Reassoziation an Bäumen durchführen. Dieses Flag ist standardmäßig aktiviert bei -O und höher.
-ftree-pre
Führen Sie eine partielle Redundanzbeseitigung (PRE) für Bäume durch. Dieses Flag wird aktiviert von
Standard bei -O2 und -O3.
-ftree-partial-pre
Machen Sie die partielle Redundanzbeseitigung (PRE) aggressiver. Dieses Flag wird aktiviert von
Standard bei -O3.
-ftree-forwprop
Führen Sie die Vorwärtsausbreitung an Bäumen durch. Dieses Flag ist standardmäßig aktiviert bei -O und
höher.
-frei
Führen Sie eine vollständige Redundanzbeseitigung (FRE) für Bäume durch. Der Unterschied zwischen FRE und
PRE ist, dass FRE nur Ausdrücke berücksichtigt, die auf allen Pfaden berechnet werden, die zu führen
die redundante Berechnung. Diese Analyse ist schneller als PRE, zeigt jedoch weniger
Entlassungen. Dieses Flag ist standardmäßig aktiviert bei -O und höher.
-ftree-phiprop
Führen Sie das Heben von Lasten von bedingten Zeigern auf Bäumen durch. Dieser Pass wird aktiviert von
Standard bei -O und höher.
-fhoist-angrenzende-Lasten
Heben Sie spekulativ Lasten aus beiden Zweigen eines Wenn-dann-sonsts, wenn die Lasten von
benachbarte Standorte in der gleichen Struktur und die Zielarchitektur hat eine bedingte
Anweisung bewegen. Dieses Flag ist standardmäßig aktiviert bei -O2 und höher.
-ftree-copy-prop
Führen Sie die Kopienausbreitung auf Bäumen durch. Dieser Durchgang eliminiert unnötige Kopiervorgänge.
Dieses Flag ist standardmäßig aktiviert bei -O und höher.
-fipa-pure-const
Entdecken Sie, welche Funktionen rein oder konstant sind. Standardmäßig aktiviert um -O und höher.
-fipa-Referenz
Finden Sie heraus, welche statischen Variablen der Kompilierungseinheit nicht entkommen. Aktiviert von
Standard bei -O und höher.
-fipa-pta
Führen Sie eine interprozedurale Zeigeranalyse und eine interprozedurale Modifikation durch und
Referenzanalyse. Diese Option kann zu übermäßiger Speicher- und Kompilierzeitnutzung führen
große Zusammenstellungseinheiten. Sie ist standardmäßig auf keiner Optimierungsstufe aktiviert.
-fipa-Profil
Führen Sie die interprozedurale Profilweitergabe durch. Die Funktionen werden nur von kalt aufgerufen
Funktionen sind als kalt gekennzeichnet. Auch einmal ausgeführte Funktionen (wie "kalt",
"noreturn", statische Konstruktoren oder Destruktoren) identifiziert werden. Kältefunktionen und
Schleife weniger Teile von Funktionen, die einmal ausgeführt werden, werden dann auf Größe optimiert. Aktiviert von
Standard bei -O und höher.
-fipa-cp
Führen Sie eine interprozedurale Konstantenausbreitung durch. Diese Optimierung analysiert das Programm
um zu bestimmen, wann an Funktionen übergebene Werte Konstanten sind und dann optimiert
entsprechend. Diese Optimierung kann die Leistung erheblich steigern, wenn die
Anwendung hat Konstanten an Funktionen übergeben. Dieses Flag ist standardmäßig aktiviert bei
-O2, -Du und -O3.
-fipa-cp-klon
Führen Sie das Klonen von Funktionen durch, um die interprozedurale Konstantenausbreitung zu verstärken. Wann
aktiviert, führt die interprozedurale Konstantenausbreitung das Klonen von Funktionen durch, wenn
extern sichtbare Funktion kann mit konstanten Argumenten aufgerufen werden. Weil das
Optimierung kann mehrere Kopien von Funktionen erstellen, sie kann erheblich zunehmen
Codegröße (siehe --param ipcp-Einheit-Wachstum=Wert). Dieses Flag ist standardmäßig aktiviert bei
-O3.
-fipa-cp-Ausrichtung
Wenn diese Optimierung aktiviert ist, propagiert sie die Ausrichtung der Funktionsparameter zur Unterstützung von
bessere Vektorisierung und String-Operationen.
Dieses Flag ist standardmäßig aktiviert bei -O2 und -Du. Es erfordert das -fipa-cp aktiviert.
-fipa-icf
Führen Sie Identical Code Folding für Funktionen und schreibgeschützte Variablen durch. Die
Optimierung reduziert Codegröße und kann Unwind-Stacks durch Ersetzen einer Funktion stören
durch einen gleichwertigen mit einem anderen Namen. Die Optimierung funktioniert effektiver mit
Linkzeitoptimierung aktiviert.
Trotzdem ist das Verhalten ähnlich wie bei der Gold Linker ICF-Optimierung, an der GCC ICF arbeitet
verschiedene Ebenen und somit sind die Optimierungen nicht gleich - es gibt Äquivalenzen, die
werden nur von GCC und Äquivalenzen nur von Gold gefunden.
Dieses Flag ist standardmäßig aktiviert bei -O2 und -Du.
-fisolate-fehlerhafte-Pfade-dereferenzieren
Pfade erkennen, die aufgrund der Dereferenzierung einer Null ein fehlerhaftes oder undefiniertes Verhalten auslösen
Zeiger. Isolieren Sie diese Pfade vom Hauptkontrollfluss und drehen Sie die Anweisung mit
fehlerhaftes oder undefiniertes Verhalten in eine Falle locken. Dieses Flag ist standardmäßig aktiviert bei -O2
und höher.
-fesolate-fehlerhafte-Pfade-Attribut
Pfade erkennen, die aufgrund eines Nullwerts ein fehlerhaftes oder undefiniertes Verhalten auslösen
auf eine Weise, die durch ein "returns_nonnull"- oder "nonnull"-Attribut verboten ist. Isolieren Sie diese Pfade
aus dem Hauptkontrollfluss und drehen die Anweisung mit fehlerhaftem oder undefiniertem Verhalten
in eine Falle. Dies ist derzeit nicht aktiviert, kann aber aktiviert werden von -O2 in der Zukunft.
-ftree-waschbecken
Führen Sie eine Vorwärtsbewegung auf Bäumen durch. Dieses Flag ist standardmäßig aktiviert bei -O und
höher.
-ftree-bit-ccp
Führen Sie eine spärliche bedingte Bitkonstantenausbreitung auf Bäumen durch und verbreiten Sie Zeiger
Ausrichtungsinformationen. Dieser Durchgang funktioniert nur mit lokalen skalaren Variablen und ist
standardmäßig aktiviert bei -O und höher. Es erfordert das -ftree-ccp aktiviert.
-ftree-ccp
Führen Sie eine spärliche bedingte konstante Ausbreitung (CCP) auf Bäumen durch. Nur dieser Pass
arbeitet mit lokalen skalaren Variablen und ist standardmäßig aktiviert bei -O und höher.
-fssa-phiopt
Führen Sie einen Musterabgleich auf SSA-PHI-Knoten durch, um den bedingten Code zu optimieren. Dieser Pass ist
standardmäßig aktiviert bei -O und höher.
-Ftree-Switch-Umwandlung
Konvertierung einfacher Initialisierungen in einem Wechsel auf Initialisierungen von a . durchführen
skalares Array. Dieses Flag ist standardmäßig aktiviert bei -O2 und höher.
-ftree-tail-merge
Suchen Sie nach identischen Codesequenzen. Wenn Sie es gefunden haben, ersetzen Sie eines durch einen Sprung zum anderen.
Diese Optimierung wird als Tail Merging oder Cross Jumping bezeichnet. Dieses Flag wird aktiviert von
Standard bei -O2 und höher. Die Kompilierungszeit in diesem Pass kann begrenzt werden mit
max-tail-merge-vergleiche Parameter und max-tail-merge-iterationen Parameters.
-ftree-dce
Führen Sie Dead Code Elimination (DCE) für Bäume durch. Dieses Flag ist standardmäßig aktiviert bei -O
und höher.
-ftree-eingebauter-Aufruf-dce
Führen Sie bedingte Dead Code Elimination (DCE) für Aufrufe von integrierten Funktionen durch, die
kann "errno" setzen, ist aber ansonsten nebenwirkungsfrei. Dieses Flag ist standardmäßig aktiviert
at -O2 und höher, wenn -Du ist auch nicht angegeben.
-Ftree-Dominator-Opts
Führen Sie eine Vielzahl einfacher skalarer Bereinigungen durch (konstante/Kopie-Ausbreitung, Redundanz)
Eliminierung, Reichweitenausbreitung und Ausdrucksvereinfachung) basierend auf einem Dominator
Baumdurchquerung. Dies führt auch Sprung-Threading durch (um Sprünge zu Sprüngen zu reduzieren). Dies
Flag ist standardmäßig aktiviert bei -O und höher.
-ftree-dse
Führen Sie Dead Store Elimination (DSE) an Bäumen durch. Ein toter Speicher ist ein Speicher in eine Erinnerung
Speicherort, der später ohne zwischenzeitliche Ladevorgänge von einem anderen Speicher überschrieben wird. In
In diesem Fall kann der frühere Speicher gelöscht werden. Dieses Flag ist standardmäßig aktiviert bei -O und
höher.
-ftree-ch
Führen Sie das Kopieren von Schleifenheadern für Bäume durch. Dies ist von Vorteil, da es zunimmt
Effektivität von Code-Motion-Optimierungen. Es spart auch einen Sprung. Diese Flagge ist
standardmäßig aktiviert bei -O und höher. Es ist nicht aktiviert für -Du, da es normalerweise
erhöht die Codegröße.
-ftree-loop-optimieren
Durchführen von Schleifenoptimierungen an Bäumen. Dieses Flag ist standardmäßig aktiviert bei -O und
höher.
-Ftree-Loop-Linear
Führen Sie Schleifenaustauschtransformationen für den Baum durch. Gleich wie -floop-Austausch. Benutzen
dieser Codetransformation muss GCC mit konfiguriert werden --mit-isl um das zu ermöglichen
Infrastruktur für die Transformation von Graphitschleifen.
-floop-Austausch
Führen Sie Schleifenaustauschtransformationen für Schleifen durch. Vertauschen von zwei verschachtelten Schleifen
schaltet die inneren und äußeren Schleifen um. Zum Beispiel gegeben eine Schleife wie:
TUN J = 1, M
TUN I = 1, N
A(J, I) = A(J, I) * C
ENDDO
ENDDO
Schleifenaustausch transformiert die Schleife, als ob sie geschrieben wäre:
TUN I = 1, N
TUN J = 1, M
A(J, I) = A(J, I) * C
ENDDO
ENDDO
was von Vorteil sein kann, wenn "N" größer als die Caches ist, da in Fortran die
Elemente eines Arrays werden spaltenweise im Speicher abgelegt, und das Original
Schleife iteriert über Zeilen und erzeugt potentiell bei jedem Zugriff einen Cache-Miss. Dies
Die Optimierung gilt für alle von GCC unterstützten Sprachen und ist nicht beschränkt auf
Fortran. Um diese Codetransformation zu verwenden, muss GCC mit konfiguriert werden --mit-isl zu
Aktivieren Sie die Graphite-Loop-Transformationsinfrastruktur.
-floop-Streifen-Mine
Führen Sie Loop-Strip-Mining-Transformationen für Schleifen durch. Strip Mining teilt eine Schleife in
zwei verschachtelte Schleifen. Die äußere Schlaufe hat Schritte gleich der Streifengröße und die innere
loop hat Schritte des ursprünglichen Loops innerhalb eines Streifens. Die Streifenlänge kann geändert werden
Verwendung der Schleifenblock-Kachelgröße Parameter. Zum Beispiel gegeben eine Schleife wie:
TUN I = 1, N
A(I) = A(I) + C
ENDDO
Loop Strip Mining transformiert die Schleife, als wäre sie geschrieben:
DO II = 1, N, 51
DO I = II, min (II + 50, N)
A(I) = A(I) + C
ENDDO
ENDDO
Diese Optimierung gilt für alle von GCC unterstützten Sprachen und ist nicht beschränkt auf
Fortran. Um diese Codetransformation zu verwenden, muss GCC mit konfiguriert werden --mit-isl zu
Aktivieren Sie die Graphite-Loop-Transformationsinfrastruktur.
-Floop-Block
Führen Sie Schleifenblockierungstransformationen für Schleifen durch. Blockieren von Streifenminen jede Schleife im
loop nest so, dass die Speicherzugriffe der Elementschleifen in Caches passen. Die
Abisolierlänge kann mit geändert werden Schleifenblock-Kachelgröße Parameter. Zum Beispiel,
gegeben eine Schleife wie:
TUN I = 1, N
TUN J = 1, M
A(J, I) = B(I) + C(J)
ENDDO
ENDDO
Schleifenblockierung transformiert die Schleife, als ob sie geschrieben wäre:
DO II = 1, N, 51
TUN JJ = 1, M, 51
DO I = II, min (II + 50, N)
DO J = JJ, min (JJ + 50, M)
A(J, I) = B(I) + C(J)
ENDDO
ENDDO
ENDDO
ENDDO
was von Vorteil sein kann, wenn "M" größer als die Caches ist, da die innerste Schleife
iteriert über eine kleinere Datenmenge, die in den Caches gehalten werden kann. Dies
Die Optimierung gilt für alle von GCC unterstützten Sprachen und ist nicht beschränkt auf
Fortran. Um diese Codetransformation zu verwenden, muss GCC mit konfiguriert werden --mit-isl zu
Aktivieren Sie die Graphite-Loop-Transformationsinfrastruktur.
-fgraphite-identität
Aktivieren Sie die Identitätstransformation für Graphit. Für jeden SCoP generieren wir die
polyedrische Darstellung und wandeln sie wieder in Gimple um. Verwenden von -fgraphite-identität
Wir können die Kosten oder den Nutzen der Transformation GIMPLE -> GRAPHITE -> GIMPLE überprüfen.
Einige minimale Optimierungen werden auch vom Codegenerator ISL durchgeführt, wie index
Splitting und Dead Code Elimination in Schleifen.
-floop-nest-optimieren
Aktivieren Sie den ISL-basierten Schleifenverschachtelungsoptimierer. Dies ist ein generischer Schleifen-Nest-Optimierer basierend
zu den Pluto-Optimierungsalgorithmen. Es berechnet eine Schleifenstruktur optimiert für
Datenlokalität und Parallelität. Diese Option ist experimentell.
-floop-unroll-and-jam
Aktivieren Sie Unroll and Jam für den ISL-basierten Loop Nest Optimizer. Der Abrollfaktor kann sein
geändert mit Loop-Abroll-Stau-Größe Parameter. Die abgerollte Dimension (Zählen
von der innersten) kann mit der geändert werden Loop-Unroll-Jam-Tiefe Parameters.
.
-floop-parallelize-all
Verwenden Sie die Graphite-Datenabhängigkeitsanalyse, um Schleifen zu identifizieren, die parallelisiert werden können.
Parallelisieren Sie alle Schleifen, die analysiert werden können, um keine schleifengetragenen Abhängigkeiten zu enthalten
ohne zu prüfen, ob es rentabel ist, die Schleifen zu parallelisieren.
-fcheck-data-deps
Vergleichen Sie die Ergebnisse mehrerer Datenabhängigkeitsanalysatoren. Diese Option wird verwendet für
Debuggen der Datenabhängigkeitsanalysatoren.
-ftree-loop-if-convert
Versuchen Sie, bedingte Sprünge in den innersten Schleifen in verzweigungslose umzuwandeln
Äquivalente. Die Absicht besteht darin, den Kontrollfluss aus den innersten Schleifen der Reihe nach zu entfernen
um die Fähigkeit des Vektorisierungsdurchlaufs zu verbessern, diese Schleifen zu handhaben. Das ist
standardmäßig aktiviert, wenn die Vektorisierung aktiviert ist.
-ftree-loop-if-convert-stores
Versuchen Sie, auch bedingte Sprünge mit Speicherschreibvorgängen zu konvertieren. Dies
Die Transformation kann für Multithread-Programme unsicher sein, da sie bedingte transformiert
Speicher schreibt in unbedingte Speicher schreibt. Zum Beispiel,
für (i = 0; i < N; i++)
wenn (Bedingung)
A[i] = Ausdruck;
verwandelt sich in
für (i = 0; i < N; i++)
A[i] = cond ? expr: A[i];
potenziell Datenrennen produzieren.
-Ftree-Loop-Verteilung
Führen Sie eine Schleifenverteilung durch. Dieses Flag kann die Cache-Leistung bei großen Schleifenkörpern verbessern
und erlauben weitere Schleifenoptimierungen, wie Parallelisierung oder Vektorisierung,
Platz. Zum Beispiel die Schleife
TUN I = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
ENDDO
verwandelt sich in
TUN I = 1, N
A(I) = B(I) + C
ENDDO
TUN I = 1, N
D(I) = E(I) * F
ENDDO
-ftree-loop-patterns verteilen
Durchführen einer Schleifenverteilung von Mustern, die mit Aufrufen von a . durch Code generiert werden können
Bücherei. Dieses Flag ist standardmäßig aktiviert bei -O3.
Dieser Durchlauf verteilt die Initialisierungsschleifen und erzeugt einen Aufruf an Memset Null.
Zum Beispiel die Schleife
TUN I = 1, N
A(I) = 0
B(I) = A(I) + I
ENDDO
verwandelt sich in
TUN I = 1, N
A(I) = 0
ENDDO
TUN I = 1, N
B(I) = A(I) + I
ENDDO
und die Initialisierungsschleife wird in einen Aufruf an Memset Null umgewandelt.
-ftree-loop-im
Führen Sie eine schleifeninvariante Bewegung auf Bäumen durch. Dieser Pass bewegt nur Invarianten, die schwer sind
auf RTL-Ebene zu handhaben (Funktionsaufrufe, Operationen, die zu nichttrivialen Sequenzen expandieren
von Inns). Mit -Funswitch-Schleifen es verschiebt auch Operanden von Bedingungen, die
invariant aus der Schleife, so dass wir nur die triviale Invarianzanalyse in verwenden können
Schleife aufheben. Der Pass beinhaltet auch Ladenbewegungen.
-ftree-loop-ivcanon
Erstellen Sie einen kanonischen Zähler für die Anzahl der Iterationen in Schleifen, für die die Bestimmung
Anzahl der Iterationen erfordert eine komplizierte Analyse. Spätere Optimierungen können dann
die Zahl leicht ermitteln. Nützlich vor allem in Verbindung mit dem Abrollen.
-fünf Punkte
Optimierungen der Induktionsvariablen durchführen (Festigkeitsreduktion, Induktionsvariable
Verschmelzung und Eliminierung von Induktionsvariablen) auf Bäumen.
-ftree-parallelize-loops=n
Schleifen parallelisieren, dh ihren Iterationsraum aufteilen, um in n Threads zu laufen. Das ist
nur für Schleifen möglich, deren Iterationen unabhängig und beliebig sein können
nachbestellt. Die Optimierung lohnt sich nur auf Mehrprozessormaschinen, für Schleifen
die CPU-intensiv sind und nicht z. B. durch die Speicherbandbreite eingeschränkt sind. Diese Option
impliziert -pGewinde, und wird daher nur auf Zielen unterstützt, die Unterstützung für
-pGewinde.
-ftree-pta
Führen Sie funktionslokale Points-to-Analysen an Bäumen durch. Dieses Flag ist standardmäßig aktiviert
at -O und höher.
-ftree-sra
Führen Sie einen skalaren Ersatz von Aggregaten durch. Dieser Pass ersetzt Strukturreferenzen
mit Skalaren, um zu verhindern, dass Strukturen zu früh im Gedächtnis gespeichert werden. Diese Flagge ist
standardmäßig aktiviert bei -O und höher.
-ftree-copyrename
Kopieren Sie die Umbenennung von Bäumen. Dieser Pass versucht, Compiler-Temporäre in umzubenennen
andere Variablen an Kopierpositionen, was normalerweise zu Variablennamen führt, die mehr
ähneln sehr stark den ursprünglichen Variablen. Dieses Flag ist standardmäßig aktiviert bei -O und
höher.
-ftree-coalesce-inlined-vars
Sagen Sie dem Copyrename-Pass (siehe -ftree-copyrename) um zu versuchen, kleine Benutzer-
auch definierte Variablen, aber nur, wenn sie von anderen Funktionen inline eingebunden sind. Es ist ein
eingeschränktere Form von -ftree-coalesce-vars. Dies kann die Debug-Informationen solcher
Inline-Variablen, aber es hält die Variablen der inlined-in-Funktion voneinander getrennt
andere, so dass sie mit größerer Wahrscheinlichkeit die erwarteten Werte in einem Debugging enthalten
Session.
-ftree-coalesce-vars
Sagen Sie dem Copyrename-Pass (siehe -ftree-copyrename) um zu versuchen, kleine Benutzer-
auch definierte Variablen, anstatt nur Compiler-Temporäre. Dies kann stark einschränken
die Möglichkeit, ein optimiertes Programm zu debuggen, das mit kompiliert wurde -fno-var-tracking-zuweisungen.
In der negierten Form verhindert dieses Flag die SSA-Zusammenführung von Benutzervariablen, einschließlich
eingelassene. Diese Option ist standardmäßig aktiviert.
-ftree-ter
Führen Sie eine temporäre Ausdrucksersetzung während der SSA->normal-Phase durch. Einzel
use/single def provisories werden an ihrem Verwendungsort durch ihre Definition ersetzt
Ausdruck. Dies führt zu Nicht-GIMPLE-Code, gibt den Expandern jedoch viel mehr
komplexe Bäume zu bearbeiten, die zu einer besseren RTL-Generierung führen. Dies wird ermöglicht durch
Standard bei -O und höher.
-ftree-slsr
Führen Sie eine geradlinige Festigkeitsreduzierung an Bäumen durch. Dies erkennt verwandte
Ausdrücke mit Multiplikationen und ersetzt sie durch kostengünstigere Berechnungen
wenn möglich. Dies ist standardmäßig aktiviert bei -O und höher.
-ftree-vektorisieren
Führen Sie die Vektorisierung von Bäumen durch. Dieses Flag aktiviert -ftree-loop-vektorisieren und
-ftree-slp-vektorisieren wenn nicht explizit angegeben.
-ftree-loop-vektorisieren
Führen Sie eine Schleifenvektorisierung an Bäumen durch. Dieses Flag ist standardmäßig aktiviert bei -O3 und wann
-ftree-vektorisieren aktiviert.
-ftree-slp-vektorisieren
Führen Sie eine grundlegende Blockvektorisierung auf Bäumen durch. Dieses Flag ist standardmäßig aktiviert bei -O3 und
wann -ftree-vektorisieren aktiviert.
-fvect-cost-model=Modell
Ändern Sie das für die Vektorisierung verwendete Kostenmodell. Die Modell Argument sollte eines sein
unbegrenzt, dynamisch or billig. Mit dem unbegrenzt model der vektorisierte Codepfad ist
angenommen, profitabel zu sein, während mit dem dynamisch modellieren eine Laufzeitprüfung schützt die
vektorisierter Codepfad, um ihn nur für Iterationszählungen zu aktivieren, die wahrscheinlich ausgeführt werden
schneller als bei der Ausführung der ursprünglichen Skalarschleife. Die billig Modell deaktiviert
Vektorisierung von Schleifen, wo dies unerschwinglich wäre, zum Beispiel aufgrund von
erforderliche Laufzeitprüfungen auf Datenabhängigkeit oder Ausrichtung, ansonsten aber gleich dem
dynamisch Modell. Das Standardkostenmodell hängt von anderen Optimierungsflags ab und ist
entweder dynamisch or billig.
-fsimd-Kostenmodell=Modell
Ändern Sie das Kostenmodell, das für die Vektorisierung von Schleifen verwendet wird, die mit OpenMP oder Cilk . markiert sind
Plus simd-Direktive. Die Modell Argument sollte eines sein unbegrenzt, dynamisch, billig.
Alle Werte von Modell haben die gleiche Bedeutung wie in beschrieben -fvect-cost-model und durch
Standard ein Kostenmodell definiert mit -fvect-cost-model wird eingesetzt.
-ftree-vrp
Führen Sie die Wertebereichspropagation für Bäume durch. Dies ist ähnlich der konstanten Ausbreitung
übergeben, aber anstelle von Werten werden Wertebereiche weitergegeben. Dies ermöglicht die
Optimierer, um unnötige Bereichsprüfungen wie Array-gebundene Prüfungen und Nullzeiger zu entfernen
überprüft. Dies ist standardmäßig aktiviert bei -O2 und höher. Beseitigung von Nullzeigerprüfungen
wird nur gemacht, wenn -fdelete-null-pointer-checks aktiviert.
-fsplit-ivs-in-unroller
Ermöglicht den Ausdruck von Werten von Induktionsvariablen in späteren Iterationen des
entrollte Schleife mit dem Wert in der ersten Iteration. Das bricht lange Abhängigkeit
Ketten, wodurch die Effizienz der Scheduling-Pässe verbessert wird.
Eine Kombination aus -fweb und CSE reicht oft aus, um den gleichen Effekt zu erzielen.
Dies ist jedoch nicht zuverlässig in Fällen, in denen der Schleifenkörper komplizierter ist als a
einzelner Grundblock. Es funktioniert auch auf einigen Architekturen aufgrund von
Einschränkungen im CSE-Pass.
Diese Optimierung ist standardmäßig aktiviert.
-fvariable-expansion-in-roller
Mit dieser Option erstellt der Compiler mehrere Kopien einiger lokaler Variablen, wenn
Entrollen einer Schleife, was zu überlegenem Code führen kann.
-fpartielles Inlining
Inline-Teile von Funktionen. Diese Option hat nur dann Auswirkungen, wenn das Inlining selbst aktiviert ist
eingeschaltet von der -finline-Funktionen or -finline-kleine-Funktionen Optionen.
Auf Stufe aktiviert -O2.
-fpredictive-commoning
Führen Sie eine prädiktive Commoning-Optimierung durch, dh Wiederverwendung von Berechnungen (insbesondere
Speicherladungen und -speicherungen), die in früheren Schleifendurchläufen durchgeführt wurden.
Diese Option ist auf Ebene aktiviert -O3.
-fprefetch-loop-arrays
Generieren Sie, falls vom Zielcomputer unterstützt, Anweisungen zum Vorabrufen von Speicher zu
Verbessern Sie die Leistung von Schleifen, die auf große Arrays zugreifen.
Diese Option kann besseren oder schlechteren Code generieren; Ergebnisse sind stark abhängig von der
Struktur von Schleifen innerhalb des Quellcodes.
Auf Ebene deaktiviert -Du.
-fno-Guckloch
-fno-guckloch2
Deaktivieren Sie alle maschinenspezifischen Guckloch-Optimierungen. Der Unterschied zwischen
-fno-Guckloch und -fno-guckloch2 liegt darin, wie sie im Compiler implementiert werden; etwas
Ziele verwenden das eine, einige verwenden das andere, einige verwenden beide.
-fGuckloch ist standardmäßig aktiviert. -fGuckloch2 auf Stufen aktiviert -O2, -O3, -Du.
-fno-rate-Zweigwahrscheinlichkeit
Erraten Sie Verzweigungswahrscheinlichkeiten nicht mithilfe von Heuristiken.
GCC verwendet Heuristiken, um Verzweigungswahrscheinlichkeiten zu erraten, wenn sie nicht von . bereitgestellt werden
Profiling-Feedback (-fprofile-Bögen). Diese Heuristiken basieren auf dem Kontrollfluss
Graph. Wenn einige Verzweigungswahrscheinlichkeiten durch "__builtin_expect" angegeben werden, dann ist die
Heuristiken werden verwendet, um Verzweigungswahrscheinlichkeiten für den Rest des Kontrollflusses zu erraten
unter Berücksichtigung der Info "__builtin_expect". Die Wechselwirkungen zwischen den
Heuristiken und "__builtin_expect" können komplex sein und in einigen Fällen nützlich sein
um die Heuristiken zu deaktivieren, damit die Auswirkungen von "__builtin_expect" leichter zu erkennen sind
verstehen.
Die Standardeinstellung ist -fguess-Zweig-Wahrscheinlichkeit auf Ebenen -O, -O2, -O3, -Du.
-freorder-Blöcke
Grundbausteine in der kompilierten Funktion neu anordnen, um die Anzahl der genommenen zu reduzieren
Verzweigungen und Verbesserung der Codelokalität.
Auf Stufen aktiviert -O2, -O3.
-Blöcke-und-Partition neu bestellen
Neben der Neuordnung von Grundbausteinen in der kompilierten Funktion, um die
Anzahl der genommenen Zweige, teilt heiße und kalte Basisblöcke in separate Abschnitte auf
der Assembly- und .o-Dateien, um die Paging- und Cache-Lokalitätsleistung zu verbessern.
Diese Optimierung wird automatisch deaktiviert, wenn eine Ausnahmebehandlung vorhanden ist,
für Linkonce-Abschnitte, für Funktionen mit einem benutzerdefinierten Abschnittsattribut und auf beliebige
Architektur, die benannte Abschnitte nicht unterstützt.
Aktiviert für x86 auf Stufen -O2, -O3.
-freorder-Funktionen
Ordnen Sie Funktionen in der Objektdatei neu an, um die Codelokalität zu verbessern. Das ist
implementiert durch die Verwendung spezieller Unterabschnitte ".text.hot" für die am häufigsten ausgeführten
Funktionen und ".text.unwahrscheinlich" für unwahrscheinlich ausgeführte Funktionen. Die Nachbestellung erfolgt durch
Der Linker muss also das Objektdateiformat benannte Abschnitte unterstützen und der Linker muss platzieren
sie in vernünftiger Weise.
Auch Profil-Feedback muss verfügbar sein, damit diese Option wirksam wird. Sehen
-fprofile-Bögen .
Auf Stufen aktiviert -O2, -O3, -Du.
-fstrict-aliasing
Erlauben Sie dem Compiler, die strengsten Aliasing-Regeln anzunehmen, die für die Sprache gelten
zusammengestellt wird. Für C (und C++) aktiviert dies Optimierungen basierend auf dem Typ von
Ausdrücke. Insbesondere wird davon ausgegangen, dass sich ein Objekt eines Typs niemals am Ort befindet
dieselbe Adresse wie ein Objekt eines anderen Typs, es sei denn, die Typen sind fast gleich.
Ein "unsigned int" kann beispielsweise ein "int" als Alias verwenden, aber kein "void*" oder ein "double". EIN
Zeichentyp kann jeder andere Typ alias sein.
Achten Sie besonders auf Code wie diesen:
Gewerkschaft a_union {
int i;
Doppel-d;
};
int f() {
Gewerkschaft a_union t;
td = 3.0;
Rückkehr ti;
}
Die Praxis, von einem anderen Gewerkschaftsmitglied als dem letzten vorzulesen
geschrieben (genannt "type-punning") ist üblich. Sogar mit -fstrict-aliasing, Typ-
punning ist erlaubt, sofern auf den Speicher über den union-Typ zugegriffen wird. Also, die
Der obige Code funktioniert wie erwartet. Dieser Code kann jedoch nicht:
int f() {
Gewerkschaft a_union t;
int* ip;
td = 3.0;
ip = &t.i;
zurück *ip;
}
Auf ähnliche Weise greifen Sie zu, indem Sie die Adresse nehmen, den resultierenden Zeiger umwandeln und
Das Dereferenzieren des Ergebnisses hat ein undefiniertes Verhalten, selbst wenn die Umwandlung einen Union-Typ verwendet.
z.B:
int f() {
doppeltes d = 3.0;
return ((union a_union *) &d)->i;
}
Die -fstrict-aliasing Option ist auf Ebenen aktiviert -O2, -O3, -Du.
-fstrict-Überlauf
Erlauben Sie dem Compiler, abhängig von der Sprache, strenge Überlaufregeln mit Vorzeichen anzunehmen
zusammengestellt wird. Für C (und C++) bedeutet dies, dass der Überlauf beim Rechnen mit
Zahlen mit Vorzeichen sind undefiniert, was bedeutet, dass der Compiler davon ausgehen kann, dass dies nicht der Fall ist
passieren. Dies ermöglicht verschiedene Optimierungen. Der Compiler geht beispielsweise davon aus, dass
ein Ausdruck wie "i + 10 > i" ist immer wahr für "i" mit Vorzeichen. Diese Annahme ist
nur gültig, wenn Vorzeichenüberlauf undefiniert ist, da der Ausdruck falsch ist, wenn "i + 10"
Überläufe bei der Zweierkomplementarithmetik. Wenn diese Option in Kraft ist
Versuchen Sie zu bestimmen, ob eine Operation für vorzeichenbehaftete Zahlenüberläufe geschrieben werden muss
sorgfältig, um keinen Überlauf zu verursachen.
Diese Option ermöglicht es dem Compiler auch, eine strikte Zeigersemantik anzunehmen: gegeben a
Zeiger auf ein Objekt, wenn das Hinzufügen eines Offsets zu diesem Zeiger keinen Zeiger erzeugt
zum gleichen Objekt ist der Zusatz undefiniert. Damit kann der Compiler schlussfolgern
dass "p + u > p" für einen Zeiger "p" und eine vorzeichenlose ganze Zahl "u" immer wahr ist. Dies
Annahme ist nur gültig, weil Pointer Wraparound undefiniert ist, da der Ausdruck ist
false, wenn "p + u" bei der Zweierkomplementarithmetik überläuft.
Siehe auch die -fwrapv Möglichkeit. Verwenden von -fwrapv bedeutet, dass ein ganzzahliger Überlauf mit Vorzeichen . ist
vollständig definiert: es umhüllt. Wann -fwrapv verwendet wird, gibt es keinen Unterschied zwischen
-fstrict-Überlauf und -fno-strenger-Überlauf für ganze Zahlen. Mit -fwrapv bestimmte Typen
Überlauf zulässig. Zum Beispiel, wenn der Compiler beim Ausführen einen Überlauf bekommt
Arithmetik auf Konstanten, der übergelaufene Wert kann immer noch mit verwendet werden -fwrapv, Aber nicht
Andernfalls.
Die -fstrict-Überlauf Option ist auf Ebenen aktiviert -O2, -O3, -Du.
-falign-Funktionen
-falign-Funktionen=n
Richten Sie den Funktionsbeginn auf die nächste Zweierpotenz größer als aus n, überspringen zu n
Bytes. Zum Beispiel, -falign-Funktionen=32 richtet Funktionen auf die nächsten 32 Byte aus
Grenze, aber -falign-Funktionen=24 richtet sich nur dann an der nächsten 32-Byte-Grenze aus, wenn dies
kann durch Überspringen von 23 Byte oder weniger erfolgen.
-fno-align-Funktionen und -falign-Funktionen=1 sind äquivalent und bedeuten, dass Funktionen
sind nicht ausgerichtet.
Einige Assembler unterstützen dieses Flag nur, wenn n ist eine Zweierpotenz; in diesem Fall ist es
aufgerundet.
If n nicht angegeben ist oder null ist, verwenden Sie einen maschinenabhängigen Standardwert.
Auf Stufen aktiviert -O2, -O3.
-falign-Etiketten
-falign-labels=n
Richten Sie alle Verzweigungsziele an einer Zweierpotenz-Grenze aus und überspringen Sie bis zu n Bytes wie
-falign-Funktionen. Diese Option kann den Code leicht verlangsamen, da er eingefügt werden muss
Dummy-Operationen, wenn das Verzweigungsziel im üblichen Codefluss erreicht wird.
-fno-align-labels und -falign-labels=1 sind äquivalent und bedeuten, dass Labels nicht
ausgerichtet.
If -falign-Schleifen or -Falign-Sprünge zutreffend sind und größer als dieser Wert sind, dann
stattdessen werden ihre Werte verwendet.
If n nicht angegeben ist oder null ist, verwenden Sie einen maschinenabhängigen Standard, der sehr wahrscheinlich ist
sein 1, bedeutet keine Ausrichtung.
Auf Stufen aktiviert -O2, -O3.
-falign-Schleifen
-falign-loops=n
Richten Sie Schleifen an einer Zweierpotenz-Grenze aus und überspringen Sie bis zu n Bytes wie -falign-Funktionen.
Wenn die Schleifen viele Male ausgeführt werden, gleicht dies die Ausführung des Dummys aus
Operationen.
-fno-align-loops und -falign-loops=1 sind äquivalent und bedeuten, dass Schleifen nicht
ausgerichtet.
If n nicht angegeben ist oder null ist, verwenden Sie einen maschinenabhängigen Standardwert.
Auf Stufen aktiviert -O2, -O3.
-Falign-Sprünge
-falign-springt=n
Verzweigungsziele an einer Zweierpotenzgrenze ausrichten, für Verzweigungsziele, bei denen die Ziele
kann nur erreicht werden durch springen, hochspringen bis n Bytes wie -falign-Funktionen. in
in diesem Fall müssen keine Dummy-Operationen ausgeführt werden.
-fno-align-springt und -falign-jumps=1 sind äquivalent und bedeuten, dass Schleifen nicht
ausgerichtet.
If n nicht angegeben ist oder null ist, verwenden Sie einen maschinenabhängigen Standardwert.
Auf Stufen aktiviert -O2, -O3.
-Spaß-zu-einer-Zeit
Diese Option wird aus Kompatibilitätsgründen belassen. -Spaß-zu-einer-Zeit hat keine Wirkung, während
-fno-Einheit-zu-einer-Zeit impliziert -fno-toplevel-reorder und -fno-section-Anker.
Standardmäßig aktiviert.
-fno-toplevel-reorder
Ordnen Sie Funktionen, Variablen und "asm"-Anweisungen der obersten Ebene nicht neu an. Gib sie aus in
in derselben Reihenfolge, in der sie in der Eingabedatei erscheinen. Wenn diese Option verwendet wird,
nicht referenzierte statische Variablen werden nicht entfernt. Diese Option soll unterstützen
vorhandener Code, der auf einer bestimmten Reihenfolge beruht. Für neuen Code ist es besser zu verwenden
Attribute, wenn möglich.
Auf Stufe aktiviert -O0. Bei expliziter Deaktivierung impliziert dies auch -fno-section-Anker,
was sonst aktiviert ist bei -O0 bei einigen Zielen.
-fweb
Konstruiert Webs, wie sie üblicherweise für Registerzuordnungszwecke verwendet werden, und weist jedem Web zu
individuelle Pseudoregister. Auf diese Weise kann der Registerzuweisungsdurchlauf bearbeitet werden
pseudos direkt, sondern stärkt auch mehrere andere Optimierungsdurchgänge wie CSE,
Schleifenoptimierer und trivialer Totcode-Entferner. Es kann jedoch Debugging machen
unmöglich, da Variablen nicht mehr in einem "Heimatregister" verbleiben.
Standardmäßig aktiviert mit -Funroll-Schleifen.
-fganze-Programm
Angenommen, die aktuelle Kompilierungseinheit repräsentiert das gesamte Programm, das kompiliert wird.
Alle öffentlichen Funktionen und Variablen mit Ausnahme von "main" und denen, die von . zusammengeführt wurden
Attribut "external_visible" werden zu statischen Funktionen und somit optimiert
aggressiver durch interprozedurale Optimierer.
Diese Option sollte nicht in Kombination mit verwendet werden -flto. Stattdessen verlassen Sie sich auf einen Linker
Plugin soll sicherere und genauere Informationen liefern.
-flto[=n]
Diese Option führt den standardmäßigen Link-Time-Optimizer aus. Wenn es mit Quellcode aufgerufen wird,
generiert GIMPLE (eine der internen Darstellungen von GCC) und schreibt es in spezielle ELF
Abschnitte in der Objektdatei. Wenn die Objektdateien miteinander verknüpft sind, werden alle
Funktionskörper werden aus diesen ELF-Abschnitten gelesen und instanziiert, als ob sie es gewesen wären
Teil derselben Übersetzungseinheit.
Um den Link-Time-Optimizer zu verwenden, -flto und Optimierungsmöglichkeiten sollten unter angegeben werden
Kompilierzeit und während des letzten Links. Zum Beispiel:
gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o
Die ersten beiden Aufrufe von GCC speichern eine Bytecode-Darstellung von GIMPLE in Special
ELF-Sektionen im Inneren foo.o und bar.o. Der letzte Aufruf liest den GIMPLE-Bytecode
für foo.o und bar.o, führt die beiden Dateien zu einem einzigen internen Image zusammen und kompiliert
das Ergebnis wie gewohnt. Da beide foo.o und bar.o werden zu einem einzigen Bild zusammengeführt, dies
bewirkt, dass alle interprozeduralen Analysen und Optimierungen in GCC über die gesamte
zwei Dateien, als ob sie eine einzige wären. Das bedeutet zum Beispiel, dass der Inliner
Inline-Funktionen in bar.o in Funktionen in foo.o und umgekehrt.
Eine andere (einfachere) Möglichkeit zur Aktivierung der Link-Time-Optimierung ist:
gcc -o myprog -flto -O2 foo.c bar.c
Das obige generiert Bytecode für foo.c und bar.c, verschmilzt sie zu einer einzigen
GIMPLE-Darstellung und optimiert sie wie gewohnt zu produzieren meinprog.
Das einzige, was Sie im Hinterkopf behalten sollten, ist, dass Sie, um die Optimierung der Linkzeit zu aktivieren,
müssen Sie den GCC-Treiber verwenden, um den Link-Schritt auszuführen. GCC führt dann automatisch durch
Link-Time-Optimierung, wenn eines der beteiligten Objekte mit dem kompiliert wurde -flto
Befehlszeilenoption. Generell sollten Sie die zu verwendenden Optimierungsoptionen angeben
für die Link-Time-Optimierung, obwohl GCC versucht, eine Optimierung clever zu erraten
level aus den Optionen, die zur Kompilierzeit verwendet werden, wenn Sie bei link- keine angeben.
Zeit. Sie können die automatische Entscheidung, die Linkzeitoptimierung durchzuführen, jederzeit unter überschreiben
Link-Zeit durch Passieren -fno-lto zum Link-Befehl.
Um die Optimierung des gesamten Programms effektiv zu machen, ist es notwendig, bestimmte ganze
Programmannahmen. Der Compiler muss wissen, welche Funktionen und Variablen sein können
Zugriff von Bibliotheken und Laufzeit außerhalb der für die Linkzeit optimierten Unit. Wann
unterstützt vom Linker, dem Linker-Plugin (siehe -fuse-linker-plugin) geht vorbei
Informationen an den Compiler über verwendete und von außen sichtbare Symbole. Wenn das
Linker-Plugin ist nicht verfügbar, -fganze-Programm sollte verwendet werden, um den Compiler zu ermöglichen
diese Annahmen zu treffen, was zu aggressiveren Optimierungsentscheidungen führt.
Wann -fuse-linker-plugin ist dann nicht aktiviert, wenn eine Datei mit kompiliert wird -flto, der
generierte Objektdatei ist größer als eine normale Objektdatei, da sie GIMPLE enthält
Bytecodes und den üblichen finalen Code (siehe -ffat-lto-Objekte. Dies bedeutet, dass Objekt
Dateien mit LTO-Informationen können als normale Objektdateien verknüpft werden; wenn -fno-lto ist bestanden
auf den Linker werden keine interprozeduralen Optimierungen angewendet. Beachten Sie, dass wenn
-fno-fat-lto-Objekte aktiviert ist, ist die Kompilierphase schneller, aber Sie können keine ausführen
regulärer, nicht-LTO-Link auf ihnen.
Darüber hinaus sind die Optimierungsflags, die zum Kompilieren einzelner Dateien verwendet werden, nicht
unbedingt mit denen zusammenhängen, die zur Linkzeit verwendet wurden. Zum Beispiel,
gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o
Dies erzeugt einzelne Objektdateien mit nicht optimiertem Assembler-Code, aber die
resultierende binäre meinprog ist optimiert bei -O3. Wenn stattdessen die endgültige Binärzahl ist
erzeugt mit -fno-lto und dann meinprog ist nicht optimiert.
Bei der Erstellung der endgültigen Binärdatei wendet GCC nur Link-Time-Optimierungen auf diese an
Dateien, die Bytecode enthalten. Daher können Sie Objektdateien mischen und anpassen und
Bibliotheken mit GIMPLE-Bytecodes und endgültigem Objektcode. GCC wählt automatisch
welche Dateien im LTO-Modus optimiert und welche Dateien ohne weiteres verlinkt werden sollen
Verarbeitung.
Es gibt einige Codegenerierungs-Flags, die von GCC beim Generieren von Bytecodes beibehalten werden, da
sie müssen während der letzten Verbindungsstufe verwendet werden. Im Allgemeinen Optionen angegeben unter
Linkzeit überschreibt die zur Kompilierzeit angegebenen Werte.
Wenn Sie keine Optimierungsstufenoption angeben -O zur Link-Zeit berechnet dann GCC
eine basierend auf den Optimierungsstufen, die beim Kompilieren der Objektdateien verwendet wurden. Die
Hier gewinnt die höchste Optimierungsstufe.
Derzeit werden die folgenden Optionen und deren Einstellung aus der ersten Objektdatei übernommen
die es ausdrücklich spezifiziert haben: -fPIC, -fpic, -fpie, -fgemein, -fAusnahmen,
-fnon-call-ausnahmen, -fgnu-tm und die ganze -m Zielflaggen.
Bestimmte ABI-Änderungsflags müssen in allen Kompilierungseinheiten übereinstimmen und versuchen
um dies zur Link-Zeit mit einem widersprüchlichen Wert zu überschreiben, wird ignoriert. Das beinhaltet
Optionen wie -freg-struct-return und -fpcc-struct-return.
Andere Optionen wie -ffp-Vertrag, -fno-strenger-Überlauf, -fwrapv, -fno-trapv or
-fno-strict-aliasing werden an die Link-Stufe durchgereicht und konservativ zusammengeführt
für in Konflikt stehende Übersetzungseinheiten. Speziell -fno-strenger-Überlauf, -fwrapv und
-fno-trapv Vorrang haben und zum Beispiel -ffp-vertrag=aus hat Vorrang
-ffp-vertrag=schnell. Sie können sie zur Linke-Zeit überschreiben.
Es wird empfohlen, dass Sie alle am selben Link beteiligten Dateien mit kompilieren
die gleichen Optionen und geben Sie diese Optionen auch zur Linkzeit an.
Wenn LTO auf Objekte mit C-Verknüpfung stößt, die mit inkompatiblen Typen in separaten deklariert sind
zu verknüpfende Übersetzungseinheiten (undefiniertes Verhalten nach ISO C99
6.2.7) kann eine nicht-tödliche Diagnose ausgestellt werden. Das Verhalten ist beim Ausführen noch undefiniert
Zeit. Ähnliche Diagnosen können für andere Sprachen erhoben werden.
Ein weiteres Merkmal von LTO ist, dass es möglich ist, interprozedurale Optimierungen anzuwenden
auf Dateien, die in verschiedenen Sprachen geschrieben sind:
gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
Beachten Sie, dass der letzte Link fertig ist mit g ++ um die C++-Laufzeitbibliotheken zu erhalten und
-lgfortran wird hinzugefügt, um die Fortran-Laufzeitbibliotheken zu erhalten. Im Allgemeinen beim Mischen
Sprachen im LTO-Modus sollten Sie die gleichen Link-Befehlsoptionen wie beim Mischen verwenden
Sprachen in einer regulären (Nicht-LTO) Zusammenstellung.
Wenn Objektdateien, die GIMPLE-Bytecode enthalten, in einem Bibliotheksarchiv gespeichert werden, sagen wir
libfoo.a, ist es möglich, sie zu extrahieren und in einem LTO-Link zu verwenden, wenn Sie a . verwenden
Linker mit Plugin-Unterstützung. Um für LTO geeignete statische Bibliotheken zu erstellen, verwenden Sie gcc-ar
und gcc-ranlib statt ar und ranlib; um die Symbole von Objektdateien anzuzeigen mit
GIMPLE-Bytecode, verwenden gcc-nm. Diese Befehle erfordern das ar, ranlib und nm gewesen
kompiliert mit Plugin-Unterstützung. Verwenden Sie zur Linkzeit das Flag -fuse-linker-plugin zu
Stellen Sie sicher, dass die Bibliothek am LTO-Optimierungsprozess teilnimmt:
gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo
Wenn das Linker-Plugin aktiviert ist, extrahiert der Linker die benötigten GIMPLE-Dateien aus
libfoo.a und gibt sie an das laufende GCC weiter, um sie Teil des aggregierten . zu machen
GIMPLE-Bild soll optimiert werden.
Wenn Sie keinen Linker mit Plugin-Unterstützung verwenden und/oder den Linker nicht aktivieren
Plugin, dann die Objekte darin libfoo.a werden wie gewohnt extrahiert und verknüpft, aber sie
nehmen nicht am LTO-Optimierungsprozess teil. Um eine statische Bibliothek zu erstellen
sowohl für die LTO-Optimierung als auch für die übliche Verknüpfung geeignet, kompilieren Sie seine Objektdateien mit
-flto -ffat-lto-Objekte.
Linkzeitoptimierungen erfordern nicht das Vorhandensein des gesamten Programms, um zu funktionieren.
Wenn das Programm keinen Export von Symbolen erfordert, ist eine Kombination möglich
-flto und -fganze-Programm damit die interprozeduralen Optimierer mehr nutzen können
aggressive Annahmen, die zu verbesserten Optimierungsmöglichkeiten führen können. Gebrauch von
-fganze-Programm wird nicht benötigt, wenn das Linker-Plugin aktiv ist (siehe -fuse-linker-plugin).
Die aktuelle Implementierung von LTO unternimmt keinen Versuch, Bytecode zu generieren, der
portabel zwischen verschiedenen Arten von Hosts. Die Bytecode-Dateien sind versioniert und dort
ist eine strenge Versionsprüfung, sodass Bytecode-Dateien, die in einer Version von GCC generiert wurden, dies nicht tun
mit einer älteren oder neueren Version von GCC arbeiten.
Die Optimierung der Verbindungszeit funktioniert nicht gut mit der Generierung von Debugging-Informationen.
Kombination -flto mit -g ist derzeit experimentell und wird voraussichtlich unerwartete Ergebnisse liefern
Ergebnisse angezeigt
Wenn Sie das optionale angeben n, die Optimierung und Codegenerierung erfolgt zur Linkzeit
wird parallel ausgeführt mit n parallele Jobs durch Verwendung eines installierten um
Die Umgebungsvariable MACHEN kann verwendet werden, um das verwendete Programm zu überschreiben. Der Standard
Wert für n ist 1.
Sie können auch angeben -flto=Jobserver den Jobserver-Modus von GNU make zu verwenden, um zu bestimmen
die Anzahl der Paralleljobs. Dies ist nützlich, wenn das Makefile, das GCC aufruft, bereits vorhanden ist
parallel ausführen. Sie müssen a . voranstellen + zum Befehlsrezept in den Eltern
Makefile damit dies funktioniert. Diese Option funktioniert wahrscheinlich nur, wenn MACHEN ist GNU-Make.
-flto-partition=alg
Geben Sie den Partitionierungsalgorithmus an, der vom Link-Time-Optimizer verwendet wird. Der Wert ist
entweder 1to1 um eine Partitionierung anzugeben, die die ursprünglichen Quelldateien spiegelt oder balanced
um die Partitionierung in gleich große Blöcke festzulegen (wenn möglich) oder max erschaffen
neue Partition für jedes Symbol, wenn möglich. Angabe keine als Algorithmus
deaktiviert Partitionierung und Streaming vollständig. Der Standardwert ist balanced. Während
1to1 kann als Problemumgehung für verschiedene Probleme bei der Codereihenfolge verwendet werden max
Partitionierung ist nur für interne Tests vorgesehen. Der Wert dank One gibt das an
genau eine Partition sollte verwendet werden, während der Wert keine umgeht die Partitionierung und
führt den Link-Time-Optimierungsschritt direkt aus der WPA-Phase aus.
-flto-odr-type-merging
Aktivieren Sie das Streaming von verstümmelten Typennamen von C++-Typen und deren Vereinheitlichung unter
Linkzeit. Dies erhöht die Größe der LTO-Objektdateien, ermöglicht jedoch die Diagnose von One
Definition Regelverletzungen.
-flto-compression-level=n
Diese Option gibt den Komprimierungsgrad an, der für geschriebene Zwischensprachen verwendet wird
in LTO-Objektdateien und ist nur in Verbindung mit dem LTO-Modus sinnvoll (-flto).
Gültige Werte sind 0 (keine Komprimierung) bis 9 (maximale Komprimierung). Werte außerhalb davon
werden entweder auf 0 oder 9 geklemmt. Wenn die Option nicht angegeben ist, wird ein Standardwert ausgeglichen
Kompressionseinstellung verwendet wird.
-flto-Bericht
Druckt einen Bericht mit internen Details zur Funktionsweise des Link-Time-Optimizers. Die
Der Inhalt dieses Berichts variiert von Version zu Version. Es soll für GCC nützlich sein
Entwickler bei der Verarbeitung von Objektdateien im LTO-Modus (über -flto).
Standardmäßig deaktiviert
-flto-report-wpa
Like -flto-Bericht, aber nur für die WPA-Phase der Link Time Optimization drucken.
-fuse-linker-plugin
Ermöglicht die Verwendung eines Linker-Plugins während der Link-Zeit-Optimierung. Diese Option ist abhängig
zur Plugin-Unterstützung im Linker, der in Gold oder in GNU ld 2.21 oder verfügbar ist
neuer.
Diese Option ermöglicht das Extrahieren von Objektdateien mit GIMPLE-Bytecode aus der Bibliothek
Archiv. Dies verbessert die Qualität der Optimierung, indem dem Link mehr Code ausgesetzt wird.
Zeitoptimierer. Diese Informationen geben an, auf welche Symbole extern zugegriffen werden kann
(durch Nicht-LTO-Objekt oder beim dynamischen Linken). Resultierende Verbesserungen der Codequalität auf
Binärdateien (und gemeinsam genutzte Bibliotheken, die versteckte Sichtbarkeit verwenden) sind ähnlich wie
-fganze-Programm. Sehen -flto für eine Beschreibung der Wirkung dieses Flags und wie es geht
benutze es.
Diese Option ist standardmäßig aktiviert, wenn die LTO-Unterstützung in GCC aktiviert ist und GCC war
konfiguriert für die Verwendung mit einem Linker, der Plugins unterstützt (GNU ld 2.21 oder neuer oder Gold).
-ffat-lto-Objekte
Fat LTO-Objekte sind Objektdateien, die sowohl die Zwischensprache als auch die
Objektcode. Dadurch sind sie sowohl für LTO-Linking als auch für normales Linking verwendbar. Dies
Option ist nur beim Kompilieren mit . wirksam -flto und wird zur Linkzeit ignoriert.
-fno-fat-lto-Objekte verbessert die Kompilierungszeit gegenüber reinem LTO, erfordert aber die
komplette Toolchain, um sich der LTO bewusst zu sein. Es erfordert einen Linker mit Linker-Plugin-Unterstützung
für die Grundfunktionalität. Zusätzlich, nm, ar und ranlib muss Linker unterstützen
Plugins, um eine Build-Umgebung mit vollem Funktionsumfang zu ermöglichen (in der Lage, statische
Bibliotheken usw.). GCC bietet die gcc-ar, gcc-nm, gcc-ranlib Wrapper, um die zu bestehen
richtigen Optionen für diese Tools. Bei nicht fetten LTO müssen Makefiles modifiziert werden, um sie verwenden zu können
Them.
Die Standardeinstellung ist -fno-fat-lto-Objekte auf Zielen mit Linker-Plugin-Unterstützung.
-fvergleiche-elim
Identifizieren Sie nach der Registerzuweisung und der Aufteilung der Anweisungen nach der Registerzuweisung
arithmetische Anweisungen, die Prozessor-Flags ähnlich einer Vergleichsoperation berechnen
basierend auf dieser Arithmetik. Eliminieren Sie nach Möglichkeit die explizite Vergleichsoperation.
Dieser Pass gilt nur für bestimmte Ziele, die die
Vergleichsoperation, bevor die Registerzuordnung abgeschlossen ist.
Auf Stufen aktiviert -O, -O2, -O3, -Du.
-fcprop-register
Führen Sie nach der Aufteilung der Registerzuweisung und der Befehlsaufteilung nach der Registerzuweisung
ein Copy-Propagation-Pass, um zu versuchen, Planungsabhängigkeiten zu reduzieren und gelegentlich
die Kopie entfernen.
Auf Stufen aktiviert -O, -O2, -O3, -Du.
-fprofile-Korrektur
Profile, die mit einer instrumentierten Binärdatei für Multithread-Programme gesammelt wurden, können
inkonsistent aufgrund verpasster Zähleraktualisierungen. Wenn diese Option angegeben ist, verwendet GCC
Heuristiken, um solche Inkonsistenzen zu korrigieren oder zu glätten. Standardmäßig gibt GCC ein
Fehlermeldung, wenn ein inkonsistentes Profil erkannt wird.
-fprofile-dir=Weg
Legen Sie das Verzeichnis fest, in dem nach den Profildatendateien gesucht werden soll Weg. Diese Option
betrifft nur die von . erzeugten Profildaten -fprofile-generieren, -Ftest-Abdeckung,
-fprofile-Bögen und verwendet von -fprofile-verwenden und -fbranch-Wahrscheinlichkeiten und damit verbunden
Optionen. Es können sowohl absolute als auch relative Pfade verwendet werden. GCC verwendet standardmäßig die
aktuelles Verzeichnis als Weg, somit erscheint die Profildatendatei im selben Verzeichnis wie
die Objektdatei.
-fprofile-generieren
-fprofile-generieren=Weg
Aktivieren Sie die Optionen, die normalerweise für die Instrumentierung von Anwendungen verwendet werden, um ein nützliches Profil zu erstellen
zur späteren Neukompilierung mit Profil-Feedback-basierter Optimierung. Du musst benutzen
-fprofile-generieren sowohl beim Kompilieren als auch beim Binden Ihres Programms.
Die folgenden Optionen sind aktiviert: -fprofile-Bögen, -fprofile-Werte, -fvpt.
If Weg angegeben ist, betrachtet GCC die Weg um die Profil-Feedback-Datendateien zu finden.
Weitere Informationen finden Sie auch in den -fprofile-dir.
-fprofile-verwenden
-fprofile-use=Weg
Aktivieren Sie Profil-Feedback-gerichtete Optimierungen und die folgenden Optimierungen, die
sind im Allgemeinen nur mit verfügbarem Profil-Feedback profitabel: -fbranch-Wahrscheinlichkeiten,
-fvpt, -Funroll-Schleifen, -fpeel-Schleifen, -Fracer, -ftree-vektorisieren und Baum-Schleife-
Verteilungsmuster.
GCC gibt standardmäßig eine Fehlermeldung aus, wenn die Feedback-Profile nicht mit den
Quellcode. Dieser Fehler kann mit in eine Warnung umgewandelt werden -Wcoverage-Mismatch.
Beachten Sie, dass dies zu schlecht optimiertem Code führen kann.
If Weg angegeben ist, betrachtet GCC die Weg um die Profil-Feedback-Datendateien zu finden.
Weitere Informationen finden Sie auch in den -fprofile-dir.
-fauto-Profil
-fauto-profil=Weg
Aktivieren Sie stichprobenbasierte Feedback-gesteuerte Optimierungen und die folgenden Optimierungen
die im Allgemeinen nur mit verfügbarem Profil-Feedback profitabel sind:
-fbranch-Wahrscheinlichkeiten, -fvpt, -Funroll-Schleifen, -fpeel-Schleifen, -Fracer,
-ftree-vektorisieren, -finline-Funktionen, -fipa-cp, -fipa-cp-klon,
-fpredictive-commoning, -Funswitch-Schleifen, -fgcse-after-reload und
-ftree-loop-patterns verteilen.
Weg ist der Name einer Datei, die AutoFDO-Profilinformationen enthält. Wenn es weggelassen wird,
Standardmäßig ist fbdata.afdo im aktuellen Verzeichnis.
Um eine AutoFDO-Profildatendatei zu erstellen, müssen Sie Ihr Programm mit dem perf
Dienstprogramm auf einem unterstützten GNU/Linux-Zielsystem. Weitere Informationen finden Sie unter
<https://perf.wiki.kernel.org/>.
zB
Leistungsdatensatz -e br_inst_retired:near_taken -b -o perf.data \
-- dein_programm
Dann benutzen Sie die create_gcov Werkzeug zum Konvertieren der Rohprofildaten in ein Format, das
von GCC verwendet. Dazu müssen Sie auch die ungestrippte Binärdatei für Ihr Programm angeben
Werkzeug. Sehenhttps://github.com/google/autofdo>.
zB
create_gcov --binary=your_program.unstripped --profile=perf.data \
--gcov = profil.afdo
Die folgenden Optionen steuern das Compilerverhalten in Bezug auf Gleitkommaarithmetik.
Diese Optionen tauschen zwischen Geschwindigkeit und Korrektheit aus. Alle müssen speziell aktiviert werden.
-float-store
Speichern Sie keine Gleitkommavariablen in Registern und sperren Sie andere Optionen, die
kann sich ändern, ob ein Gleitkommawert aus einem Register oder Speicher entnommen wird.
Diese Option verhindert unerwünschte übermäßige Präzision bei Maschinen wie dem 68000, bei dem
die Floating-Register (des 68881) halten mehr Präzision, als ein "Double" vermutet
haben. Ähnlich für die x86-Architektur. Bei den meisten Programmen ist die übermäßige Präzision
tut nur Gutes, aber einige Programme verlassen sich auf die genaue Definition von IEEE Floating
Punkt. Verwenden -float-store für solche Programme, nachdem Sie sie geändert haben, um alle zu speichern
entsprechende Zwischenberechnungen in Variablen.
-fexcess-precision=Stil
Diese Option ermöglicht eine weitere Kontrolle über die übermäßige Präzision bei Maschinen, bei denen
Punktregister haben eine höhere Genauigkeit als die IEEE-Typen "float" und "double" und die
Der Prozessor unterstützt keine Operationen, die auf diese Typen runden. Standardmäßig,
-fexcess-precision=schnell ist in Kraft; dies bedeutet, dass Operationen in
die Genauigkeit der Register und dass sie beim Runden auf die Typen unvorhersehbar ist
im Quellcode angegeben erfolgt. Beim Kompilieren von C, wenn
-fexcess-precision=standard angegeben ist, dann folgt die Überschreitung den Regeln
spezifiziert in ISO C99; insbesondere führen sowohl Besetzungen als auch Zuweisungen dazu, dass Werte
auf ihre semantischen Typen gerundet (wobei -float-store betrifft nur Aufgaben).
Diese Option ist standardmäßig für C aktiviert, wenn eine strikte Konformitätsoption wie z
-std=c99 wird eingesetzt.
-fexcess-precision=standard ist nicht für andere Sprachen als C implementiert und hat keine
Wirkung, wenn -funsafe-mathematik-optimierungen or -ffast-mathe angegeben. Auf dem x86 ist es
hat auch keine Wirkung, wenn -mfpmath=sse or -mfpmath=sse+387 angegeben; in der ehemaligen
Fall gilt die IEEE-Semantik ohne übermäßige Genauigkeit, und im letzteren Fall ist die Rundung
unberechenbar.
-ffast-mathe
Legt die Optionen fest -fno-math-fehlernr, -funsafe-mathematik-optimierungen, -nur-endlich-mathematik,
-fno-runden-mathe, -fno-signaling-nans und -fcx-limited-range.
Diese Option bewirkt, dass das Präprozessor-Makro "__FAST_MATH__" definiert wird.
Diese Option wird von keinem aktiviert -O Option daneben -Ofast da es dazu führen kann
falsche Ausgabe für Programme, die von einer exakten Implementierung von IEEE oder ISO . abhängen
Regeln/Spezifikationen für mathematische Funktionen. Es kann jedoch schnelleren Code ergeben für
Programme, die die Garantien dieser Spezifikationen nicht benötigen.
-fno-math-fehlernr
Setzen Sie nicht "errno", nachdem Sie mathematische Funktionen aufgerufen haben, die mit einem einzigen ausgeführt werden
Anweisung, zB "sqrt". Ein Programm, das bei mathematischen Fehlern auf IEEE-Ausnahmen angewiesen ist
Handhabung kann dieses Flag für die Geschwindigkeit verwenden, während die IEEE-Arithmetik beibehalten wird
Kompatibilität.
Diese Option wird von keinem aktiviert -O Option, da dies zu einer falschen Ausgabe führen kann
für Programme, die auf eine exakte Implementierung von IEEE oder ISO . angewiesen sind
Regeln/Spezifikationen für mathematische Funktionen. Es kann jedoch schnelleren Code ergeben für
Programme, die die Garantien dieser Spezifikationen nicht benötigen.
Die Standardeinstellung ist -fmath-fehlernr.
Auf Darwin-Systemen setzt die mathematische Bibliothek niemals "errno". Es gibt also keinen Grund
für den Compiler, die Möglichkeit in Betracht zu ziehen, und -fno-math-fehlernr lernen muss die
default.
-funsafe-mathematik-optimierungen
Erlaube Optimierungen für Gleitkomma-Arithmetik, die (a) davon ausgehen, dass Argumente und
Ergebnisse gültig sind und (b) möglicherweise IEEE- oder ANSI-Standards verletzen. Bei Verwendung zur Link-Zeit,
es kann Bibliotheken oder Startdateien enthalten, die das Standard-FPU-Steuerwort ändern oder
andere ähnliche Optimierungen.
Diese Option wird von keinem aktiviert -O Option, da dies zu einer falschen Ausgabe führen kann
für Programme, die auf eine exakte Implementierung von IEEE oder ISO . angewiesen sind
Regeln/Spezifikationen für mathematische Funktionen. Es kann jedoch schnelleren Code ergeben für
Programme, die die Garantien dieser Spezifikationen nicht benötigen. Aktiviert
-fno-signed-nulls, -fno-trapping-mathe, -fassoziative-mathematik und -Reziproke-Mathematik.
Die Standardeinstellung ist -fno-unsafe-mathe-optimierungen.
-fassoziative-mathematik
Ermöglichen die erneute Zuordnung von Operanden in einer Reihe von Gleitkommaoperationen. Dies
verletzt den ISO C- und C++-Sprachstandard, indem er möglicherweise das Berechnungsergebnis ändert.
HINWEIS: Neuordnung kann das Vorzeichen von Null ändern sowie NaNs ignorieren und verhindern oder
Unterlauf oder Überlauf erstellen (und kann daher nicht für Code verwendet werden, der auf Rundung angewiesen ist
Verhalten wie "(x + 2**52) - 2**52". Kann auch Gleitkommavergleiche neu anordnen und
kann daher nicht verwendet werden, wenn geordnete Vergleiche erforderlich sind. Diese Option erfordert, dass
beide -fno-signed-nulls und -fno-trapping-mathe in Kraft sein. Außerdem macht es nicht
viel sinn mit -grundlegende-mathematik. Für Fortran wird die Option automatisch aktiviert, wenn
beide -fno-signed-nulls und -fno-trapping-mathe sind in Kraft.
Die Standardeinstellung ist -fno-assoziativ-mathe.
-Reziproke-Mathematik
Zulassen, dass der Kehrwert eines Werts verwendet wird, anstatt durch den Wert zu dividieren, wenn dies
ermöglicht Optimierungen. Zum Beispiel kann "x / y" durch "x * (1/y)" ersetzt werden, was ist
nützlich, wenn "(1/y)" einer allgemeinen Unterausdruckseliminierung unterliegt. Beachten Sie, dass dies
verliert an Genauigkeit und erhöht die Anzahl der Flops, die auf den Wert operieren.
Die Standardeinstellung ist -fno-reziproke-mathe.
-nur-endlich-mathematik
Erlaube Optimierungen für Gleitkomma-Arithmetik, die davon ausgehen, dass Argumente und
Ergebnisse sind nicht NaNs oder +-Infs.
Diese Option wird von keinem aktiviert -O Option, da dies zu einer falschen Ausgabe führen kann
für Programme, die auf eine exakte Implementierung von IEEE oder ISO . angewiesen sind
Regeln/Spezifikationen für mathematische Funktionen. Es kann jedoch schnelleren Code ergeben für
Programme, die die Garantien dieser Spezifikationen nicht benötigen.
Die Standardeinstellung ist -fno-finite-mathe-only.
-fno-signed-nulls
Erlauben Sie Optimierungen für Gleitkommaarithmetik, die das Vorzeichen von Null ignorieren.
Die IEEE-Arithmetik spezifiziert das Verhalten verschiedener +0.0- und -0.0-Werte, die dann
verbietet die Vereinfachung von Ausdrücken wie x+0.0 oder 0.0*x (auch mit
-nur-endlich-mathematik). Diese Option impliziert, dass das Vorzeichen eines Nullergebnisses nicht
von Bedeutung.
Die Standardeinstellung ist -fsigned-Nullen.
-fno-trapping-mathe
Kompilieren Sie Code unter der Annahme, dass Gleitkommaoperationen keine für den Benutzer sichtbaren . generieren können
Fallen. Diese Fallen umfassen Division durch Null, Überlauf, Unterlauf, ungenaues Ergebnis und
ungültige Operation. Diese Option erfordert, dass -fno-signaling-nans in Kraft sein.
Das Setzen dieser Option kann schnelleren Code ermöglichen, wenn man sich auf "non-stop" IEEE-Arithmetik verlässt,
zum Beispiel.
Diese Option sollte niemals von irgendjemandem aktiviert werden -O Option, da dies zu
falsche Ausgabe für Programme, die von einer exakten Implementierung von IEEE oder ISO . abhängen
Regeln/Spezifikationen für mathematische Funktionen.
Die Standardeinstellung ist -Ftrapping-Mathe.
-grundlegende-mathematik
Deaktivieren Sie Transformationen und Optimierungen, die standardmäßige Gleitkommarundungen annehmen
Verhalten. Dies ist für alle Gleitkomma-in-Ganzzahl-Konvertierungen auf Null gerundet, und
für alle anderen arithmetischen Kürzungen runden. Diese Option sollte sein
für Programme angegeben, die den FP-Rundungsmodus dynamisch ändern, oder die möglicherweise
mit einem nicht standardmäßigen Rundungsmodus ausgeführt. Diese Option deaktiviert das ständige Falten von
Gleitkommaausdrücke zur Kompilierzeit (die vom Rundungsmodus beeinflusst werden können)
und arithmetische Transformationen, die in Gegenwart von vorzeichenabhängigen . unsicher sind
Rundungsmodi.
Die Standardeinstellung ist -fno-runden-mathe.
Diese Option ist experimentell und garantiert derzeit nicht die Deaktivierung aller GCC
Optimierungen, die vom Rundungsmodus betroffen sind. Zukünftige Versionen von GCC bieten möglicherweise
feinere Kontrolle dieser Einstellung mit dem Pragma "FENV_ACCESS" von C99. Diese Befehlszeile
Option wird verwendet, um den Standardzustand für "FENV_ACCESS" anzugeben.
-fsignaling-nans
Kompilieren Sie Code unter der Annahme, dass IEEE-Signalisierungs-NaNs während des
Gleitkomma-Operationen. Das Setzen dieser Option deaktiviert Optimierungen, die sich ändern können
die Anzahl der bei signalisierenden NaNs sichtbaren Ausnahmen. Diese Option impliziert
-Ftrapping-Mathe.
Diese Option bewirkt, dass das Präprozessormakro "__SUPPORT_SNAN__" definiert wird.
Die Standardeinstellung ist -fno-signaling-nans.
Diese Option ist experimentell und garantiert derzeit nicht die Deaktivierung aller GCC
Optimierungen, die das Signalisierungsverhalten von NaN beeinflussen.
-fsingle-precision-constant
Behandeln Sie Gleitkommakonstanten als einfache Genauigkeit, anstatt sie implizit umzuwandeln
sie zu Konstanten mit doppelter Genauigkeit.
-fcx-limited-range
Wenn diese Option aktiviert ist, bedeutet dies, dass kein Schritt zur Reichweitenreduzierung erforderlich ist, wenn
komplexe Teilung durchführen. Auch wird nicht überprüft, ob das Ergebnis von a
komplexe Multiplikation oder Division ist "NaN + I*NaN", mit einem Versuch, die
Situation in diesem Fall. Die Standardeinstellung ist -fno-cx-limited-range, aber aktiviert durch
-ffast-mathe.
Diese Option steuert die Standardeinstellung des ISO C99-Pragmas "CX_LIMITED_RANGE".
Die Option gilt jedoch für alle Sprachen.
-fcx-fortran-Regeln
Komplexe Multiplikation und Division folgen den Fortran-Regeln. Reichweitenreduktion erfolgt wie
Teil einer komplexen Division, aber es wird nicht geprüft, ob das Ergebnis einer komplexen
Multiplikation oder Division ist "NaN + I*NaN", mit dem Versuch, die Situation zu retten
In diesem Fall.
Die Standardeinstellung ist -fno-cx-fortran-regeln.
Die folgenden Optionen steuern Optimierungen, die die Leistung verbessern können, aber nicht sind
aktiviert von jedem -O Optionen. Dieser Abschnitt enthält experimentelle Optionen, die zu
defekter Code.
-fbranch-Wahrscheinlichkeiten
Nach dem Ausführen eines mit kompilierten Programms -fprofile-Bögen, Sie können es ein zweites Mal kompilieren
Verwendung von -fbranch-Wahrscheinlichkeiten, um Optimierungen basierend auf der Häufigkeit zu verbessern
jeder Zweig wurde genommen. Wenn ein mit kompiliertes Programm -fprofile-Bögen ausgeht, es spart
arc-Ausführung zählt zu einer Datei namens Quellname.gcda für jede Quelldatei. Die
Informationen in dieser Datei sind stark abhängig von der Struktur der generierten
Code, daher müssen Sie für beide den gleichen Quellcode und die gleichen Optimierungsoptionen verwenden
Zusammenstellungen.
Mit -fbranch-Wahrscheinlichkeiten, GCC setzt a REG_BR_PROB Hinweis zu jedem JUMP_INSN und
CALL_INSN. Diese können verwendet werden, um die Optimierung zu verbessern. Derzeit werden sie nur verwendet
an einem Ort: in reorg.c, anstatt zu raten, welchen Pfad eine Verzweigung am wahrscheinlichsten nimmt
nehmen Sie die REG_BR_PROB Werte werden verwendet, um genau zu bestimmen, welcher Weg eingeschlagen wird mehr
häufig.
-fprofile-Werte
In Kombination mit -fprofile-Bögen, es fügt Code hinzu, damit einige Daten über Werte von
Ausdrücke im Programm gesammelt.
Mit -fbranch-Wahrscheinlichkeiten, liest es die aus den Profiling-Werten von gesammelten Daten zurück
Ausdrücke für die Verwendung in Optimierungen.
Aktiviert mit -fprofile-generieren und -fprofile-verwenden.
-fprofile-reorder-Funktionen
Die Neuordnung von Funktionen basierend auf der Profilinstrumentierung erfasst die erste Ausführungszeit
einer Funktion und ordnet diese Funktionen in aufsteigender Reihenfolge.
Aktiviert mit -fprofile-verwenden.
-fvpt
In Kombination mit -fprofile-Bögen, weist diese Option den Compiler an, Code zu . hinzuzufügen
Informationen über Werte von Ausdrücken sammeln.
Mit -fbranch-Wahrscheinlichkeiten, liest es die gesammelten Daten zurück und führt die
darauf basierende Optimierungen. Derzeit umfassen die Optimierungen die Spezialisierung von
Divisionsoperationen unter Verwendung des Wissens über den Wert des Nenners.
-Freinamen-Register
Versuchen Sie, falsche Abhängigkeiten im geplanten Code zu vermeiden, indem Sie die verbleibenden Register verwenden
über nach Registerzuordnung. Von dieser Optimierung profitieren vor allem Verarbeiter mit Losen
von Registern. Abhängig vom Debug-Informationsformat, das vom Ziel verwendet wird,
es kann jedoch das Debuggen unmöglich machen, da Variablen nicht mehr in einem "Zuhause" bleiben
registrieren".
Standardmäßig aktiviert mit -Funroll-Schleifen und -fpeel-Schleifen.
-fSchedule-Fusion
Führt einen zielabhängigen Durchlauf über den Instruktionsstrom durch, um Instruktionen zu planen
gleichen Typs zusammen, weil die Zielmaschine sie effizienter ausführen kann, wenn sie
im Anweisungsfluss nebeneinander liegen.
Auf Stufen aktiviert -O2, -O3, -Du.
-Fracer
Führen Sie eine Schwanzduplizierung durch, um die Superblockgröße zu vergrößern. Diese Transformation vereinfacht
Der Kontrollfluss der Funktion ermöglicht es anderen Optimierungen, eine bessere Arbeit zu leisten.
Aktiviert mit -fprofile-verwenden.
-Funroll-Schleifen
Entrollen Sie Schleifen, deren Anzahl der Iterationen zur Kompilierzeit oder nach . bestimmt werden kann
Einstieg in die Schleife. -Funroll-Schleifen impliziert -frerun-cse-after-loop, -fweb und
-Freinamen-Register. Es aktiviert auch das vollständige Abschälen der Schlaufen (dh vollständiges Entfernen von
Schleifen mit einer kleinen konstanten Anzahl von Iterationen). Diese Option macht den Code größer und
kann es schneller laufen lassen oder nicht.
Aktiviert mit -fprofile-verwenden.
-funroll-all-loops
Entrollen Sie alle Schleifen, auch wenn ihre Anzahl der Iterationen unsicher ist, wenn die Schleife ist
trat ein. Dies führt normalerweise dazu, dass Programme langsamer ausgeführt werden. -funroll-all-loops impliziert die
gleiche Möglichkeiten wie -Funroll-Schleifen.
-fpeel-Schleifen
Schält Schleifen, für die genügend Informationen vorhanden sind, dass sie nicht viel rollen (von
Profil-Feedback). Es aktiviert auch das vollständige Abschälen der Schlaufen (dh vollständiges Entfernen von
Schleifen mit kleiner konstanter Anzahl von Iterationen).
Aktiviert mit -fprofile-verwenden.
-fmove-loop-invarianten
Aktiviert den schleifeninvarianten Bewegungsdurchlauf im RTL-Schleifenoptimierer. Auf Stufe aktiviert
-O1
-Funswitch-Schleifen
Verschieben Sie Zweige mit schleifeninvarianten Bedingungen aus der Schleife, mit Duplikaten der
Schleife auf beiden Zweigen (geändert entsprechend dem Ergebnis der Bedingung).
-fFunktions-Abschnitte
-fdata-Abschnitte
Platzieren Sie jede Funktion oder jedes Datenelement in einem eigenen Abschnitt in der Ausgabedatei, wenn das Ziel
unterstützt beliebige Abschnitte. Der Name der Funktion oder der Name des Datenelements
bestimmt den Namen des Abschnitts in der Ausgabedatei.
Verwenden Sie diese Optionen auf Systemen, auf denen der Linker Optimierungen zur Verbesserung durchführen kann
Referenzort im Instruktionsraum. Die meisten Systeme, die das ELF-Objekt verwenden
-Format und SPARC-Prozessoren, auf denen Solaris 2 ausgeführt wird, verfügen über Linker mit solchen Optimierungen.
AIX kann diese Optimierungen in Zukunft haben.
Verwenden Sie diese Optionen nur, wenn sich daraus erhebliche Vorteile ergeben. Wenn du
Wenn Sie diese Optionen angeben, erstellen der Assembler und der Linker größere Objekte und ausführbare Dateien
Dateien und sind auch langsamer. Sie können nicht verwenden gprof auf allen Systemen, wenn Sie dies angeben
Option, und Sie können Probleme beim Debuggen haben, wenn Sie sowohl diese Option als auch . angeben
-g.
-fbranch-target-load-optimize
Führen Sie vor dem Prolog-/Epilog-Threading eine Ladeoptimierung für das Verzweigungszielregister durch.
Die Verwendung von Zielregistern kann in der Regel nur während des Neuladens offengelegt werden, also heben
Lasten aus Schleifen und das Inter-Block-Scheduling erfordert eine separate Optimierung
bestehen.
-fbranch-target-load-optimize2
Führen Sie nach dem Prolog-/Epilog-Threading eine Ladeoptimierung für das Verzweigungszielregister durch.
-fbtr-bb-exklusiv
Wenn Sie die Ladeoptimierung für das Verzweigungszielregister durchführen, verwenden Sie das Verzweigungsziel nicht wieder
Register innerhalb eines beliebigen Basisblocks.
-stapelschutz
Geben Sie zusätzlichen Code aus, um auf Pufferüberläufe zu prüfen, z. B. Stack-Smashing-Angriffe. Dies
Dies geschieht durch Hinzufügen einer Guard-Variablen zu Funktionen mit anfälligen Objekten. Dies
enthält Funktionen, die "alloca" aufrufen, und Funktionen mit Puffern, die größer als 8 Byte sind.
Die Guards werden bei der Eingabe einer Funktion initialisiert und dann überprüft, wenn die
Funktion beendet. Schlägt ein Guard-Check fehl, wird eine Fehlermeldung ausgegeben und das Programm
Ausgänge.
-fstack-protector-all
Like -stapelschutz außer dass alle Funktionen geschützt sind.
-fstack-protector-stark
Like -stapelschutz enthält aber zusätzliche zu schützende Funktionen --- diese
die über lokale Array-Definitionen verfügen oder Verweise auf lokale Rahmenadressen haben.
-fstack-protector-explizit
Like -stapelschutz schützt aber nur die Funktionen, die die
"stack_protect"-Attribut
-fstdarg-opt
Optimieren Sie den Prolog von variadischen Argumentfunktionen in Bezug auf deren Verwendung
Argumente.
HINWEIS: In Ubuntu 14.10 und späteren Versionen -fstack-protector-stark wird aktiviert durch
Standard für C, C++, ObjC, ObjC++, wenn keiner von -fno-Stack-Protektor, -nostdlib, Noch
-freistehend gefunden werden.
-fsection-Anker
Versuchen Sie, die Anzahl der symbolischen Adressberechnungen zu reduzieren, indem Sie einen gemeinsamen "Anker" verwenden.
Symbole, um nahegelegene Objekte anzusprechen. Diese Transformation kann helfen, die Zahl zu reduzieren
von GOT-Einträgen und GOT-Zugriffen auf einige Ziele.
Zum Beispiel die Implementierung der folgenden Funktion "foo":
statisch int a, b, c;
int foo (void) {return a + b + c; }
berechnet normalerweise die Adressen aller drei Variablen, aber wenn Sie es mit kompilieren
-fsection-Anker, greift es stattdessen von einem gemeinsamen Ankerpunkt aus auf die Variablen zu. Die
Der Effekt ähnelt dem folgenden Pseudocode (der kein gültiges C ist):
int foo (leer)
{
registrieren int *xr = &x;
Rückgabe xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}
Nicht alle Ziele unterstützen diese Option.
--param Name=Wert
An einigen Stellen verwendet GCC verschiedene Konstanten, um den Optimierungsgrad zu steuern, der
ist fertig. GCC enthält beispielsweise keine Inline-Funktionen, die mehr als ein bestimmtes enthalten
Anzahl der Anweisungen. Sie können einige dieser Konstanten über die Befehlszeile steuern
Verwendung der --param .
Die Namen bestimmter Parameter und die Bedeutung der Werte sind an die
Interna des Compilers und können in Zukunft ohne vorherige Ankündigung geändert werden
Veröffentlicht.
In jedem Fall ist die Wert ist eine ganze Zahl. Die zulässigen Auswahlmöglichkeiten für Name sind:
vorhersehbares-Branchenergebnis
Wenn vorhergesagt wird, dass die Verzweigung mit einer niedrigeren Wahrscheinlichkeit als dieser Schwellenwert genommen wird
(in Prozent), dann gilt sie als gut vorhersehbar. Der Standardwert ist 10.
Max-Crossjump-Kanten
Die maximale Anzahl eingehender Kanten, die beim Cross-Jumping berücksichtigt werden sollen. Der Algorithmus
genutzt von -fCrossspringen ist O(N^2) in der Anzahl der Kanten, die an jedem Block ankommen.
Steigende Werte bedeuten eine aggressivere Optimierung, was die Kompilierungszeit verkürzt
erhöhen mit wahrscheinlich kleiner Verbesserung der ausführbaren Größe.
min-crossjump-insns
Die Mindestanzahl von Anweisungen, die am Ende von zwei Blöcken abgeglichen werden müssen
bevor Cross-Jumping auf ihnen durchgeführt wird. Dieser Wert wird ignoriert im Fall
wobei alle Anweisungen in dem Block, von dem aus gesprungen wird, übereinstimmen. Die
Standardwert ist 5.
max-grow-copy-bb-insns
Der maximale Codegrößen-Erweiterungsfaktor beim Kopieren von Basisblöcken anstelle von
Springen. Die Erweiterung ist relativ zu einer Sprunganweisung. Der Standardwert ist
8.
max-goto-duplication-insns
Die maximale Anzahl von Anweisungen, die in einen Block dupliziert werden sollen, der zu a springt
berechnet goto. Um O(N^2)-Verhalten in einer Reihe von Durchgängen zu vermeiden, werden GCC-Faktoren
Gotos zu einem frühen Zeitpunkt des Kompilierungsprozesses berechnet und erst so spät wie
möglich. Nur berechnete Sprünge am Ende eines Basisblocks mit max.
goto-duplication-insns werden nicht berücksichtigt. Der Standardwert ist 8.
max-delay-slot-insn-suche
Die maximale Anzahl von Anweisungen, die bei der Suche nach einer Anweisung zu berücksichtigen sind
einen Delay-Slot füllen. Wenn mehr als diese willkürliche Anzahl von Anweisungen
gesucht, ist die Zeitersparnis durch das Ausfüllen des Verzögerungsslots minimal, also hör auf
suchend. Steigende Werte bedeuten eine aggressivere Optimierung, wodurch die
Kompilierungszeiterhöhung mit wahrscheinlich kleiner Verbesserung der Ausführungszeit.
Max-Delay-Slot-Live-Suche
Beim Versuch, Delay-Slots zu füllen, ist die maximale Anzahl der zu berücksichtigenden Anweisungen
bei der Suche nach einem Block mit gültigen Live-Registerinformationen. Diese erhöhen
willkürlich gewählter Wert bedeutet aggressivere Optimierung, erhöht die
Kompilierungszeit. Dieser Parameter sollte entfernt werden, wenn der Verzögerungsschlitzcode ist
umgeschrieben, um den Kontrollflussgraphen beizubehalten.
max-gcse-speicher
Die ungefähre maximale Speichermenge, die für die Ausführung zugewiesen werden kann
die globale Optimierung der Eliminierung gemeinsamer Unterausdrücke. Wenn mehr Speicher als
angegeben ist, wird die Optimierung nicht durchgeführt.
max-gcse-insertion-ratio
Wenn das Verhältnis von Expressionseinfügungen zu -Deletionen größer ist als dieser Wert für
einen beliebigen Ausdruck, dann fügt RTL PRE den Ausdruck ein oder entfernt ihn und verlässt somit
teilweise redundante Berechnungen im Befehlsstrom. Der Standardwert ist
20
Maximale-ausstehende-Listenlänge
Die maximale Anzahl ausstehender Abhängigkeiten, die die Planung vor dem Leeren der
Ist-Zustand und Neubeginn. Große Funktionen mit wenigen Nebenstellen oder Aufrufen können
Erstellen Sie übermäßig große Listen, die unnötig Speicher und Ressourcen verbrauchen.
max-modulo-backtrack-versuche
Die maximale Anzahl von Backtrack-Versuchen, die der Scheduler bei Modulo
eine Schleife planen. Größere Werte können die Kompilierungszeit exponentiell erhöhen.
max-inline-insns-single
Mehrere Parameter steuern den in GCC verwendeten Baum-Inliner. Diese Zahl setzt die
maximale Anzahl von Anweisungen (gezählt in der internen Darstellung von GCC) in a
einzelne Funktion, die der Baum-Inliner für das Inlining berücksichtigt. Das betrifft nur
Inline deklarierte Funktionen und in einer Klassendeklaration (C++) implementierte Methoden.
Der Standardwert ist 400.
max-inline-insns-auto
Wenn Sie verwenden, -finline-Funktionen (enthalten in -O3), viele Funktionen, die
ansonsten nicht für das Inlining durch den Compiler in Betracht gezogen werden. Zu
diese Funktionen, eine andere (restriktivere) Grenze im Vergleich zu Funktionen
deklariert inline angewendet werden kann. Der Standardwert ist 40.
Inline-Min-Beschleunigung
Wenn die geschätzte Leistungsverbesserung der Laufzeit von Anrufer + Anrufer diese überschreitet
Schwellwert (in Prozent), die Funktion kann unabhängig vom Grenzwert inline integriert werden
--param max-inline-insns-single und --param max-inline-insns-auto.
große-funktions-insns
Die Grenze, die wirklich große Funktionen angibt. Für Funktionen größer als diese Grenze
nach dem Inlining wird das Inlining eingeschränkt durch --param großes Funktionswachstum. Dies
Parameter ist in erster Linie nützlich, um extreme Kompilierungszeiten zu vermeiden, die durch nicht-
lineare Algorithmen, die vom Backend verwendet werden. Der Standardwert ist 2700.
großes Funktionswachstum
Gibt das maximale Wachstum einer großen Funktion durch Inline in Prozent an. Die
Der Standardwert ist 100, wodurch das Wachstum großer Funktionen auf das 2.0-fache des Originals begrenzt wird
Größe.
große-einheit-insns
Der Grenzwert, der eine große Übersetzungseinheit angibt. Wachstum durch Inlining von Einheiten
größer als diese Grenze ist begrenzt durch --param Inline-Einheit-Wachstum. Für kleine Einheiten
das könnte zu eng sein. Betrachten wir zum Beispiel eine Einheit bestehend aus der Funktion A
das ist inline und B, das A nur dreimal anruft. Wenn B relativ zu A klein ist,
das Wachstum der Einheit beträgt 300\% und dennoch ist ein solches Inlining sehr vernünftig. Für sehr große
Einheiten, die aus kleinen inlinebaren Funktionen bestehen, jedoch das gesamte Einheitenwachstum
Begrenzung ist erforderlich, um eine exponentielle Explosion der Codegröße zu vermeiden. Also für kleinere
Einheiten wird die Größe erhöht auf --param große-einheit-insns vor dem Auftragen --param
Inline-Einheit-Wachstum. Der Standardwert ist 10000.
Inline-Einheit-Wachstum
Gibt das maximale Gesamtwachstum der Kompilierungseinheit an, das durch Inlining verursacht wird. Die
Der Standardwert ist 20, wodurch das Einheitenwachstum auf das 1.2-fache der ursprünglichen Größe begrenzt wird. Kalt
Funktionen (entweder über ein Attribut oder durch Profil-Feedback als kalt gekennzeichnet) sind nicht
in die Einheitsgröße eingerechnet.
Ipcp-Einheit-Wachstum
Gibt das maximale Gesamtwachstum der Kompilierungseinheit an, das durch interprozedurale . verursacht wird
ständige Ausbreitung. Der Standardwert ist 10, wodurch das Einheitenwachstum auf 1.1 . begrenzt wird
mal die Originalgröße.
Großstapel-Rahmen
Der Grenzwert, der große Stapelrahmen angibt. Während des Inlinings versucht der Algorithmus
um diese Grenze nicht zu sehr zu überschreiten. Der Standardwert ist 256 Byte.
Large-Stack-Frame-Wachstum
Gibt das maximale Wachstum großer Stack-Frames durch Inline in Prozent an.
Der Standardwert ist 1000, wodurch das Wachstum von großen Stack-Frames auf das 11-fache begrenzt wird
Originalgröße.
max-inline-insns-rekursiv
max-inline-insns-rekursiv-auto
Gibt die maximale Anzahl von Anweisungen an, die eine Out-of-Line-Kopie eines Selbst-
Die rekursive Inline-Funktion kann durch rekursives Inlining erweitert werden.
--param max-inline-insns-rekursiv gilt für inline deklarierte Funktionen. Zum
Funktionen, die nicht inline deklariert sind, rekursives Inlining geschieht nur, wenn
-finline-Funktionen (enthalten in -O3) aktiviert; --param max-inline-insns-
rekursiv-auto gilt stattdessen. Der Standardwert ist 450.
max-inline-rekursive-tiefe
max-inline-rekursive-tiefe-auto
Gibt die maximale Rekursionstiefe für das rekursive Inlining an.
--param max-inline-rekursive-tiefe gilt für inline deklarierte Funktionen. Zum
Funktionen, die nicht inline deklariert sind, rekursives Inlining geschieht nur, wenn
-finline-Funktionen (enthalten in -O3) aktiviert; --param max-inline-rekursiv-
Tiefenautomatik gilt stattdessen. Der Standardwert ist 8.
min-inline-rekursive-Wahrscheinlichkeit
Rekursives Inlining ist nur für Funktionen mit tiefer Rekursion profitabel
durchschnittlich und kann die Funktion mit geringer Rekursionstiefe beeinträchtigen, indem die
Prologgröße oder Komplexität des Funktionskörpers an andere Optimierer weitergeben.
Wenn Profil-Feedback verfügbar ist (siehe -fprofile-generieren) die eigentliche Rekursion
Tiefe kann aus der Wahrscheinlichkeit erraten werden, dass die Funktion über einen bestimmten Aufruf wiederkehrt
Ausdruck. Dieser Parameter beschränkt Inlining nur auf Aufrufausdrücke, deren
Wahrscheinlichkeit überschreitet den angegebenen Schwellenwert (in Prozent). Der Standardwert ist 10.
Early-Inlining-Insns
Geben Sie das Wachstum an, das der frühe Inliner erzeugen kann. Tatsächlich erhöht es die Menge
des Inlinings für Code, der eine große Abstraktionseinbuße hat. Der Standardwert ist 14.
max-early-inliner-iterationen
Limit der Iterationen des frühen Inliners. Dies begrenzt im Grunde die Anzahl der
verschachtelte indirekte Aufrufe, die der frühe Inliner auflösen kann. Tiefere Ketten sind noch
durch spätes Inlining behandelt.
comdat-sharing-wahrscheinlichkeit
Wahrscheinlichkeit (in Prozent), dass C++-Inline-Funktion mit comdat-Sichtbarkeit
über mehrere Kompilierungseinheiten freigegeben. Der Standardwert ist 20.
Profil-Funktion-interne-ID
Ein Parameter, um zu steuern, ob die interne Funktions-ID in der Profildatenbank verwendet werden soll
Schau hoch. Wenn der Wert 0 ist, verwendet der Compiler eine ID, die auf der Funktion basiert
Assemblername und Dateiname, wodurch alte Profildaten quellentoleranter werden
Änderungen wie das Neuordnen von Funktionen usw. Der Standardwert ist 0.
min-vect-schleifengebunden
Die minimale Anzahl von Iterationen, unter denen Schleifen nicht vektorisiert werden, wenn
-ftree-vektorisieren wird genutzt. Die Anzahl der Iterationen nach der Vektorisierung muss
größer als der durch diese Option angegebene Wert sein, um die Vektorisierung zu ermöglichen. Die
Standardwert ist 0.
gcse-Kosten-Entfernungs-Verhältnis
Skalierungsfaktor bei der Berechnung der maximalen Entfernung, um die ein Ausdruck verschoben werden kann
GCSE-Optimierungen. Dies wird derzeit nur im Code-Hoisting-Pass unterstützt.
Je größer das Verhältnis, desto aggressiver ist das Hochziehen von Code mit simple
Ausdrücke, dh die Ausdrücke, die weniger gekostet haben als gcse-uneingeschränkt-
kosten. Die Angabe von 0 deaktiviert das Hochziehen einfacher Ausdrücke. Der Standardwert ist
10
gcse-unbeschränkte-Kosten
Kosten, grob gemessen als die Kosten einer einzelnen typischen Maschinenanweisung, bei
welche GCSE-Optimierungen die Entfernung, die ein Ausdruck zurücklegen kann, nicht einschränken.
Dies wird derzeit nur im Code-Hoisting-Pass unterstützt. Je geringer die Kosten,
desto aggressiver ist das Hochziehen von Code. Wenn Sie 0 angeben, können alle Ausdrücke
uneingeschränkte Entfernungen zurücklegen. Der Standardwert ist 3.
max-Hubtiefe
Die Suchtiefe im Dominatorbaum nach zu hebenden Ausdrücken. Das wird verwendet
um quadratisches Verhalten im Hebealgorithmus zu vermeiden. Der Wert 0 begrenzt nicht
auf der Suche, kann aber die Kompilierung riesiger Funktionen verlangsamen. Der Standardwert
ist 30.
max-tail-merge-vergleiche
Die maximale Anzahl ähnlicher BBs, mit denen ein BB verglichen werden kann. Dies wird verwendet, um zu vermeiden
quadratisches Verhalten beim Zusammenführen von Baumschweifen. Der Standardwert ist 10.
max-tail-merge-iterationen
Die maximale Anzahl von Iterationen des Durchlaufs der Funktion. Das ist gewohnt
begrenzen Sie die Kompilierungszeit beim Zusammenführen von Treetails. Der Standardwert ist 2.
max-entrollte-insns
Die maximale Anzahl von Anweisungen, die eine Schleife möglicherweise abrollen muss. Wenn eine Schleife
ausgerollt wird, bestimmt dieser Parameter auch, wie oft der Schleifencode
ausgerollt.
max-durchschnittliche-entrollte-insns
Die maximale Anzahl von Anweisungen, die durch Wahrscheinlichkeiten ihrer Ausführung beeinflusst werden, die
eine Schleife muss möglicherweise abgerollt werden. Wenn eine Schleife abgerollt wird, wird dieser Parameter auch
bestimmt, wie oft der Schleifencode entrollt wird.
Max-Unroll-Zeiten
Die maximale Anzahl von Abrollvorgängen einer einzelnen Schleife.
max-geschälte-insns
Die maximale Anzahl von Anweisungen, die eine Schleife möglicherweise geschält werden muss. Wenn eine Schleife
abgezogen wird, bestimmt dieser Parameter auch, wie oft der Loop-Code abgezogen wird.
Max-Peel-Zeiten
Die maximale Anzahl von Peelings einer einzelnen Schleife.
max-peel-Äste
Die maximale Anzahl von Zweigen auf dem heißen Pfad durch die abgezogene Sequenz.
max-komplett-geschält-insns
Die maximale Anzahl von Insns einer vollständig geschälten Schleife.
max-komplett-Schälzeiten
Die maximale Anzahl von Iterationen einer Schleife, die für ein vollständiges Schälen geeignet ist.
max-komplett-Peel-Loop-Nest-Tiefe
Die maximale Tiefe eines Schlingennests, die für ein vollständiges Schälen geeignet ist.
max-unswitch-insns
Die maximale Anzahl von insns einer nicht geschalteten Schleife.
max-unswitch-level
Die maximale Anzahl von nicht geschalteten Zweigen in einer einzelnen Schleife.
lim-teuer
Die minimalen Kosten eines teuren Ausdrucks in der schleifeninvarianten Bewegung.
iv-betrachte-alle-Kandidaten-gebunden
Gebunden an die Anzahl der Kandidaten für Induktionsvariablen, unterhalb derer alle Kandidaten
werden für jede Verwendung bei der Optimierung von Induktionsvariablen berücksichtigt. Wenn es gibt
mehr Kandidaten als diese, nur die relevantesten werden als vermieden angesehen
quadratische Zeitkomplexität.
iv-max-in Betracht gezogene Anwendungen
Die Optimierungen der Induktionsvariablen geben Schleifen auf, die mehr Induktion enthalten
variable Verwendungen.
iv-immer-prune-cand-set-bound
Wenn die Anzahl der Kandidaten in der Menge kleiner als dieser Wert ist, versuchen Sie immer,
Entfernen Sie unnötige ivs aus dem Set, wenn Sie ein neues hinzufügen.
scev-max-expr-größe
Beschränkt auf die Größe von Ausdrücken, die im skalaren Evolutionsanalysator verwendet werden. Groß
Ausdrücke verlangsamen den Analysator.
scev-max-expr-komplexität
Beschränkt auf die Komplexität der Ausdrücke im skalaren Evolutionsanalysator.
Komplexe Ausdrücke verlangsamen den Analysator.
Omega-max-vars
Die maximale Anzahl von Variablen in einem Omega-Einschränkungssystem. Der Standardwert
ist 128.
Omega-max-geqs
Die maximale Anzahl von Ungleichungen in einem Omega-Beschränkungssystem. Der Standard
Wert ist 256.
Omega-max-eqs
Die maximale Anzahl von Gleichheiten in einem Omega-Beschränkungssystem. Der Standardwert
ist 128.
omega-max-wildcards
Die maximale Anzahl von Platzhaltervariablen, die der Omega-Solver einfügen kann.
Der Standardwert ist 18.
Omega-Hash-Tabellengröße
Die Größe der Hash-Tabelle im Omega-Solver. Der Standardwert ist 550.
Omega-Max-Schlüssel
Die maximale Anzahl von Schlüsseln, die vom Omega-Solver verwendet werden. Der Standardwert ist 500.
Omega-eliminieren-redundante-Einschränkungen
Wenn auf 1 gesetzt, verwenden Sie teure Methoden, um alle redundanten Einschränkungen zu beseitigen. Die
Standardwert ist 0.
vect-max-version-für-ausrichtungsprüfungen
Die maximale Anzahl von Laufzeitprüfungen, die beim Ausführen einer Schleife durchgeführt werden können
Versionierung für das Alignment im Vectorizer.
vect-max-version-for-alias-checks
Die maximale Anzahl von Laufzeitprüfungen, die beim Ausführen einer Schleife durchgeführt werden können
Versionierung für Alias im Vectorizer.
vect-max-peeling-for-alignment
Die maximale Anzahl von Loop-Peelings, um die Zugriffsausrichtung für den Vektorisierer zu verbessern. Wert
-1 bedeutet "keine Begrenzung".
Max-Iterationen-to-Track
Die maximale Anzahl von Iterationen einer Schleife den Brute-Force-Algorithmus zur Analyse
der Anzahl der Iterationen der Schleife versucht auszuwerten.
heiß-bb-count-ws-permille
Eine grundlegende Blockprofilanzahl wird als heiß angesehen, wenn sie zu den gegebenen beiträgt
Permillage (dh 0...1000) der gesamten profilierten Ausführung.
Hot-BB-Frequenz-Fraktion
Wählen Sie einen Bruchteil der Eingangsblockhäufigkeit der Ausführungen des Basisblocks in
Funktion gegebener Basisblock muss als heiß betrachtet werden.
max-vorhergesagte-Iterationen
Die maximale Anzahl von Schleifeniterationen, die wir statisch vorhersagen. Dies ist nützlich in
Fälle, in denen eine Funktion eine einzelne Schleife mit bekannter Grenze und eine weitere Schleife enthält
mit unbekannter Bindung. Die bekannte Anzahl von Iterationen wird korrekt vorhergesagt, während
die unbekannte Anzahl von Iterationen im Durchschnitt auf ungefähr 10. Dies bedeutet, dass die Schleife
ohne Grenzen erscheint relativ zum anderen künstlich kalt.
eingebaute-erwarten-wahrscheinlichkeit
Steuern Sie die Wahrscheinlichkeit, dass der Ausdruck den angegebenen Wert hat. Dies
Parameter nimmt einen Prozentsatz (dh 0 ... 100) als Eingabe an. Die Ausfallwahrscheinlichkeit
von 90 wird empirisch erhalten.
ausrichten-schwelle
Wählen Sie einen Bruchteil der maximalen Ausführungshäufigkeit eines Basisblocks in a
Funktion zum Ausrichten des Grundblocks.
align-loop-iterationen
Eine Schleife, von der erwartet wird, dass sie mindestens die ausgewählte Anzahl von Iterationen wiederholt, wird ausgerichtet.
Tracer-dynamische-Abdeckung
Tracer-dynamische-Abdeckung-Feedback
Dieser Wert wird verwendet, um die Superblockbildung zu begrenzen, sobald der angegebene Prozentsatz von
ausgeführte Anweisungen abgedeckt sind. Dies begrenzt eine unnötige Codegrößenerweiterung.
Die Tracer-dynamische-Abdeckung-Feedback Parameter wird nur verwendet, wenn Profil-Feedback
ist verfügbar. Die realen Profile (im Gegensatz zu statisch geschätzten) sind
viel weniger ausgeglichen, so dass der Schwellenwert größer sein kann.
Tracer-Max-Code-Wachstum
Stoppen Sie die Endduplizierung, sobald das Codewachstum einen bestimmten Prozentsatz erreicht hat. Das ist ein
eher künstliche Grenze, da die meisten Duplikate später im Kreuz eliminiert werden
Springen, so dass es auf viel höhere Werte als das gewünschte Codewachstum eingestellt werden kann.
Tracer-Min-Zweig-Verhältnis
Stoppen Sie das umgekehrte Wachstum, wenn die umgekehrte Wahrscheinlichkeit der besten Kante geringer ist
Schwelle (in Prozent).
Tracer-Min-Zweig-Verhältnis
Tracer-Min-Zweig-Verhältnis-Feedback
Stoppen Sie das Vorwärtswachstum, wenn die Wahrscheinlichkeit der besten Kante unter diesem Schwellenwert liegt.
ähnlich zu Tracer-dynamische-Abdeckung zwei Werte sind vorhanden, einer für die Kompilierung
für Profil-Feedback und eine für die Kompilierung ohne. Der Wert für die Kompilierung
mit Profil-Feedback muss konservativer (höher) sein, um
Tracer wirksam.
max-cse-Pfadlänge
Die maximale Anzahl von Basisblöcken auf dem Pfad, die CSE berücksichtigt. Der Standardwert ist 10.
max-cse-insns
Die maximale Anzahl von Anweisungen, die CSE vor dem Spülen verarbeitet. Die Standardeinstellung ist
1000
ggc-min-erweitern
GCC verwendet einen Garbage Collector, um seine eigene Speicherzuweisung zu verwalten. Dieser Parameter
gibt den Mindestprozentsatz an, um den der Heap des Garbage Collectors sein soll
erlaubt, zwischen Sammlungen zu erweitern. Wenn Sie dies tun, kann die Kompilierungsgeschwindigkeit verbessert werden.
es hat keine Auswirkung auf die Codegenerierung.
Der Standardwert ist 30 % + 70 % * (RAM/1 GB) mit einer Obergrenze von 100 %, wenn RAM >= 1 GB ist.
Wenn "getrlimit" verfügbar ist, ist der Begriff "RAM" der kleinste tatsächliche RAM und
"RLIMIT_DATA" oder "RLIMIT_AS". Wenn GCC nicht in der Lage ist, den RAM auf einem bestimmten
Plattform wird die untere Grenze von 30 % verwendet. Einstellen dieses Parameters und gc-min-
Wurfgröße auf null führt dazu, dass bei jeder Gelegenheit eine vollständige Sammlung erfolgt. Das ist
extrem langsam, kann aber zum Debuggen nützlich sein.
ggc-min-heapsize
Mindestgröße des Haufens des Garbage Collectors, bevor er mit dem Sammeln beginnt
Müll. Die erste Sammlung erfolgt, nachdem der Heap um erweitert wurde ggc-min-erweitern%
Darüber hinaus ggc-min-heapsize. Auch hier kann die Abstimmung die Kompilierungsgeschwindigkeit verbessern, und
hat keinen Einfluss auf die Codegenerierung.
Der Standardwert ist der kleinere von RAM/8, RLIMIT_RSS oder ein Grenzwert, der versucht sicherzustellen
dass RLIMIT_DATA oder RLIMIT_AS nicht überschritten werden, jedoch mit einer unteren Grenze von 4096
(vier Megabyte) und eine Obergrenze von 131072 (128 Megabyte). Wenn GCC nicht in der Lage ist
Um den Arbeitsspeicher auf einer bestimmten Plattform zu berechnen, wird die untere Grenze verwendet. Dies einstellen
Parameter sehr groß deaktiviert effektiv die Garbage Collection. Dies einstellen
Parameter und ggc-min-erweitern auf null führt dazu, dass bei jedem eine vollständige Sammlung stattfindet
Gelegenheit.
max-reload-search-insns
Die maximale Anzahl von Anweisungs-Neuladevorgängen sollte rückwärts nach Äquivalenten suchen
registrieren. Steigende Werte bedeuten eine aggressivere Optimierung, wodurch die
Kompilierungszeiterhöhung mit wahrscheinlich etwas besserer Leistung. Der Standard
Wert ist 100.
max-cselib-Speicherorte
Die maximale Anzahl von Speicherplätzen sollte cselib berücksichtigen.
Steigende Werte bedeuten eine aggressivere Optimierung, was die Kompilierungszeit verkürzt
mit wahrscheinlich etwas besserer Leistung erhöhen. Der Standardwert ist 500.
neu anordnen-blöcke-duplizieren
Blöcke neu anordnen-doppeltes-Feedback
Wird vom grundlegenden Block-Neuordnungsdurchgang verwendet, um zu entscheiden, ob unbedingt verwendet werden soll
den Code an seinem Ziel verzweigen oder duplizieren. Code wird dupliziert, wenn er
Die geschätzte Größe ist kleiner als dieser Wert multipliziert mit der geschätzten Größe von
bedingungsloser Sprung in die Hot Spots des Programms.
Die Nachbestellung-Block-Duplikat-Feedback Parameter wird nur verwendet, wenn Profil-Feedback
ist verfügbar. Es kann auf höhere Werte eingestellt werden als Nachbestellung-Block-Duplikat da
Informationen über die Hot Spots sind genauer.
max-sched-ready-insns
Die maximale Anzahl von Anweisungen, die der Scheduler ausgeben kann
zu einem beliebigen Zeitpunkt während des ersten Planungsdurchlaufs berücksichtigen. Steigende Werte
bedeuten gründlichere Suchen, wodurch sich die Kompilierungszeit wahrscheinlich erhöht
wenig Nutzen. Der Standardwert ist 100.
Max-Sched-Region-Blöcke
Die maximale Anzahl von Blöcken in einer Region, die für Interblock berücksichtigt werden sollen
Terminplanung. Der Standardwert ist 10.
max-pipeline-region-blocks
Die maximale Anzahl von Blöcken in einer Region, die für das Pipelining im
selektiver Planer. Der Standardwert ist 15.
max-sched-region-insns
Die maximale Anzahl von Inns in einer Region, die für Interblocks berücksichtigt werden sollen
Terminplanung. Der Standardwert ist 100.
max-pipeline-region-insns
Die maximale Anzahl von Inns in einer Region, die für das Pipelining im
selektiver Planer. Der Standardwert ist 200.
min-spez-Wahrscheinl
Die minimale Wahrscheinlichkeit (in Prozent), einen Quellblock für Interblock zu erreichen
spekulative Terminplanung. Der Standardwert ist 40.
max-sched-extend-regions-iters
Die maximale Anzahl von Iterationen durch CFG, um Regionen zu erweitern. Ein Wert von 0 (der
default) deaktiviert Regionserweiterungen.
max-sched-insn-conflict-delay
Die maximale Konfliktverzögerung für ein Insn, die bei spekulativen Anträgen berücksichtigt werden kann.
Der Standardwert ist 3.
Sched-Spec-Prob-Cutoff
Die minimale Wahrscheinlichkeit des Spekulationserfolgs (in Prozent), damit spekulativ
Gasthäuser sind geplant. Der Standardwert ist 40.
Sched-Spec-State-Edge-Prob-Cutoff
Die minimale Wahrscheinlichkeit, die eine Kante haben muss, damit der Scheduler ihren Zustand speichert
gegenüber von. Der Standardwert ist 10.
Sched-Mem-True-Dep-Kosten
Minimaler Abstand (in CPU-Zyklen) zwischen Speichern und Laden, die auf denselben Speicher abzielen
Standorte. Der Standardwert ist 1.
selsched-max-lookahead
Die maximale Größe des Lookahead-Fensters der selektiven Planung. Es ist eine Tiefe
der Suche nach verfügbaren Anweisungen. Der Standardwert ist 50.
selsched-max-sched-Zeiten
Die maximale Häufigkeit, mit der eine Anweisung während des selektiven
Terminplanung. Dies ist die Grenze für die Anzahl der Iterationen, durch die die
Anweisung kann gepipelinet werden. Der Standardwert ist 2.
selsched-max-insns-umzubenennen
Die maximale Anzahl der besten Anweisungen in der Ready-Liste, die berücksichtigt werden
Umbenennung im selektiven Scheduler. Der Standardwert ist 2.
sms-min-sc
Der Mindestwert der Stufenzahl, die der Swing-Modulo-Scheduler generiert. Die
Standardwert ist 2.
max-letzter-wert-rtl
Die maximale Größe, gemessen als Anzahl von RTLs, die in einem Ausdruck aufgezeichnet werden können
im Kombinierer für ein Pseudoregister als letzter bekannter Wert dieses Registers. Die
Standard ist 10000.
Max-Combine-Insns
Die maximale Anzahl von Befehlen, die der RTL-Combiner zu kombinieren versucht. Der Standard
Wert ist 2 at -Og und 4 sonst.
Integer-Anteil-Limit
Kleine ganzzahlige Konstanten können eine gemeinsame Datenstruktur verwenden, wodurch die Compiler-
Speichernutzung und Erhöhung der Geschwindigkeit. Dies legt den maximalen Wert eines freigegebenen . fest
ganzzahlige Konstante. Der Standardwert ist 256.
ssp-Puffergröße
Die Mindestgröße von Puffern (dh Arrays), die einen Stack-Smashing-Schutz erhalten
wann -fstack-Schutz wird eingesetzt.
Dieser Standard vor Ubuntu 10.10 war "8". Derzeit ist es "4", um die zu erhöhen
Anzahl der durch den Stack Protector geschützten Funktionen.
Mindestgröße-für-Stack-Sharing
Die Mindestgröße der Variablen, die an der Stack-Slot-Teilung teilnehmen, wenn dies nicht der Fall ist
optimieren. Der Standardwert ist 32.
max-jump-thread-duplication-stmts
Maximal zulässige Anzahl von Anweisungen in einem Block, die dupliziert werden müssen, wenn
Einfädeln springt.
max-fields-for-field-sensitiv
Maximale Anzahl von Feldern in einer Struktur, die feldsensitiv behandelt wird während
Zeigeranalyse. Der Standardwert ist null für -O0 und -O1und 100 für -Du, -O2 und
-O3.
Prefetch-Latenz
Schätzung der durchschnittlichen Anzahl von Anweisungen, die vor dem Prefetch ausgeführt werden
beendet. Die vorausgeholte Distanz ist proportional zu dieser Konstante.
Eine Erhöhung dieser Zahl kann auch dazu führen, dass weniger Streams vorab abgerufen werden (siehe
Simultan-Prefetches).
Simultan-Prefetches
Maximale Anzahl von Prefetches, die gleichzeitig ausgeführt werden können.
l1-Cache-Zeilengröße
Die Größe der Cachezeile im L1-Cache in Byte.
l1-Cache-Größe
Die Größe des L1-Cache in Kilobyte.
l2-Cache-Größe
Die Größe des L2-Cache in Kilobyte.
Min-Insn-zu-Prefetch-Verhältnis
Das minimale Verhältnis zwischen der Anzahl der Befehle und der Anzahl der Prefetches
um das Prefetching in einer Schleife zu aktivieren.
prefetch-min-insn-to-mem-verhältnis
Das minimale Verhältnis zwischen der Anzahl der Anweisungen und der Anzahl des Speichers
Referenzen, um das Vorabrufen in einer Schleife zu ermöglichen.
Verwenden Sie kanonische Typen
Ob der Compiler das "kanonische" Typsystem verwenden soll. Standardmäßig ist dies
sollte immer 1 sein, was einen effizienteren internen Mechanismus zum Vergleichen verwendet
Typen in C++ und Objective-C++. Wenn jedoch Fehler im kanonischen Typsystem sind
Kompilierungsfehler verursachen, setzen Sie diesen Wert auf 0, um kanonische Typen zu deaktivieren.
Switch-Conversion-max-Branch-Verhältnis
Die Switch-Initialisierungskonvertierung weigert sich, Arrays zu erstellen, die größer sind als
Switch-Conversion-max-Branch-Verhältnis mal die Anzahl der Zweige im Switch.
max-partielle-antic-Länge
Maximale Länge des partiellen Antic-Sets, die während des Baumpartials berechnet wird
Optimierung der Redundanzbeseitigung (-ftree-pre) bei der Optimierung bei -O3 und darüber.
Für einige Arten von Quellcode ist die verbesserte partielle Redundanzeliminierung
Optimierung kann weglaufen und den gesamten auf dem Host verfügbaren Speicher verbrauchen
Maschine. Dieser Parameter legt eine Grenze für die Länge der berechneten Sätze fest,
was das Ausreißverhalten verhindert. Setzen eines Wertes von 0 für diesen Parameter
ermöglicht eine unbegrenzte Einstelllänge.
sccvn-max-scc-größe
Maximale Größe einer stark verbundenen Komponente (SCC) während der SCCVN-Verarbeitung. Wenn
diese Grenze ist erreicht, die SCCVN-Verarbeitung für die gesamte Funktion wird nicht durchgeführt und
davon abhängige Optimierungen sind deaktiviert. Die standardmäßige maximale SCC-Größe ist
10000
sccvn-max-alias-abfragen-pro-zugriff
Maximale Anzahl von Alias-Oracle-Abfragen, die wir bei der Suche nach Redundanzen durchführen
für Lasten und Lager. Wird diese Grenze erreicht, wird die Suche abgebrochen und das Laden oder
Speicher gilt nicht als überflüssig. Die Anzahl der Abfragen ist algorithmisch
beschränkt auf die Anzahl der Speicher auf allen Pfaden vom Laden bis zum Funktionseintrag.
Die standardmäßige maximale Anzahl von Abfragen beträgt 1000.
ira-max-loops-num
IRA verwendet standardmäßig die regionale Registerzuordnung. Wenn eine Funktion mehr enthält
Schleifen als die durch diesen Parameter angegebene Anzahl, höchstens die angegebene Anzahl von
die am häufigsten ausgeführten Schleifen bilden Regionen für die regionale Registerzuordnung.
Der Standardwert des Parameters ist 100.
ira-max-Konflikttabellengröße
Obwohl IRA einen ausgeklügelten Algorithmus verwendet, um die Konflikttabelle zu komprimieren,
table kann immer noch übermäßig viel Speicher für umfangreiche Funktionen benötigen. Wenn die
Konflikttabelle für eine Funktion könnte die Größe in MB überschreiten, die dadurch angegeben wird
Parameter verwendet der Registerzuordner stattdessen einen schnelleren, einfacheren und
Qualitätsalgorithmus, der keine Erstellung einer Pseudoregister-Konflikttabelle erfordert.
Der Standardwert des Parameters ist 2000.
ira-loop-reservierte-regs
IRA kann verwendet werden, um einen genaueren Registerdruck in Schleifen für Entscheidungen zu bewerten
Schleifeninvarianten verschieben (siehe -O3). Die Anzahl der verfügbaren Register, die für . reserviert sind
einige andere Zwecke werden durch diesen Parameter angegeben. Der Standardwert des
Parameter ist 2, was die minimale Anzahl von Registern ist, die von einem typischen
Anweisungen. Dieser Wert ist der beste, der aus zahlreichen Experimenten gefunden wurde.
lra-vererbung-ebb-wahrscheinlichkeit-cutoff
LRA versucht, in den Registern neu geladene Werte in nachfolgenden insns wiederzuverwenden. Dies
Optimierung wird Vererbung genannt. Dafür wird die EBB als Region genutzt
Optimierung. Der Parameter definiert eine minimale Flankendurchfallwahrscheinlichkeit in
Prozentsatz, der verwendet wird, um BB zum Vererbungs-EBB in LRA hinzuzufügen. Der Standardwert des
Parameter ist 40. Der Wert wurde aus zahlreichen Durchläufen von SPEC2000 auf x86-64 ausgewählt.
loop-invariante-max-bbs-in-loop
Schleifeninvariante Bewegung kann sehr teuer sein, sowohl in der Kompilierungszeit als auch in
Menge an benötigtem Speicher zur Kompilierzeit, mit sehr großen Schleifen. Schleifen mit mehr
Basisblöcke als dieser Parameter haben keine schleifeninvariante Bewegungsoptimierung
an ihnen durchgeführt. Der Standardwert des Parameters ist 1000 für -O1 und 10000
für -O2 und darüber.
loop-max-datarefs-for-datadeps
Der Aufbau von Datenabhängigkeiten ist bei sehr großen Schleifen teuer. Dieser Parameter
begrenzt die Anzahl der Datenreferenzen in Schleifen, die für Daten berücksichtigt werden
Abhängigkeitsanalyse. Diese großen Schleifen werden von den Optimierungen mit nicht behandelt
Schleifendatenabhängigkeiten. Der Standardwert ist 1000.
max-vartrack-größe
Legt eine maximale Anzahl von Hash-Tabellen-Slots fest, die während des Variablen-Tracking-Datenflusses verwendet werden sollen
Analyse jeder Funktion. Bei Überschreitung dieser Grenze bei variabler Nachführung um
Zuweisungen aktiviert, die Analyse für diese Funktion wird ohne sie erneut versucht, nachdem
Entfernen aller Debug-Insns aus der Funktion. Wird das Limit auch ohne überschritten
debug insns, Var-Tracking-Analyse ist für die Funktion komplett deaktiviert.
Das Setzen des Parameters auf Null macht ihn unbegrenzt.
max-vartrack-expr-tiefe
Legt eine maximale Anzahl von Rekursionsebenen fest, wenn versucht wird, Variablennamen zuzuordnen oder
Debug-Temporäre für Wertausdrücke. Dies tauscht die Kompilierungszeit gegen mehr ein
vollständige Debug-Informationen. Wenn dieser zu niedrig eingestellt ist, werden Wertausdrücke, die
verfügbar und könnten in Debug-Informationen dargestellt werden, werden möglicherweise nicht verwendet;
Wenn Sie diesen Wert höher einstellen, kann der Compiler möglicherweise komplexere Fehler finden
Ausdrücke, aber die Kompilierungszeit und der Speicherverbrauch können zunehmen. Der Standardwert ist 12.
min-nondebug-insn-uid
Verwenden Sie UIDs ab diesem Parameter für Nicht-Debug-Insns. Der Bereich unter dem
Parameter ist ausschließlich für Debug-Insns reserviert, die von . erstellt wurden
-fvar-Tracking-Zuweisungen, aber Debug-Insns erhalten möglicherweise (nicht überlappende) UIDs oben
es, wenn der reservierte Bereich erschöpft ist.
ipa-sra-ptr-Wachstumsfaktor
IPA-SRA ersetzt einen Zeiger auf ein Aggregat nur durch einen oder mehrere neue Parameter
wenn ihre kumulative Größe kleiner oder gleich ist ipa-sra-ptr-Wachstumsfaktor mal die
Größe des ursprünglichen Zeigerparameters.
sra-max-skalarisierungsgröße-Ospeed
sra-max-skalarisierungsgröße-Osize
Die beiden Scalar Reduction of Aggregates-Pässe (SRA und IPA-SRA) sollen ersetzen
skalare Teile von Aggregaten mit Verwendung unabhängiger skalarer Variablen. Diese
Parameter steuern die maximale Größe des Aggregats in Speichereinheiten, die
als Ersatz beim Kompilieren für Geschwindigkeit in Betracht gezogen (sra-max-skalarisierungsgröße-
Ospeed) oder Größe (sra-max-skalarisierungsgröße-Osize) beziehungsweise.
tm-max-aggregate-größe
Beim Erstellen von Kopien von threadlokalen Variablen in einer Transaktion wird dieser Parameter
gibt die Größe in Bytes an, nach der Variablen beim Logging gespeichert werden
Funktionen im Gegensatz zu Speichern/Wiederherstellen von Codesequenzpaaren. Nur diese Option
gilt bei Verwendung -fgnu-tm.
graphit-max-nb-scop-params
Um exponentielle Effekte in den Graphite-Schleifentransformationen zu vermeiden, ist die Anzahl der
Parameter in einem Static Control Part (SCoP) ist begrenzt. Der Standardwert ist 10
Parameter. Eine Variable, deren Wert zum Zeitpunkt der Kompilierung unbekannt und definiert ist
außerhalb eines SCoP ist ein Parameter des SCoP.
Graphit-max-BBs-pro-Funktion
Um exponentielle Effekte bei der Erkennung von SCoPs zu vermeiden, ist die Größe der Funktionen
von Graphite analysiert wird, ist begrenzt. Der Standardwert ist 100 Basisblöcke.
Schleifenblock-Kachelgröße
Loop-Blocking oder Strip-Mining-Transformationen, aktiviert mit -Floop-Block or
-floop-Streifen-Mine, entferne jede Schleife im Schleifennest um eine bestimmte Anzahl von
Iterationen. Die Abisolierlänge kann mit dem geändert werden Schleifenblock-Kachelgröße
Parameter. Der Standardwert ist 51 Iterationen.
Loop-Abroll-Stau-Größe
Geben Sie den Abrollfaktor für die -floop-unroll-and-jam Möglichkeit. Der Standardwert
ist 4.
Loop-Unroll-Jam-Tiefe
Geben Sie die abzurollende Dimension an (von der innersten Schleife aus gezählt) für die
-floop-unroll-and-jam. Der Standardwert ist 2.
ipa-cp-Wert-Listengröße
IPA-CP versucht, alle möglichen Werte und Typen zu verfolgen, die an die . einer Funktion übergeben werden
Parameter, um sie zu verbreiten und eine Devirtualisierung durchzuführen. ipa-cp-Wert-
Listengröße ist die maximale Anzahl von Werten und Typen, die pro Formal gespeichert werden
Parameter einer Funktion.
ipa-cp-eval-schwelle
IPA-CP berechnet seinen eigenen Score von Klon-Profitabilitätsheuristiken und führt
die Klonchancen mit Werten, die über ipa-cp-eval-schwelle.
ipa-cp-rekursionsstrafe
Prozentuale Strafe, die die rekursiven Funktionen bei ihrer Auswertung erhalten
zum Klonen.
ipa-cp-Single-Call-Strafe
Prozentuale Penalty-Funktionen, die einen einzelnen Aufruf einer anderen Funktion enthalten, werden
erhalten, wenn sie zum Klonen ausgewertet werden.
ipa-max-agg-Artikel
IPA-CP ist auch in der Lage, eine Reihe von Skalarwerten zu propagieren, die in einem
Aggregat. ipa-max-agg-Artikel steuert die maximale Anzahl solcher Werte pro Eins
Parameters.
ipa-cp-loop-hinweis-bonus
Wenn IPA-CP feststellt, dass ein Klonkandidat die Anzahl von
Iterationen einer Schleife bekannt, fügt sie einen Bonus von . hinzu ipa-cp-loop-hinweis-bonus zu den
Rentabilitätsbewertung des Kandidaten.
ipa-cp-array-index-hinweis-bonus
Wenn IPA-CP feststellt, dass ein Klonkandidat den Index eines Arrays erstellen würde
Zugang bekannt, fügt es einen Bonus von . hinzu ipa-cp-array-index-hinweis-bonus zu den
Rentabilitätsbewertung des Kandidaten.
ipa-max-aa-schritte
Bei der Analyse von Funktionskörpern verwendet IPA-CP die Alias-Analyse, um
Trackwerte, auf die von Funktionsparametern verwiesen wird. Um nicht zu viel Zeit zu verbringen
Analysieren riesiger Funktionen, gibt es auf und betrachtet den gesamten Speicher, der danach überfüllt ist
Prüfung ipa-max-aa-schritte Anweisungen, die das Gedächtnis verändern.
lto-Partitionen
Geben Sie die gewünschte Anzahl von Partitionen an, die während der WHOPR-Kompilierung erstellt werden. Die
Anzahl der Partitionen sollte die Anzahl der für die Kompilierung verwendeten CPUs überschreiten. Die
Standardwert ist 32.
lto-minpartition
Größe der minimalen Partition für WHOPR (in geschätzten Anweisungen). Dies verhindert
Kosten für die Aufteilung sehr kleiner Programme in zu viele Partitionen.
cxx-max-Namespaces-für-Diagnosehilfe
Die maximale Anzahl von Namespaces, die bei der C++-Namenssuche für Vorschläge herangezogen werden sollen
schlägt für einen Bezeichner fehl. Der Standardwert ist 1000.
Sink-Frequenz-Schwelle
Die maximale relative Ausführungshäufigkeit (in Prozent) des Zielblocks
relativ zum ursprünglichen Block einer Anweisung, um das Senken der Anweisung von a . zu ermöglichen
Stellungnahme. Größere Zahlen führen zu einem aggressiveren Statement-Sinking. Die
Der Standardwert ist 75. Eine kleine positive Anpassung wird für Kontoauszüge mit vorgenommen
Speicheroperanden, da diese noch rentabler sind, also sinken.
max-stores-to-sink
Die maximale Anzahl von bedingten Speicherpaaren, die versenkt werden können. Auf 0 setzen, wenn
entweder Vektorisierung (-ftree-vektorisieren) oder wenn-Umwandlung (-ftree-loop-if-convert)
ist behindert. Der Standardwert ist 2.
Allow-store-data-races
Ermöglichen Sie es Optimierern, neue Datenrennen in Geschäften einzuführen. Auf 1 setzen, um zuzulassen,
andernfalls auf 0. Diese Option ist standardmäßig auf der Optimierungsstufe aktiviert -Ofast.
Fallwerte-Schwellenwert
Die kleinste Anzahl verschiedener Werte, für die man am besten eine Sprungtabelle verwendet
anstelle eines Baumes von bedingten Zweigen. Wenn der Wert 0 ist, verwenden Sie die Standardeinstellung für
Die Maschine. Der Standardwert ist 0.
Baum-Reassoc-Breite
Legen Sie die maximale Anzahl von parallel ausgeführten Anweisungen im neu zugeordneten Baum fest.
Dieser Parameter überschreibt zielabhängige Heuristiken, die standardmäßig verwendet werden, wenn nicht
Nullwert.
Sched-Druck-Algorithmus
Wählen Sie zwischen den zwei verfügbaren Implementierungen von -fsched-Druck. Algorithmus 1
ist die ursprüngliche Implementierung und verhindert mit größerer Wahrscheinlichkeit Anweisungen von
nachbestellt werden. Algorithmus 2 wurde als Kompromiss zwischen den
relativ konservativer Ansatz von Algorithmus 1 und der eher aggressive
Ansatz des Standard-Schedulers. Es hängt stärker davon ab, ein
regelmäßige Registerdatei und genaue Registerdruckklassen. Sehen haifa-sched.c
in den GCC-Quellen für weitere Details.
Die Standardauswahl hängt vom Ziel ab.
max-slsr-cand-scan
Legen Sie die maximale Anzahl vorhandener Kandidaten fest, die bei der Suche nach einem
Grundlage für einen neuen Kandidaten für die lineare Festigkeitsreduzierung.
asan-globals
Aktivieren Sie die Pufferüberlauferkennung für globale Objekte. Diese Art von Schutz ist
standardmäßig aktiviert, wenn Sie verwenden -fsanitize=Adresse Möglichkeit. Globale deaktivieren
Objektschutz verwenden --param asan-globals=0.
asan-stapel
Aktivieren Sie die Pufferüberlauferkennung für Stack-Objekte. Diese Art von Schutz ist
standardmäßig aktiviert bei Verwendung-fsanitize=Adresse. So deaktivieren Sie den Stapelschutz verwenden
--param Asan-Stack=0 .
asan-instrument-liest
Aktivieren Sie die Pufferüberlauferkennung für Speicherlesevorgänge. Diese Art von Schutz ist
standardmäßig aktiviert bei Verwendung -fsanitize=Adresse. So deaktivieren Sie Speicherlesevorgänge
Schutzgebrauch --param asan-instrument-liest=0.
asan-instrument-schreibt
Aktivieren Sie die Pufferüberlauferkennung für Speicherschreibvorgänge. Diese Art von Schutz ist
standardmäßig aktiviert bei Verwendung -fsanitize=Adresse. Speicherschreibvorgänge deaktivieren
Schutzgebrauch --param asan-instrument-schreibt=0 .
Asan-Memintrin
Aktivieren Sie die Erkennung für integrierte Funktionen. Diese Art von Schutz wird ermöglicht durch
Standard bei Verwendung -fsanitize=Adresse. So deaktivieren Sie den integrierten Funktionsschutz
- --param asan-memintrin=0.
asan-Verwendung-nach-Rückkehr
Aktivieren Sie die Erkennung der Verwendung nach der Rückgabe. Diese Art von Schutz wird ermöglicht durch
Standard bei Verwendung -fsanitize=Adresse Möglichkeit. So deaktivieren Sie die Verwendung nach der Rückgabe
Erkennung verwenden --param asan-use-after-return=0.
asan-instrumentation-mit-call-threshold
Wenn die Anzahl der Speicherzugriffe in der instrumentierten Funktion größer oder gleich ist
Verwenden Sie für diese Nummer Rückrufe anstelle von Inline-Prüfungen. ZB um Inline-Code zu deaktivieren
- --param asan-instrumentation-with-call-threshold=0.
chkp-max-ctor-größe
Statische Konstruktoren, die von Pointer Bounds Checker generiert werden, können sehr groß werden und
Kompilierzeit auf Optimierungsebene deutlich erhöhen -O1 und höher. Dies
Parameter ist eine maximale Anzahl von Anweisungen in einem einzelnen generierten Konstruktor.
Der Standardwert ist 5000.
max-fsm-thread-path-insns
Maximale Anzahl zu kopierender Anweisungen beim Duplizieren von Blöcken in einem endlichen Zustand
Automaten-Sprung-Thread-Pfad. Der Standardwert ist 100.
max-fsm-thread-länge
Maximale Anzahl von Basisblöcken auf einem Sprungthreadpfad eines endlichen Automaten. Die
Standard ist 10.
max-fsm-thread-pfade
Maximale Anzahl neuer Jump-Thread-Pfade, die für einen endlichen Automaten erstellt werden sollen.
Der Standardwert ist 50.
Optionen Regelung Präprozessor
Diese Optionen steuern den C-Präprozessor, der für jede C-Quelldatei vor der eigentlichen Ausführung ausgeführt wird
Zusammenstellung.
Wenn Sie die -E Option wird außer der Vorverarbeitung nichts getan. Einige dieser Optionen
nur zusammen mit sinn machen -E weil sie bewirken, dass die Ausgabe des Präprozessors
für die eigentliche Kompilierung ungeeignet.
-Wp,zu erhalten
Sie können verwenden -Wp,zu erhalten um den Compilertreiber zu umgehen und zu übergeben zu erhalten direkt durch
zum Präprozessor. Wenn zu erhalten enthält Kommas, ist in mehrere Optionen unterteilt bei
die Kommas. Viele Optionen werden jedoch von den . modifiziert, übersetzt oder interpretiert
Compilertreiber vor der Übergabe an den Präprozessor und -Wp gewaltsam umgeht
dieser Phase. Die direkte Schnittstelle des Präprozessors ist undokumentiert und unterliegt
ändern, daher sollten Sie nach Möglichkeit auf die Verwendung verzichten -Wp und lassen Sie den Fahrer die
Optionen stattdessen.
-Xpräprozessor zu erhalten
Passieren zu erhalten als Option für den Präprozessor. Damit können Sie System-
bestimmte Präprozessoroptionen, die GCC nicht erkennt.
Wenn Sie eine Option übergeben möchten, die ein Argument akzeptiert, müssen Sie verwenden -Xpräprozessor
zweimal, einmal für die Option und einmal für das Argument.
-keine-integrierte-cpp
Führen Sie die Vorverarbeitung als separaten Durchlauf vor der Kompilierung durch. Standardmäßig führt GCC
Vorverarbeitung als integrierter Bestandteil der Eingabe-Tokenisierung und des Parsens. Wenn diese Option
bereitgestellt wird, das entsprechende Sprach-Frontend (cc1, cc1plus, oder auch cc1obj für C, C++,
bzw. Objective-C) wird stattdessen zweimal aufgerufen, einmal nur für die Vorverarbeitung
und einmal für die eigentliche Kompilierung der vorverarbeiteten Eingabe. Diese Option kann nützlich sein
in Verbindung mit den -B or -Verpackung Optionen zum Angeben eines alternativen Präprozessors oder
eine zusätzliche Verarbeitung der Programmquelle zwischen der normalen Vorverarbeitung und
Zusammenstellung.
-D Name
Vordefiniert Name als Makro, mit Definition 1.
-D Name=Definition
Die Inhalte von Definition werden tokenisiert und verarbeitet, als ob sie währenddessen erschienen wären
Übersetzungsphase drei in a #define Richtlinie. Insbesondere lautet die Definition
durch eingebettete Newline-Zeichen abgeschnitten.
Wenn Sie den Präprozessor aus einer Shell oder einem Shell-ähnlichen Programm aufrufen, benötigen Sie möglicherweise
um die Anführungszeichensyntax der Shell zu verwenden, um Zeichen wie Leerzeichen zu schützen, die ein haben
Bedeutung in der Shell-Syntax.
Wenn Sie ein funktionsähnliches Makro in der Befehlszeile definieren möchten, schreiben Sie dessen Argument
Liste mit umschließenden Klammern vor dem Gleichheitszeichen (falls vorhanden). Klammern sind
für die meisten Shells sinnvoll, daher müssen Sie die Option zitieren. Mit sh und csh,
-D'Name(Argumente...)=Definition' Werke.
-D und -U Optionen werden in der Reihenfolge verarbeitet, in der sie in der Befehlszeile angegeben sind. Alle
-Makros Datei und -einschließen Datei Optionen werden doch verarbeitet -D und -U Optionen.
-U Name
Brechen Sie jede vorherige Definition von . ab Name, entweder eingebaut oder mit a -D .
-undef
Definieren Sie keine systemspezifischen oder GCC-spezifischen Makros vor. Der Standard vordefiniert
Makros bleiben definiert.
-I dir
Verzeichnis hinzufügen dir in die Liste der Verzeichnisse, die nach Header-Dateien durchsucht werden sollen.
Verzeichnisse mit dem Namen -I werden vor den Standard-Include-Verzeichnissen durchsucht.
Wenn das Verzeichnis dir ist ein standardmäßiges System-Include-Verzeichnis, die Option wird ignoriert, um
Stellen Sie sicher, dass die Standardsuchreihenfolge für Systemverzeichnisse und die Sonderbehandlung
der Systemheader werden nicht besiegt. Wenn dir beginnt mit "=", dann ist das "="
durch das sysroot-Präfix ersetzt; sehen -Sysroot und -isysroot.
-o Datei
Ausgabe schreiben nach Datei. Dies ist das gleiche wie die Angabe Datei als zweite Nicht-Option
Argument zwei cpp. gcc hat eine andere Interpretation eines zweiten Arguments, das keine Option ist,
also musst du verwenden -o um die Ausgabedatei anzugeben.
-Wand
Schaltet alle optionalen Warnungen ein, die für normalen Code wünschenswert sind. Zur Zeit das
is -WKommentar, -Wtrigraphen, -Wmultichar und eine Warnung vor Integer-Promotion, die a . verursacht
Vorzeichenwechsel in "#if"-Ausdrücken. Beachten Sie, dass viele der Warnungen des Präprozessors
sind standardmäßig aktiviert und haben keine Optionen, um sie zu steuern.
-WKommentar
-WKommentare
Warnen, wenn eine Kommentar-Start-Sequenz /* erscheint in a /* kommentieren, oder wann immer a
Backslash-Newline erscheint in a // Kommentar. (Beide Formen haben die gleiche Wirkung.)
-Wtrigraphen
Die meisten Trigraphen in Kommentaren können die Bedeutung des Programms nicht beeinflussen. Jedoch a
Trigraph, der eine Escape-Zeile bilden würde (??/ am Ende einer Zeile) kann, durch
Ändern, wo der Kommentar beginnt oder endet. Daher nur Trigraphen, die sich bilden würden
Escape-Zeilen erzeugen Warnungen innerhalb eines Kommentars.
Diese Option wird impliziert durch -Wand. Wenn -Wand nicht angegeben ist, ist diese Option noch aktiviert
es sei denn, Trigraphen sind aktiviert. Um die Trigraph-Konvertierung ohne Warnungen zu erhalten, aber erhalten Sie
die andere -Wand Warnungen, verwenden -Trigraphen -Wand -Wno-Trigraphen.
-Wtraditionell
Warnen Sie vor bestimmten Konstrukten, die sich in traditionellem und ISO C unterschiedlich verhalten
warnen vor ISO-C-Konstrukten, die kein traditionelles C-Äquivalent haben, und problematisch
Konstrukte, die vermieden werden sollten.
-Wundef
Warnen, wenn ein Bezeichner, der kein Makro ist, in einem #wenn Richtlinie,
außerhalb von definiert. Solche Bezeichner werden durch Null ersetzt.
-Wunused-Makros
Warnen Sie vor Makros, die in der Hauptdatei definiert sind und nicht verwendet werden. Ein Makro ist benutzt wenn es so ist
mindestens einmal erweitert oder auf Existenz geprüft. Der Präprozessor warnt auch, wenn
das Makro wurde zum Zeitpunkt der Neudefinition oder Undefinition nicht verwendet.
Integrierte Makros, in der Befehlszeile definierte Makros und in include definierte Makros
Dateien werden nicht gewarnt.
Hinweis: Wenn ein Makro tatsächlich verwendet wird, aber nur in übersprungenen Bedingungsblöcken verwendet wird, dann
CPP wird es als ungenutzt melden. Um die Warnung in einem solchen Fall zu vermeiden, können Sie sich verbessern
den Umfang der Makrodefinition, indem Sie es beispielsweise in das erste übersprungene verschieben
Block. Alternativ können Sie eine Dummy-Verwendung mit etwas wie Folgendem bereitstellen:
#wenn definiert die_macro_causing_the_warning
#endif
-Wendif-Etiketten
Warnen, wann immer ein #else oder #endif gefolgt von Text. Dies geschieht normalerweise in
Code des Formulars
#wenn FOO
...
#sonst FOO
...
#endif FOO
Das zweite und dritte "FOO" sollten in Kommentaren stehen, sind aber in älteren Programmen oft nicht vorhanden.
Diese Warnung ist standardmäßig aktiviert.
-Fehler
Machen Sie alle Warnungen zu harten Fehlern. Quellcode, der Warnungen auslöst, ist
abgelehnt.
-Wsystem-Header
Geben Sie Warnungen für Code in Systemheadern aus. Diese sind normalerweise nicht hilfreich bei der Suche
Fehler im eigenen Code, daher unterdrückt. Wenn Sie für das System verantwortlich sind
Bibliothek, möchten Sie sie vielleicht sehen.
-w Unterdrücken Sie alle Warnungen, einschließlich derer, die GNU CPP standardmäßig ausgibt.
-pedantisch
Geben Sie alle obligatorischen Diagnosen aus, die in der C-Norm aufgeführt sind. Einige von ihnen sind übrig
standardmäßig aus, da sie häufig auf harmlosen Code auslösen.
-pedantische-Fehler
Geben Sie alle obligatorischen Diagnosen aus und machen Sie alle obligatorischen Diagnosen zu Fehlern.
Dies beinhaltet obligatorische Diagnosen, die GCC ohne ausgibt -pedantisch aber behandelt wie
Warnungen.
-M Anstatt das Ergebnis der Vorverarbeitung auszugeben, geben Sie eine geeignete Regel aus für um
Beschreibung der Abhängigkeiten der Hauptquelldatei. Der Präprozessor gibt eins aus
um Regel, die den Objektdateinamen für diese Quelldatei, einen Doppelpunkt und die Namen enthält
aller enthaltenen Dateien, einschließlich derer, die von -einschließen or -Makros Befehl-
Linienoptionen.
Sofern nicht ausdrücklich angegeben (mit -MT or -MQ), besteht der Objektdateiname aus dem
Name der Quelldatei mit beliebigem Suffix ersetzt durch Objektdatei-Suffix und mit beliebigem
führende Verzeichnisteile entfernt. Wenn viele Dateien enthalten sind, lautet die Regel
in mehrere Zeilen aufteilen mit \-Neue Zeile. Die Regel hat keine Befehle.
Diese Option unterdrückt nicht die Debug-Ausgabe des Präprozessors, wie z -dm. Vermeiden
Wenn Sie eine solche Debug-Ausgabe mit den Abhängigkeitsregeln mischen, sollten Sie dies explizit angeben
Abhängigkeitsausgabedatei mit -MF, oder verwenden Sie eine Umgebungsvariable wie
ABHÄNGIGKEITEN_OUTPUT. Die Debug-Ausgabe wird weiterhin an den regulären Ausgabestream gesendet als
Normal.
Bestehen -M an den Fahrer impliziert -E, und unterdrückt Warnungen mit einem impliziten -w.
-MM Like -M aber erwähnen Sie keine Header-Dateien, die sich in System-Header-Verzeichnissen befinden,
noch Header-Dateien, die direkt oder indirekt von einem solchen Header enthalten sind.
Dies impliziert, dass die Wahl von spitzen Klammern oder doppelten Anführungszeichen in an #einschließen
Direktive bestimmt nicht, ob dieser Header in -MM
Abhängigkeit ausgegeben. Dies ist eine geringfügige Änderung der Semantik gegenüber den GCC-Versionen 3.0 und
früher.
-MF Datei
Bei Verwendung mit -M or -MM, gibt eine Datei an, in die die Abhängigkeiten geschrieben werden sollen. Wenn nein -MF
Schalter gegeben ist, sendet der Präprozessor die Regeln an die gleiche Stelle, an die er gesendet worden wäre
vorverarbeitete Ausgabe.
Bei Verwendung mit den Treiberoptionen -MD or -MMD, -MF überschreibt die Standardabhängigkeit
Ausgabedatei.
-Mg In Verbindung mit einer Option wie -M Abhängigkeitsgenerierung anfordern, -Mg übernimmt
fehlende Header-Dateien sind generierte Dateien und fügt sie der Abhängigkeitsliste hinzu, ohne
einen Fehler auslösen. Der Name der Abhängigkeitsdatei wird direkt vom "#include" übernommen
-Anweisung, ohne einen Pfad voranzustellen. -Mg unterdrückt auch vorverarbeitete Ausgaben, da a
fehlende Header-Datei macht dies nutzlos.
Diese Funktion wird bei der automatischen Aktualisierung von Makefiles verwendet.
-MP Diese Option weist CPP an, für jede andere Abhängigkeit als die ein falsches Ziel hinzuzufügen
main-Datei, wodurch jede von nichts abhängt. Diese Dummy-Regeln umgehen Fehler
um gibt, wenn Sie Header-Dateien entfernen, ohne die zu aktualisieren Make-Datei passen.
Dies ist eine typische Ausgabe:
test.o: test.c test.h
test.h:
-MT Ziel
Ändern Sie das Ziel der Regel, die von der Abhängigkeitsgenerierung ausgegeben wird. Standardmäßig dauert CPP
den Namen der Haupteingabedatei, löscht alle Verzeichniskomponenten und alle Dateisuffixe
sowie .c, und hängt das übliche Objektsuffix der Plattform an. Das Ergebnis ist das Ziel.
An -MT Option setzt das Ziel so, dass es genau die Zeichenfolge ist, die Sie angeben. Falls Sie es wollen
mehrere Ziele, Sie können sie als einzelnes Argument angeben, um -MToder verwenden Sie mehrere
-MT Optionen.
Zum Beispiel, -MT '$(objpfx)foo.o' könnte geben
$(objpfx)foo.o: foo.c
-MQ Ziel
Das gleiche wie -MT, aber alle Zeichen, die für Make speziell sind, werden in Anführungszeichen gesetzt.
-MQ '$(objpfx)foo.o' gibt
$$(objpfx)foo.o: foo.c
Das Standardziel wird automatisch zitiert, als ob es mit angegeben würde -MQ.
-MD -MD entspricht -M -MF Datei, außer das -E ist nicht impliziert. Der Fahrer
entschlossen Datei basierend darauf, ob ein -o Option gegeben ist. Wenn ja, verwendet der Treiber seine
Argument, aber mit einem Suffix von .d, andernfalls nimmt es den Namen der Eingabedatei an,
entfernt alle Verzeichniskomponenten und Suffixe und wendet a .d Suffix.
If -MD wird in Verbindung mit verwendet -E, irgendein -o Schalter wird verstanden, um die
Abhängigkeitsausgabedatei, aber bei Verwendung ohne -E, Die jeweils -o versteht sich als Angabe von a
Zielobjektdatei.
Da -E ist nicht impliziert, -MD kann verwendet werden, um eine Abhängigkeitsausgabedatei als
Nebeneffekt des Kompilierungsprozesses.
-MMD
Like -MD außer erwähnen Sie nur Benutzer-Header-Dateien, keine System-Header-Dateien.
-fpch-deps
Wenn Sie vorkompilierte Header verwenden, führt dieses Flag dazu, dass die Abhängigkeitsausgabe-Flags
listet auch die Dateien aus den Abhängigkeiten des vorkompilierten Headers auf. Nur wenn nicht angegeben
der vorkompilierte Header würde aufgelistet und nicht die Dateien, die verwendet wurden, um ihn zu erstellen
da diese Dateien nicht konsultiert werden, wenn ein vorkompilierter Header verwendet wird.
-fpch-Vorverarbeitung
Diese Option ermöglicht die Verwendung eines vorkompilierten Headers zusammen mit -E. Es fügt ein besonderes ein
"#pragma", "#pragma GCC pch_preprocess "Dateiname"" in der Ausgabe, um den Ort zu markieren
wo der vorkompilierte Header gefunden wurde und seine Dateinamen. Wenn -fvorverarbeitet in
verwenden, erkennt GCC dieses "#pragma" und lädt den PCH.
Diese Option ist standardmäßig deaktiviert, da die resultierende vorverarbeitete Ausgabe nur
wirklich geeignet als Input für GCC. Es wird eingeschaltet von -Save-Temps.
Sie sollten dieses "#pragma" nicht in Ihren eigenen Code schreiben, aber es ist sicher, das zu bearbeiten
Dateiname, wenn die PCH-Datei an einem anderen Ort verfügbar ist. Der Dateiname kann sein
absolut oder relativ zum aktuellen Verzeichnis von GCC.
-x c
-x c ++
-x Objective-C
-x Assembler-mit-cpp
Geben Sie die Quellsprache an: C, C++, Objective-C oder Assembly. Das hat nichts zu tun
mit Normenkonformität oder Erweiterungen; es wählt lediglich aus, welche Basissyntax verwendet werden soll
erwarten. Wenn Sie keine dieser Optionen angeben, leitet cpp die Sprache aus der
Erweiterung der Quelldatei: .c, . Cc, .m, oder auch .S. Einige andere gängige Erweiterungen für
C++ und Assembly werden ebenfalls erkannt. Wenn cpp die Erweiterung nicht erkennt, wird es
behandelt die Datei als C; Dies ist der allgemeinste Modus.
Hinweis: Frühere Versionen von cpp akzeptiert a -lange Option, die sowohl die
Sprache und das Konformitätsniveau der Standards. Diese Option wurde entfernt, weil
es widerspricht dem -l .
-std=Standard
-ansi
Geben Sie den Standard an, dem der Code entsprechen soll. Derzeit kennt CPP C
und C++-Standards; andere können in Zukunft hinzugefügt werden.
Standard kann einer sein von:
"c90"
"c89"
"iso9899:1990"
Die ISO-C-Norm von 1990. c90 ist die übliche Abkürzung für diese Version von
Der Standard.
Die -ansi Option ist äquivalent zu -std=c90.
"iso9899:199409"
Die C-Norm von 1990 in der Fassung von 1994.
"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
Die überarbeitete ISO-C-Norm, veröffentlicht im Dezember 1999. Vor der Veröffentlichung
wurde als C9X bekannt.
"iso9899:2011"
"c11"
"c1x"
Die überarbeitete ISO-C-Norm, veröffentlicht im Dezember 2011. Vor der Veröffentlichung
wurde als C1X bekannt.
"gnu90"
"gnu89"
Der C-Standard von 1990 plus GNU-Erweiterungen. Dies ist die Standardeinstellung.
"gnu99"
"gnu9x"
Der C-Standard von 1999 plus GNU-Erweiterungen.
"gnu11"
"gnu1x"
Der C-Standard von 2011 plus GNU-Erweiterungen.
"c++98"
Der ISO C++-Standard von 1998 plus Ergänzungen.
"gnu++98"
Das Gleiche wie -std=c++98 plus GNU-Erweiterungen. Dies ist die Standardeinstellung für C++-Code.
-I- Teilen Sie den Include-Pfad auf. Alle mit angegebenen Verzeichnisse -I Optionen vor -I- sind
nur nach Headern gesucht, die mit "#include" angefordert wurdenDatei""; sie werden nicht gesucht
"#enthaltenDatei>". Wenn zusätzliche Verzeichnisse mit . angegeben werden -I Optionen nach dem
-I-, diese Verzeichnisse werden nach allen durchsucht #einschließen Richtlinien.
Zudem hat auch Frau -I- verhindert die Verwendung des Verzeichnisses des aktuellen Dateiverzeichnisses als
das erste Suchverzeichnis für "#include"Datei"". Diese Option ist veraltet.
-nostdinc
Durchsuchen Sie nicht die Standardsystemverzeichnisse nach Header-Dateien. Nur die Verzeichnisse
du hast angegeben mit -I Optionen (und das Verzeichnis der aktuellen Datei, wenn
geeignet) gesucht.
-nostdinc++
Suchen Sie nicht nach Header-Dateien in den C++-spezifischen Standardverzeichnissen, aber tun Sie es trotzdem
durchsuchen Sie die anderen Standardverzeichnisse. (Diese Option wird beim Erstellen von C++ verwendet
Bibliothek.)
-einschließen Datei
Prozess Datei als ob "#include "file"" als erste Zeile der Primärquelle erscheinen würde
Datei. Das erste Verzeichnis, nach dem gesucht wurde Datei funktioniert der Präprozessor?
Verzeichnis beantragen müssen of das Verzeichnis, das die Hauptquelldatei enthält. Wenn nicht gefunden
dort wird im Rest der Suchkette "#include "..."" gesucht als
Normal.
Wenn mehrere -einschließen Optionen angegeben sind, werden die Dateien in der Reihenfolge aufgenommen, in der sie
in der Befehlszeile erscheinen.
-Makros Datei
Genau wie -einschließen, außer dass alle durch Scannen erzeugten Ausgaben Datei ist geworfen
ein Weg. Von ihm definierte Makros bleiben definiert. Auf diese Weise können Sie alle Makros erfassen
aus einem Header, ohne auch dessen Deklarationen zu verarbeiten.
Alle Dateien angegeben von -Makros werden vor allen von . angegebenen Dateien verarbeitet -einschließen.
-idrafter dir
Suche dir für Header-Dateien, aber tun Sie es nachdem alle mit angegebenen Verzeichnisse -I und der
Standard-Systemverzeichnisse sind erschöpft. dir wird als System-Include behandelt
Verzeichnis. Wenn dir beginnt mit "=", dann wird das "=" durch das sysroot ersetzt
Präfix; sehen -Sysroot und -isysroot.
-iPräfix Präfix
Angeben Präfix als Präfix für nachfolgende -imitPräfix Optionen. Wenn das Präfix
ein Verzeichnis darstellt, sollten Sie das Finale einschließen /.
-imitPräfix dir
-iwithprefixbefore dir
Anhängen dir an das zuvor angegebene Präfix mit -iPräfix, und fügen Sie das resultierende
Verzeichnis in den Include-Suchpfad. -iwithprefixbefore bringt es an die gleiche Stelle -I
möchten; -imitPräfix legt es wo -idrafter würde.
-isysroot dir
Diese Option ist wie die -Sysroot Option, gilt aber nur für Header-Dateien (außer für
Darwin-Ziele, wo es sowohl für Header-Dateien als auch für Bibliotheken gilt). Siehe die
-Sysroot Option für weitere Informationen.
-imultilib dir
Verwenden Sie die dir als Unterverzeichnis des Verzeichnisses, das zielspezifische C++-Header enthält.
-isystem dir
Suche dir für Header-Dateien, nach allen durch . angegebenen Verzeichnissen -I aber vor dem
Standard-Systemverzeichnisse. Markieren Sie es als Systemverzeichnis, damit es dasselbe erhält
Sonderbehandlung wie bei den Standard-Systemverzeichnissen. Wenn dir beginnt
mit "=" wird das "=" durch das Sysroot-Präfix ersetzt; sehen -Sysroot und
-isysroot.
-Ich zitiere dir
Suche dir nur für Header-Dateien, die mit "#include" angefordert wurdenDatei""; Sie sind nicht
gesucht nach "#includeDatei>", vor allen durch . angegebenen Verzeichnissen -I und vor dem
Standard-Systemverzeichnisse. Wenn dir beginnt mit "=", dann wird das "=" ersetzt durch
das Sysroot-Präfix; sehen -Sysroot und -isysroot.
-fdirektiven-nur
Behandeln Sie bei der Vorverarbeitung Direktiven, aber erweitern Sie keine Makros.
Das Verhalten der Option hängt von der -E und -fvorverarbeitet Optionen.
Mit -E, beschränkt sich die Vorverarbeitung auf die Behandlung von Direktiven wie "#define",
"#ifdef" und "#fehler". Andere Präprozessoroperationen, wie Makroexpansion und
Trigraph-Konvertierung wird nicht durchgeführt. zusätzlich -dd Option ist implizit
aktiviert.
Mit -fvorverarbeitet, Vordefinition der Befehlszeile und der meisten eingebauten Makros ist
Behinderte. Makros wie "__LINE__", die kontextabhängig sind, werden behandelt
normalerweise. Dies ermöglicht die Zusammenstellung von Dateien, die zuvor mit "-E . vorverarbeitet wurden
-fdirectives-only".
Mit beiden -E und -fvorverarbeitet, die Regeln für -fvorverarbeitet Vorrang haben. Dies
ermöglicht die vollständige Vorverarbeitung von Dateien, die zuvor mit "-E . vorverarbeitet wurden
-fdirectives-only".
-fdollars-in-Identifikatoren
Akzeptieren $ bei Identifikatoren.
-fextended-Identifikatoren
Akzeptieren Sie universelle Zeichennamen in Bezeichnern. Diese Option ist standardmäßig aktiviert
für C99 (und spätere C-Standardversionen) und C++.
-fno-canonical-system-header
Verkürzen Sie bei der Vorverarbeitung keine Systemheaderpfade durch Kanonisierung.
-fvorverarbeitet
Zeigen Sie dem Präprozessor an, dass die Eingabedatei bereits vorverarbeitet wurde. Dies
unterdrückt Dinge wie Makroexpansion, Trigraph-Konvertierung, Escape-Newline-Spleißen,
und Verarbeitung der meisten Richtlinien. Der Präprozessor erkennt und entfernt weiterhin
Kommentare, damit Sie eine Datei mit vorverarbeitet übergeben können -C zum Compiler ohne
Probleme. In diesem Modus ist der integrierte Präprozessor kaum mehr als ein Tokenizer
für die vorderen Enden.
-fvorverarbeitet ist implizit, wenn die Eingabedatei eine der Erweiterungen hat .i, .ii or .mi.
Dies sind die Erweiterungen, die GCC für vorverarbeitete Dateien verwendet, die von . erstellt wurden -Save-Temps.
-ftabstop=Breite
Legen Sie den Abstand zwischen den Tabstopps fest. Dies hilft dem Präprozessor, die richtige Spalte zu melden
Nummern in Warnungen oder Fehlern, auch wenn in der Zeile Tabulatoren erscheinen. Wenn der Wert kleiner ist
als 1 oder größer als 100, wird die Option ignoriert. Der Standardwert ist 8.
-fdebug-cpp
Diese Option ist nur zum Debuggen von GCC nützlich. Bei Verwendung mit -E, Dumps debuggen
Informationen zu Standortkarten. Jedem Token in der Ausgabe geht der Dump von . voran
die Karte, zu der sein Standort gehört. Der Dump der Karte, die den Standort eines Tokens enthält
wäre:
{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"loc": }
Bei Verwendung ohne -E, diese Option hat keine Auswirkung.
-ftrack-Makro-Erweiterung[=Grad des ]
Verfolgen Sie die Standorte von Token über Makroerweiterungen hinweg. Dadurch kann der Compiler
Diagnose über den aktuellen Makro-Erweiterungsstapel, wenn ein Kompilierungsfehler auftritt in
eine Makroerweiterung. Die Verwendung dieser Option führt dazu, dass der Präprozessor und der Compiler verbrauchen
Mehr Speicherplatz. Die Grad des Parameter kann verwendet werden, um die Genauigkeit des Tokens zu wählen
Standortverfolgung, wodurch der Speicherverbrauch bei Bedarf verringert wird. Wert 0 of
Grad des deaktiviert diese Option, als ob nein -ftrack-Makro-Erweiterung war anwesend am
die Befehlszeile. Wert 1 verfolgt Token-Standorte in einem degradierten Modus aus Gründen der
minimaler Speicher-Overhead. In diesem Modus sind alle Spielsteine, die aus der Erweiterung eines
-Argument eines funktionsähnlichen Makros dieselbe Position haben. Wert 2 verfolgt Token
Standorte vollständig. Dieser Wert ist der speicherhungrigste. Wenn diese Option gegeben ist
kein Argument, der Standardparameterwert ist 2.
Beachten Sie, dass "-ftrack-macro-expansion=2" standardmäßig aktiviert ist.
-fexec-charset=charset
Legen Sie den Ausführungszeichensatz fest, der für Zeichenfolgen- und Zeichenkonstanten verwendet wird. Der Standard
ist UTF-8. charset kann jede Codierung sein, die von der "iconv"-Bibliothek des Systems unterstützt wird
Routine.
-fwide-exec-charset=charset
Legen Sie den breiten Ausführungszeichensatz fest, der für breite Zeichenfolgen- und Zeichenkonstanten verwendet wird.
Der Standardwert ist UTF-32 oder UTF-16, je nachdem, was der Breite von "wchar_t" entspricht. Wie
mit -fexec-Zeichensatz, charset kann jede Codierung sein, die von "iconv" des Systems unterstützt wird
Bibliotheksroutine; Sie werden jedoch Probleme mit Kodierungen haben, die nicht passen
genau in "wchar_t".
-Finput-charset =charset
Legen Sie den Eingabezeichensatz fest, der für die Übersetzung aus dem Zeichensatz der Eingabe verwendet wird
Datei in den von GCC verwendeten Quellzeichensatz. Wenn das Gebietsschema nicht angibt, oder GCC
kann diese Informationen nicht aus dem Gebietsschema abrufen, der Standardwert ist UTF-8. Das kann sein
entweder durch das Gebietsschema oder diese Befehlszeilenoption überschrieben. Derzeit ist der Befehls-
line-Option hat Vorrang, wenn ein Konflikt auftritt. charset kann jede Codierung sein
unterstützt durch die Bibliotheksroutine "iconv" des Systems.
-fworking-Verzeichnis
Aktivieren Sie die Generierung von Linienmarkierungen in der Präprozessorausgabe, die den Compiler
kennen das aktuelle Arbeitsverzeichnis zum Zeitpunkt der Vorverarbeitung. Wenn diese Option ist
aktiviert ist, gibt der Präprozessor nach dem ersten Linienmarker einen zweiten Linienmarker aus
mit dem aktuellen Arbeitsverzeichnis gefolgt von zwei Schrägstrichen. GCC wird dies verwenden
Verzeichnis, wenn es in der vorverarbeiteten Eingabe vorhanden ist, als das Verzeichnis, das ausgegeben wird als
das aktuelle Arbeitsverzeichnis in einigen Debugging-Informationsformaten. Diese Option ist
implizit aktiviert, wenn Debugging-Informationen aktiviert sind, dies kann jedoch mit verhindert werden
die negierte Form -fno-Arbeitsverzeichnis. Wenn der -P Flag ist im Befehl vorhanden
line hat diese Option keine Auswirkung, da keinerlei "#line"-Anweisungen ausgegeben werden.
-fno-show-Spalte
Drucken Sie keine Spaltennummern in der Diagnose. Dies kann erforderlich sein, wenn die Diagnose
von einem Programm gescannt wird, das die Spaltennummern nicht versteht, wie z
dejagnu.
-A Prädikat=beantworten
Machen Sie eine Aussage mit dem Prädikat Prädikat und antworte beantworten. Dieses Formular ist
der älteren Form vorgezogen -A Prädikat(beantworten), die immer noch unterstützt wird, weil es
verwendet keine Shell-Sonderzeichen.
-A -Prädikat=beantworten
Stornieren Sie eine Behauptung mit dem Prädikat Prädikat und antworte beantworten.
-dCHARS
Schreiben ist eine Folge von einem oder mehreren der folgenden Zeichen und darf nicht sein
ein Leerzeichen vorangestellt. Andere Zeichen werden vom eigentlichen Compiler interpretiert, oder
für zukünftige Versionen von GCC reserviert und werden daher stillschweigend ignoriert. Wenn Sie angeben
Charaktere, deren Verhalten widersprüchlich ist, ist das Ergebnis undefiniert.
M Generieren Sie anstelle der normalen Ausgabe eine Liste von #define Richtlinien für alle
Makros, die während der Ausführung des Präprozessors definiert wurden, einschließlich vordefinierter
Makros. Auf diese Weise können Sie herausfinden, was in Ihrer Version von . vordefiniert ist
der Präprozessor. Angenommen, Sie haben keine Datei foo.h, der Befehl
berühren Sie foo.h; cpp -dM foo.h
zeigt alle vordefinierten Makros an.
Wenn Du -dm ohne das -E Option, -dm wird als Synonym für interpretiert
-fdump-rtl-mach.
D Like M außer in zweierlei Hinsicht: das tut es nicht enthalten die vordefinierten Makros, und es
Ausgänge beide #define Anweisungen und das Ergebnis der Vorverarbeitung. Beide Arten
der Ausgabe gehen Sie in die Standardausgabedatei.
N Like D, sondern geben nur die Makronamen aus, nicht ihre Erweiterungen.
I Ausgang #einschließen Direktiven zusätzlich zum Ergebnis der Vorverarbeitung.
U Like D außer dass nur Makros, die erweitert sind oder deren Definiertheit getestet wird
in Präprozessordirektiven werden ausgegeben; die Ausgabe wird bis zur Verwendung verzögert oder
Test des Makros; und #undef Direktiven werden auch für getestete Makros ausgegeben, aber
damals undefiniert.
-P Verhindern Sie die Erzeugung von Linienmarkierungen in der Ausgabe des Präprozessors. Das könnte sein
nützlich, wenn der Präprozessor auf etwas ausgeführt wird, das kein C-Code ist und gesendet wird
zu einem Programm, das durch die Linienmarkierungen verwechselt werden könnte.
-C Kommentare nicht verwerfen. Alle Kommentare werden an die Ausgabedatei weitergegeben, außer
für Kommentare in verarbeiteten Weisungen, die mit der Weisung gelöscht werden.
Sie sollten auf Nebenwirkungen bei der Anwendung vorbereitet sein -C; es bewirkt, dass der Präprozessor
Kommentare als eigenständige Token behandeln. Zum Beispiel Kommentare, die beim
Beginn einer Direktive-Linie hat den Effekt, dass diese Linie in eine
normale Quellzeile, da das erste Token in der Zeile nicht mehr a . ist #.
-CC Verwerfen Sie keine Kommentare, auch nicht während der Makroerweiterung. Das ist wie -C, außer
dass Kommentare, die in Makros enthalten sind, auch an die Ausgabedatei weitergegeben werden, wo
das Makro wird erweitert.
Neben den Nebenwirkungen der -C Option, die -CC Option verursacht alle C++-Stile
Kommentare in einem Makro, die in Kommentare im C-Stil umgewandelt werden sollen. Dies soll später verhindert werden
Verwendung dieses Makros, um den Rest der Quellzeile versehentlich auskommentieren zu können.
Die -CC Option wird im Allgemeinen verwendet, um Lint-Kommentare zu unterstützen.
-traditionell-cpp
Versuchen Sie, das Verhalten altmodischer C-Präprozessoren im Gegensatz zu ISO C . zu imitieren
Präprozessoren.
-Trigraphen
Trigraph-Sequenzen verarbeiten. Dies sind Sequenzen aus drei Zeichen, die alle mit beginnen
??, die nach ISO C für einzelne Zeichen stehen. Zum Beispiel, ??/ steht
für \, damit '??/n' ist eine Zeichenkonstante für einen Zeilenumbruch. Standardmäßig ignoriert GCC
Trigraphen, aber in standardkonformen Modi wandelt es sie um. Siehe die -Std und -ansi
Optionen.
Die neun Trigraphen und ihre Ersetzungen sind
Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Ersetzung: [ ] { } # \ ^ | ~
-neu zuordnen
Aktivieren Sie speziellen Code, um Dateisysteme zu umgehen, die nur sehr kurze Dateien zulassen
Namen wie MS-DOS.
--help
--target-help
Geben Sie Text aus, der alle Befehlszeilenoptionen beschreibt, anstatt alles vorzuverarbeiten.
-v Ausführlicher Modus. Drucken Sie die Versionsnummer von GNU CPP zu Beginn der Ausführung aus und
meldet die endgültige Form des Include-Pfads.
-H Drucken Sie den Namen jeder verwendeten Header-Datei zusätzlich zu anderen normalen Aktivitäten. Jeder
Name ist eingerückt, um zu zeigen, wie tief im #einschließen Stapel ist es. Vorkompilierter Header
Dateien werden auch gedruckt, selbst wenn sie sich als ungültig herausstellen; eine ungültige vorkompilierte
Header-Datei wird gedruckt mit ... x und ein gültiges mit ...! .
-Ausführung
--Version
Drucken Sie die Versionsnummer von GNU CPP aus. Fahren Sie mit einem Bindestrich wie gewohnt mit der Vorverarbeitung fort.
Beenden Sie sofort mit zwei Strichen.
Bestehen Optionen zu Monteur
Sie können Optionen an den Assembler übergeben.
- Wa,zu erhalten
Passieren zu erhalten als Option für den Assembler. Wenn zu erhalten enthält Kommas, es wird geteilt
in mehrere Optionen an den Kommas.
-Xassembler zu erhalten
Passieren zu erhalten als Option für den Assembler. Damit können Sie systemspezifische
Assembler-Optionen, die GCC nicht erkennt.
Wenn Sie eine Option übergeben möchten, die ein Argument akzeptiert, müssen Sie verwenden -Xassembler zweimal,
einmal für die Option und einmal für das Argument.
Optionen für Linking
Diese Optionen kommen ins Spiel, wenn der Compiler Objektdateien mit einer ausführbaren Datei verknüpft
Ausgabedatei. Sie sind bedeutungslos, wenn der Compiler keinen Linkschritt ausführt.
Objektdateiname
Ein Dateiname, der nicht mit einem speziellen anerkannten Suffix endet, gilt als Name und
Objektdatei oder Bibliothek. (Objektdateien werden durch den Linker von Bibliotheken unterschieden
entsprechend dem Dateiinhalt.) Wenn eine Verknüpfung erfolgt, werden diese Objektdateien als
Eingabe in den Linker.
-c
-S
-E Wenn eine dieser Optionen verwendet wird, wird der Linker nicht ausgeführt und die Objektdateinamen
sollten nicht als Argumente verwendet werden.
-fuse-ld=bfd
Verwenden Sie das bfd Linker anstelle des Standardlinkers.
-fuse-ld=Gold
Verwenden Sie das Gold Linker anstelle des Standardlinkers.
-lBibliothek
-l Bibliothek
Durchsuchen Sie die Bibliothek mit dem Namen Bibliothek beim Verlinken. (Die zweite Alternative mit dem
Bibliothek als separates Argument dient nur der POSIX-Konformität und wird nicht empfohlen.)
Es macht einen Unterschied, wo Sie diese Option im Befehl schreiben; der Linker sucht
und verarbeitet Bibliotheken und Objektdateien in der angegebenen Reihenfolge. Daher, foo.o
-lz bar.o durchsucht Bibliothek z nach Datei foo.o Aber vorher bar.o. Wenn bar.o bezieht sich auf
funktioniert in z, werden diese Funktionen möglicherweise nicht geladen.
Der Linker durchsucht eine Standardliste von Verzeichnissen nach der Bibliothek, die eigentlich
eine Datei mit dem Namen bibliothek.a. Der Linker verwendet diese Datei dann so, als ob sie angegeben worden wäre
genau nach namen.
Zu den durchsuchten Verzeichnissen gehören mehrere Standardsystemverzeichnisse sowie alle, die Sie
angeben mit -L.
Normalerweise sind die auf diese Weise gefundenen Dateien Bibliotheksdateien --- Archivdateien, deren Mitglieder
Objektdateien. Der Linker verarbeitet eine Archivdatei, indem er sie nach Mitgliedern durchsucht
die Symbole definieren, die bisher referenziert, aber nicht definiert wurden. Aber wenn die
Die gefundene Datei ist eine gewöhnliche Objektdatei, sie wird auf die übliche Weise verlinkt. Die
einziger Unterschied zwischen der Verwendung von an -l Option und die Angabe eines Dateinamens ist das -l
umgibt Bibliothek mit lib und .a und durchsucht mehrere Verzeichnisse.
-lobjc
Sie brauchen diesen Sonderfall der -l Option, um ein Objective-C zu verknüpfen oder
Objective-C++-Programm.
-nostartfiles
Verwenden Sie beim Verknüpfen nicht die standardmäßigen Systemstartdateien. Das Standardsystem
Bibliotheken werden normalerweise verwendet, es sei denn -nostdlib or -nodefaultlibs wird eingesetzt.
-nodefaultlibs
Verwenden Sie beim Binden nicht die Standard-Systembibliotheken. Nur die von Ihnen angegebenen Bibliotheken
werden an den Linker übergeben, und Optionen, die die Verknüpfung der Systembibliotheken spezifizieren, wie z
as -static-libgcc or -shared-libgcc, werden ignoriert. Es werden die Standard-Startup-Dateien verwendet
normalerweise, es sei denn -nostartfiles wird eingesetzt.
Der Compiler kann Aufrufe von "memcmp", "memset", "memcpy" und "memmove" generieren. Diese
Einträge werden normalerweise durch Einträge in der libc aufgelöst. Diese Einstiegspunkte sollten sein
durch einen anderen Mechanismus bereitgestellt, wenn diese Option angegeben ist.
-nostdlib
Verwenden Sie beim Verknüpfen nicht die standardmäßigen Systemstartdateien oder -bibliotheken. Kein Start
Dateien und nur die von Ihnen angegebenen Bibliotheken werden an den Linker und die Optionen übergeben
Angabe der Verknüpfung der Systembibliotheken, wie z -static-libgcc or -shared-libgcc,
werden ignoriert.
Der Compiler kann Aufrufe von "memcmp", "memset", "memcpy" und "memmove" generieren. Diese
Einträge werden normalerweise durch Einträge in der libc aufgelöst. Diese Einstiegspunkte sollten sein
durch einen anderen Mechanismus bereitgestellt, wenn diese Option angegeben ist.
Eine der Standardbibliotheken, die umgangen wurde -nostdlib und -nodefaultlibs is libgcc.a herunter ,ein
Bibliothek mit internen Unterprogrammen, die GCC verwendet, um Unzulänglichkeiten bestimmter
Maschinen oder spezielle Anforderungen für einige Sprachen.
In den meisten Fällen brauchst du libgcc.a auch wenn Sie andere Standardbibliotheken vermeiden möchten.
Mit anderen Worten, wenn Sie angeben -nostdlib or -nodefaultlibs du solltest normalerweise
angeben -lgcc sowie. Dadurch wird sichergestellt, dass Sie keine unaufgelösten Verweise auf
interne GCC-Bibliotheksunterprogramme. (Ein Beispiel für ein solches internes Unterprogramm ist
"__main", wird verwendet, um sicherzustellen, dass C++-Konstruktoren aufgerufen werden.)
-Kuchen
Erstellen Sie eine positionsunabhängige ausführbare Datei auf Zielen, die dies unterstützen. Für vorhersehbare
Ergebnisse, müssen Sie auch denselben Satz von Optionen angeben, die für die Kompilierung verwendet werden (-fpie,
-fpie, oder Modellunteroptionen), wenn Sie diese Linkeroption angeben.
-kein Kuchen
Erzeuge keine positionsunabhängige ausführbare Datei.
-rdynamisch
Übergib die Flagge -export-dynamisch zum ELF-Linker auf Zielen, die ihn unterstützen. Dies
weist den Linker an, alle Symbole, nicht nur die verwendeten, zum dynamischen Symbol hinzuzufügen
Tisch. Diese Option wird für einige Verwendungen von "dlopen" benötigt oder um das Abrufen von zu ermöglichen
Backtraces innerhalb eines Programms.
-s Entfernen Sie alle Symboltabellen- und Verlagerungsinformationen aus der ausführbaren Datei.
-statisch
Auf Systemen, die dynamisches Verknüpfen unterstützen, verhindert dies die Verknüpfung mit dem freigegebenen
Bibliotheken. Auf anderen Systemen hat diese Option keine Auswirkung.
-geteilt
Erstellen Sie ein gemeinsames Objekt, das dann mit anderen Objekten verknüpft werden kann, um ein
ausführbar. Nicht alle Systeme unterstützen diese Option. Für vorhersehbare Ergebnisse müssen Sie
Geben Sie auch den gleichen Satz von Optionen an, der für die Kompilierung verwendet wird (-fpic, -fPIC, oder Modell
Unteroptionen), wenn Sie diese Linker-Option angeben.[1]
-shared-libgcc
-static-libgcc
Auf Systemen, die libgcc als gemeinsam genutzte Bibliothek erzwingen diese Optionen die Verwendung von
entweder die freigegebene oder die statische Version. Wenn keine freigegebene Version von libgcc wurde
erstellt, als der Compiler konfiguriert wurde, haben diese Optionen keine Auswirkung.
Es gibt mehrere Situationen, in denen eine Anwendung die freigegebenen libgcc
statt der statischen Version. Die häufigste davon ist, wenn die Anwendung
möchte Ausnahmen in verschiedenen gemeinsam genutzten Bibliotheken auslösen und abfangen. In diesem Fall,
jede der Bibliotheken sowie die Anwendung selbst sollten die freigegebenen libgcc.
Daher fügen die G++- und GCJ-Treiber automatisch hinzu -shared-libgcc wann immer du baust
eine gemeinsam genutzte Bibliothek oder eine ausführbare Hauptdatei, da C++- und Java-Programme normalerweise verwenden
Ausnahmen, also ist dies der richtige Weg.
Wenn Sie stattdessen den GCC-Treiber verwenden, um gemeinsam genutzte Bibliotheken zu erstellen, stellen Sie möglicherweise fest, dass sie
sind nicht immer mit dem geteilten verknüpft libgcc. Wenn GCC findet, bei seiner Konfiguration
Mal, dass Sie einen Nicht-GNU-Linker oder einen GNU-Linker haben, der die Option nicht unterstützt
--eh-frame-hdr, es verlinkt die freigegebene Version von libgcc in gemeinsam genutzte Bibliotheken von
Ursprünglich. Andernfalls nutzt es den Linker und optimiert die Verlinkung
mit der geteilten Version von libgcc, Verknüpfung mit der statischen Version von libgcc von
Ursprünglich. Dadurch können Ausnahmen über solche gemeinsam genutzten Bibliotheken verbreitet werden, ohne
anfallende Umzugskosten bei der Ladezeit der Bibliothek.
Wenn jedoch eine Bibliothek oder eine ausführbare Hauptdatei Ausnahmen auslösen oder abfangen soll, müssen Sie
muss es mit dem G++- oder GCJ-Treiber verknüpfen, je nach den in den Sprachen verwendeten Sprachen
Programm oder mit der Option -shared-libgcc, sodass es mit dem geteilten verknüpft ist
libgcc.
-statisch-libasan
Wenn das -fsanitize=Adresse Option wird verwendet, um ein Programm zu verknüpfen, den GCC-Treiber
automatisch verlinkt gegen libanesisch. Wenn libanesisch ist als gemeinsame Bibliothek verfügbar, und
-statisch Option nicht verwendet wird, dann verlinkt dieser Link auf die freigegebene Version von libanesisch.
Die -statisch-libasan Option leitet den GCC-Treiber zum Link libanesisch statisch, ohne
zwangsläufig andere Bibliotheken statisch verknüpfen.
-static-libtsan
Wenn das -fsanitize=Thread Option wird verwendet, um ein Programm zu verknüpfen, den GCC-Treiber
automatisch verlinkt gegen libsan. Wenn libsan ist als gemeinsame Bibliothek verfügbar, und
-statisch Option nicht verwendet wird, dann verlinkt dieser Link auf die freigegebene Version von libsan.
Die -static-libtsan Option leitet den GCC-Treiber zum Link libsan statisch, ohne
zwangsläufig andere Bibliotheken statisch verknüpfen.
-Static-Liblsan
Wenn das -fsanitize=leck Option wird verwendet, um ein Programm zu verknüpfen, den GCC-Treiber
automatisch verlinkt gegen libsan. Wenn libsan ist als gemeinsame Bibliothek verfügbar, und
-statisch Option nicht verwendet wird, dann verlinkt dieser Link auf die freigegebene Version von libsan.
Die -Static-Liblsan Option leitet den GCC-Treiber zum Link libsan statisch, ohne
zwangsläufig andere Bibliotheken statisch verknüpfen.
-static-libubsan
Wenn das -fsanitize=undefiniert Option wird verwendet, um ein Programm zu verknüpfen, den GCC-Treiber
automatisch verlinkt gegen libubsan. Wenn libubsan ist als gemeinsame Bibliothek verfügbar,
und der -statisch Option nicht verwendet wird, dann verlinkt dieser Link auf die freigegebene Version von
libubsandem „Vermischten Geschmack“. Seine -static-libubsan Option leitet den GCC-Treiber zum Link libubsan
statisch, ohne unbedingt andere Bibliotheken statisch zu verknüpfen.
-static-libmpx
Wenn das -fcheck-Zeiger Beschränkt und -mmpx Optionen werden verwendet, um ein Programm zu verknüpfen, die GCC
Fahrer verlinkt automatisch gegen libmpx. Wenn libmpx ist als geteilt verfügbar
Bibliothek und die -statisch Option nicht verwendet wird, dann verlinkt dieser Link gegen die geteilte
Version von libmpxdem „Vermischten Geschmack“. Seine -static-libmpx Option leitet den GCC-Treiber zum Link libmpx
statisch, ohne unbedingt andere Bibliotheken statisch zu verknüpfen.
-static-libmpxwrappers
Wenn das -fcheck-Zeiger Beschränkt und -mmpx Optionen werden verwendet, um ein Programm ohne
auch mit -fno-chkp-use-wrapper, verlinkt der GCC-Treiber automatisch mit
libmpxwrappers. Wenn libmpxwrappers ist als gemeinsame Bibliothek verfügbar, und die -statisch
Option nicht verwendet wird, dann verlinkt dieser Link auf die freigegebene Version von libmpxwrappersdem „Vermischten Geschmack“. Seine
-static-libmpxwrappers Option leitet den GCC-Treiber zum Link libmpxwrappers
statisch, ohne unbedingt andere Bibliotheken statisch zu verknüpfen.
-static-libstdc++
Wenn das g ++ Programm wird verwendet, um ein C++-Programm zu verknüpfen, es verknüpft normalerweise automatisch
gegen libstdc ++. Wenn libstdc ++ ist als gemeinsame Bibliothek verfügbar, und die -statisch
Option nicht verwendet wird, dann verlinkt dieser Link auf die freigegebene Version von libstdc ++. Das ist
normalerweise in Ordnung. Es ist jedoch manchmal nützlich, die Version von einzufrieren libstdc ++
vom Programm verwendet, ohne bis zu einem vollständig statischen Link zu gehen. Die
-static-libstdc++ Option leitet die g ++ Treiber zum Verlinken libstdc ++ statisch, ohne
zwangsläufig andere Bibliotheken statisch verknüpfen.
-symbolisch
Binden Sie Referenzen an globale Symbole, wenn Sie ein gemeinsam genutztes Objekt erstellen. Vor allem warnen
nicht aufgelöste Verweise (sofern nicht durch die Link-Editor-Option überschrieben -Xlinker -z
-Xlinker defs). Nur wenige Systeme unterstützen diese Option.
-T Skript
Verwenden Sie die Skript als Linker-Skript. Diese Option wird von den meisten Systemen unterstützt, die das
GNU-Linker. Bei einigen Zielen, z. B. Bare-Board-Zielen ohne Betriebssystem,
-T Option kann beim Verknüpfen erforderlich sein, um Verweise auf undefinierte Symbole zu vermeiden.
-Xlinker zu erhalten
Passieren zu erhalten als Option für den Linker. Damit können Sie anlagenspezifische
Linker-Optionen, die GCC nicht erkennt.
Wenn Sie eine Option übergeben möchten, die ein separates Argument benötigt, müssen Sie verwenden -Xlinker
zweimal, einmal für die Option und einmal für das Argument. Zum Beispiel zu bestehen -behaupten
Definitionen, du musst schreiben -Xlinker -behaupten -Xlinker Definitionen. Es funktioniert nicht
zu schreiben -Xlinker "-behaupten Definitionen", weil dies den gesamten String als a . übergibt
einzelnes Argument, was der Linker nicht erwartet.
Wenn Sie den GNU-Linker verwenden, ist es normalerweise bequemer, Argumente an den Linker zu übergeben
Optionen mit der zu erhalten=Wert Syntax als als separate Argumente. Sie zum Beispiel
kann spezifizieren -Xlinker -Map=ausgabe.map statt -Xlinker -Karte -Xlinker Ausgabe.map.
Andere Linker unterstützen diese Syntax für Befehlszeilenoptionen möglicherweise nicht.
-WL,zu erhalten
Passieren zu erhalten als Option für den Linker. Ob zu erhalten enthält Kommas, es ist aufgeteilt in
mehrere Optionen an den Kommas. Sie können diese Syntax verwenden, um ein Argument an die . zu übergeben
Möglichkeit. Beispielsweise, -Wl,-Map,output.map leitet -Karte Ausgabe.map zum Linker. Wann
Wenn Sie den GNU-Linker verwenden, können Sie den gleichen Effekt auch mit erzielen -Wl, -Map = output.map.
HINWEIS: In Ubuntu 8.10 und späteren Versionen ist für LDFLAGS die Option -Wl,-z,relro wird eingesetzt.
Verwenden Sie zum Deaktivieren -Wl,-z,norelro.
-u Symbol
Tu so, als ob das Symbol Symbol ist undefiniert, um das Verknüpfen von Bibliotheksmodulen zu erzwingen
es. Sie können verwenden -u mehrmals mit unterschiedlichen Symbolen, um das Laden von . zu erzwingen
zusätzliche Bibliotheksmodule.
-z Stichwort
-z wird zusammen mit dem Schlüsselwort direkt an den Linker weitergegeben Stichwort. Siehe Abschnitt
in der Dokumentation Ihres Linkers nach zulässigen Werten und deren Bedeutung.
Optionen für Verzeichnis Suche
Diese Optionen geben Verzeichnisse an, um nach Header-Dateien, nach Bibliotheken und nach Teilen zu suchen
des Compilers:
-Idir
Verzeichnis hinzufügen dir an den Kopf der Liste der zu durchsuchenden Verzeichnisse header
Dateien. Dies kann verwendet werden, um eine System-Header-Datei zu überschreiben und Ihre eigene zu ersetzen
Version, da diese Verzeichnisse vor der Systemheaderdatei durchsucht werden
Verzeichnisse. Sie sollten diese Option jedoch nicht verwenden, um Verzeichnisse hinzuzufügen, die
vom Hersteller bereitgestellte System-Header-Dateien (verwenden Sie -isystem dafür). Wenn Sie mehr als einen verwenden
-I Option werden die Verzeichnisse von links nach rechts durchsucht; das Standardsystem
Verzeichnisse kommen danach.
Wenn ein Standardsystem-Include-Verzeichnis oder ein mit -isystemist
auch angegeben mit -I, der -I Option wird ignoriert. Das Verzeichnis wird noch durchsucht, aber
als Systemverzeichnis an seiner normalen Position in der Systemkette einschließen. Dies ist zum
Stellen Sie sicher, dass das Verfahren von GCC zum Beheben fehlerhafter Systemheader und die Bestellung der
"include_next"-Direktive werden nicht versehentlich geändert. Wenn du dich wirklich ändern musst
die Suchreihenfolge für Systemverzeichnisse, verwenden Sie die -nostdinc und / oder -isystem Optionen.
-iplugindir=dir
Legen Sie das Verzeichnis fest, um nach Plugins zu suchen, die von . übergeben werden -fplugin=Name statt
-fplugin=Weg/Name.so. Diese Option soll nicht vom Benutzer verwendet werden, sondern nur
am Fahrer vorbeigefahren.
-Ich zitieredir
Verzeichnis hinzufügen dir an den Kopf der Liste der zu durchsuchenden Verzeichnisse header
Dateien nur für den Fall "#include"Datei""; sie werden nicht nach "#include . gesucht
<Datei>", sonst einfach so -I.
-Ldir
Verzeichnis hinzufügen dir zur Liste der zu durchsuchenden Verzeichnisse -l.
-BPräfix
Diese Option gibt an, wo die ausführbaren Dateien, Bibliotheken, Include-Dateien und
Datendateien des Compilers selbst.
Das Compiler-Treiberprogramm führt eines oder mehrere der Unterprogramme aus cpp, cc1, as und ld.
Es versucht Präfix als Präfix für jedes Programm, das es auszuführen versucht, sowohl mit als auch ohne
Maschine/Version/.
Für jedes auszuführende Unterprogramm versucht der Compilertreiber zuerst die -B Präfix, falls vorhanden.
Wenn dieser Name nicht gefunden wird, oder wenn -B nicht angegeben ist, versucht der Treiber zwei Standard
Präfixe, /usr/lib/gcc/ und /usr/local/lib/gcc/. Wenn keines von beiden zu a . führt
gefundenen Dateinamen wird der unveränderte Programmname mit Hilfe der . gesucht
Verzeichnisse, die in Ihrem . angegeben sind PATH variable Umgebung
Der Compiler prüft, ob der von -B verweist auf ein Verzeichnis, und wenn
erforderlich, fügt es am Ende des Pfads ein Verzeichnistrennzeichen hinzu.
-B Präfixe, die effektiv Verzeichnisnamen angeben, gelten auch für Bibliotheken im
linker, weil der Compiler diese Optionen in übersetzt -L Optionen für den Linker.
Sie gelten auch für das Einbinden von Dateien in den Präprozessor, da der Compiler übersetzt
diese Optionen in -isystem Optionen für den Präprozessor. In diesem Fall ist der Compiler
hängt an das zum Präfix.
Die Laufzeitunterstützungsdatei libgcc.a kann auch gesucht werden mit der -B Präfix, wenn
erforderlich. Wenn es dort nicht gefunden wird, werden die beiden obigen Standardpräfixe versucht, und das
ist Alles. Die Datei wird aus dem Link herausgelassen, wenn sie auf diese Weise nicht gefunden wird.
Eine andere Möglichkeit, ein Präfix ähnlich wie das anzugeben -B Präfix ist, die Umgebung zu verwenden
Variable GCC_EXEC_PREFIX.
Als besonderes Kludge, wenn der Weg von -B is [dir/]bühneN/, Wobei N ist eine Zahl
im Bereich von 0 bis 9, dann wird es ersetzt durch [dir/]einschließen. Dies soll beim Booten helfen
den Compiler anschnallen.
-spezifikationen=Datei
Prozess Datei nachdem der Compiler den Standard eingelesen hat Spezifikation Datei, um zu überschreiben
die Voreinstellungen, die die gcc Treiberprogramm verwendet, um zu bestimmen, welche Schalter zu bestehen sind
zu cc1, cc1plus, as, ld, usw. Mehr als eine -spezifikationen=Datei kann auf der angegeben werden
Befehlszeile, und sie werden der Reihe nach von links nach rechts verarbeitet.
--sysroot=dir
Verwenden Sie die dir als logisches Stammverzeichnis für Header und Bibliotheken. Zum Beispiel, wenn die
Compiler sucht normalerweise nach Headern in / usr / include und Bibliotheken in / Usr / libEs
stattdessen sucht dir/usr/include und dir/usr/lib.
Wenn Sie sowohl diese Option als auch die -isysroot Option, dann die -Sysroot zu erhalten
gilt für Bibliotheken, aber die -isysroot Option gilt für Header-Dateien.
Der GNU-Linker (ab Version 2.16) hat dafür die nötige Unterstützung
Möglichkeit. Wenn Ihr Linker diese Option nicht unterstützt, wird der Header-Datei-Aspekt von
-Sysroot funktioniert immer noch, aber der Bibliotheksaspekt nicht.
--no-sysroot-suffix
Bei einigen Zielen wird dem Root-Verzeichnis, das mit angegeben ist, ein Suffix hinzugefügt -Sysroot,
abhängig von den anderen verwendeten Optionen, sodass Header beispielsweise in
dir/suffix/usr/include statt dir/usr/include. Diese Option deaktiviert die Zugabe
eines solchen Suffixes.
-I- Diese Option ist veraltet. Bitte verwenden Sie -Ich zitiere anstatt von -I Verzeichnisse vor
-I- und entfernen Sie die -I- Möglichkeit. Alle Verzeichnisse, die Sie mit angeben -I Optionen vor
-I- Option wird nur für den Fall von "#include" gesuchtDatei""; Sie sind nicht
gesucht nach "#includeDatei>".
Wenn zusätzliche Verzeichnisse mit . angegeben werden -I Optionen nach dem -I- Option, diese
Verzeichnisse werden nach allen "#include"-Direktiven durchsucht. (Gewöhnlich alle -I
Verzeichnisse werden auf diese Weise verwendet.)
Darüber hinaus ist die -I- Option verhindert die Verwendung des aktuellen Verzeichnisses (wo die
aktuelle Eingabedatei stammt) als erstes Suchverzeichnis für "#include"Datei"".
Es gibt keine Möglichkeit, diesen Effekt von . zu überschreiben -I-. Mit -I. Sie können die Suche angeben
das Verzeichnis, das beim Aufrufen des Compilers aktuell ist. Das ist nicht genau das
das gleiche wie das, was der Präprozessor standardmäßig tut, aber es ist oft zufriedenstellend.
-I- verhindert nicht die Verwendung der Standard-Systemverzeichnisse für Header-Dateien.
Somit -I- und -nostdinc sind unabhängig.
Angeben Target Maschine und Compiler Version
Die übliche Methode zum Ausführen von GCC besteht darin, die ausführbare Datei namens . auszuführen gcc, oder auch Maschine-gcc wenn kreuz-
kompilieren, oder Maschine-gcc-Version um eine andere als die installierte Version auszuführen
letzte.
Hardware Modelle und Konfigurationen
Jeder Zielmaschinentyp kann seine eigenen speziellen Optionen haben, beginnend mit -m, wählen
zwischen verschiedenen Hardwaremodellen oder -konfigurationen --- zum Beispiel 68010 vs 68020, Floating
Coprozessor oder keiner. Eine einzelne installierte Version des Compilers kann für jedes Modell kompilieren
oder Konfiguration, je nach den angegebenen Optionen.
Einige Konfigurationen des Compilers unterstützen auch zusätzliche Sonderoptionen, normalerweise für
Kompatibilität mit anderen Compilern auf derselben Plattform.
AAArch64 Optionen
Diese Optionen sind für AArch64-Implementierungen definiert:
-mabi=Name
Generieren Sie Code für das angegebene Datenmodell. Zulässige Werte sind ilp32 für SysV-
wie ein Datenmodell, bei dem int, long int und Pointer 32-Bit sind, und lp64 für SysV-like
Datenmodell, wobei int 32-Bit ist, aber long int und Pointer 64-Bit sind.
Der Standardwert hängt von der spezifischen Zielkonfiguration ab. Beachten Sie, dass der LP64 und
ILP32-ABIs sind nicht Link-kompatibel; Sie müssen Ihr gesamtes Programm mit demselben kompilieren
ABI und verknüpfen Sie mit einem kompatiblen Satz von Bibliotheken.
-mbig-endian
Big-Endian-Code generieren. Dies ist die Standardeinstellung, wenn GCC für einen . konfiguriert ist
aarch64_be-*-* Ziel.
-mgeneral-regs-only
Generieren Sie Code, der nur die Universalregister verwendet. Dadurch wird verhindert, dass
Compiler von der Verwendung von Gleitkomma- und erweiterten SIMD-Registern ab, aber er wird keine auferlegen
Einschränkungen für den Assembler.
-mlittle-endian
Generieren Sie Little-Endian-Code. Dies ist die Standardeinstellung, wenn GCC für einen . konfiguriert ist
aarch64-*-* aber nicht ein aarch64_be-*-* Ziel.
-mcmodel=winzig
Generieren Sie Code für das winzige Codemodell. Das Programm und seine statisch definierten Symbole
müssen nicht mehr als 1 GB voneinander entfernt sein. Zeiger sind 64 Bit. Programme können statisch sein
oder dynamisch verknüpft. Dieses Modell ist nicht vollständig implementiert und wird meistens als
klein.
-mcmodel=klein
Generieren Sie Code für das Small-Code-Modell. Das Programm und seine statisch definierten
Symbole dürfen nicht mehr als 4 GB voneinander entfernt sein. Zeiger sind 64 Bit. Programme können sein
statisch oder dynamisch verknüpft. Dies ist das Standardcodemodell.
-mcmodel=groß
Generieren Sie Code für das große Codemodell. Dies macht keine Annahmen über Adressen und
Größen der Abschnitte. Zeiger sind 64 Bit. Programme können nur statisch verlinkt werden.
-mstrict-align
Gehen Sie nicht davon aus, dass nicht ausgerichtete Speicherreferenzen vom System verarbeitet werden.
-momit-Blatt-Rahmen-Zeiger
-mno-leaf-frame-pointer auslassen
Lassen Sie den Rahmenzeiger in Blattfunktionen weg oder behalten Sie ihn bei. Das frühere Verhalten ist das
default.
-mtls-dialekt=beschr
Verwenden Sie TLS-Deskriptoren als Thread-lokalen Speichermechanismus für dynamische Zugriffe auf TLS
Variablen. Dies ist die Standardeinstellung.
-mtls-dialekt=traditionell
Verwenden Sie traditionelles TLS als Thread-lokalen Speichermechanismus für dynamische Zugriffe auf TLS
Variablen.
-mtls-Größe=Größe
Geben Sie die Bitgröße der unmittelbaren TLS-Offsets an. Gültige Werte sind 12, 24, 32, 48. Dies
Option hängt von Binutils ab, die höher als 2.25 sind.
-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Aktivieren oder deaktivieren Sie die Problemumgehung für die ARM Cortex-A53-Erratum-Nummer 835769. Dies
beinhaltet das Einfügen einer NOP-Anweisung zwischen Speicheranweisungen und 64-Bit-Integer
Anweisungen multiplizieren-akkumulieren.
-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
Aktivieren oder deaktivieren Sie die Problemumgehung für die ARM Cortex-A53-Erratum-Nummer 843419. Dies
Erratum-Workaround wird zur Linkzeit durchgeführt und dies wird nur das entsprechende Flag übergeben
zum Linker.
-marsch=Name
Geben Sie den Namen der Zielarchitektur und optional ein oder mehrere Features an
Modifikatoren. Diese Option hat die Form -marsch=Bogen{+[nicht]-Funktion}*.
Die zulässigen Werte für Bogen sind armv8-a, armv8.1-a or nativen.
Der Wert armv8.1-a impliziert armv8-a und aktiviert Compiler-Unterstützung für ARMv8.1
Architekturerweiterung. Es ermöglicht insbesondere die +cr und +weniger Funktionen.
Der Wert nativen ist auf nativem AArch64 GNU/Linux verfügbar und bewirkt, dass der Compiler
Wählen Sie die Architektur des Hostsystems aus. Diese Option hat keine Auswirkung, wenn der Compiler
die Architektur des Hostsystems nicht erkennen kann,
Die zulässigen Werte für -Funktion sind im Unterabschnitt zu
aarch64-feature-modifiers,,-march und -mcpu Merkmal Modifikatoren. Wo widersprüchlich
Feature-Modifizierer angegeben werden, wird das Feature ganz rechts verwendet.
GCC verwendet Name um zu bestimmen, welche Art von Anweisungen es beim Generieren ausgeben kann
Assembler-Code. Wenn -März wird ohne eines von angegeben -munt or -mcpu auch sein
angegeben, ist der Code so abgestimmt, dass er über eine Reihe von Zielprozessoren hinweg gut funktioniert
Implementierung der Zielarchitektur.
-mtune=Name
Geben Sie den Namen des Zielprozessors an, für den GCC die Leistung von . optimieren soll
der Code. Zulässige Werte für diese Option sind: Generika, Cortex-a53, Cortex-a57,
Cortex-a72, exynos-m1, qdf24xx, donnerx, xgen1.
Darüber hinaus kann diese Option festlegen, dass GCC die Leistung des Codes optimieren soll
für ein großes.LITTLE System. Zulässige Werte für diese Option sind:
cortex-a57.cortex-a53, cortex-a72.cortex-a53.
Zusätzlich auf nativen AArch64 GNU/Linux-Systemen der Wert nativen ist verfügbar. Dies
Option veranlasst den Compiler, die Architektur der
Code für den Prozessor des Hostsystems. Diese Option hat keine Auswirkung, wenn der Compiler
kann die Architektur des Hostsystems nicht erkennen.
Wo keiner von -mtune=, -mcpu= or -marsch= angegeben sind, ist der Code auf Leistung abgestimmt
gut über eine Reihe von Zielprozessoren hinweg.
Diese Option kann nicht von Feature-Modifizierern angehängt werden.
-mcpu=Name
Geben Sie den Namen des Zielprozessors an, optional mit dem Suffix eines oder mehrerer Features
Modifikatoren. Diese Option hat die Form -mcpu=CPU{+[nicht]-Funktion}*, wobei das zulässige
Werte für CPU sind die gleichen wie die für -munt. Die zulässigen Werte für
-Funktion sind im Unterabschnitt über . dokumentiert aarch64-feature-modifiers,,-march und
-mcpu Merkmal Modifikatoren. Wenn widersprüchliche Feature-Modifikatoren angegeben sind,
Die Funktion ganz rechts wird verwendet.
Zusätzlich auf nativen AArch64 GNU/Linux-Systemen der Wert nativen ist verfügbar. Dies
Option bewirkt, dass der Compiler die Leistung des Codes für den Prozessor von
das Host-System. Diese Option hat keine Auswirkung, wenn der Compiler die
Architektur des Hostsystems.
GCC verwendet Name um zu bestimmen, welche Art von Anweisungen es beim Generieren ausgeben kann
Assemblercode (als ob von -März) und um den Zielprozessor zu bestimmen, für den
Melodie für Leistung (als ob von -munt). Wenn diese Option in Verbindung mit verwendet wird
-März or -munt, haben diese Optionen Vorrang vor dem entsprechenden Teil dieser
.
-moverride=Schnur
Tuning-Entscheidungen, die vom Back-End als Reaktion auf a . getroffen wurden, überschreiben -mtune= Schalter. Das
Syntax, Semantik und akzeptierte Werte für Schnur in dieser Option sind nicht garantiert
über mehrere Releases hinweg konsistent sein.
Diese Option soll nur bei der Entwicklung von GCC nützlich sein.
-mpc-relative-literal-loads
Aktivieren Sie PC-relative literale Ladevorgänge. Wenn diese Option verwendet wird, wird davon ausgegangen, dass Literalpools
eine Reichweite von bis zu 1MiB haben und eine entsprechende Befehlsfolge verwendet wird. Dies
Option hat keine Auswirkung bei Verwendung mit -mcmodel=winzig.
-März und -mcpu Funktionsmodifikatoren
Feature-Modifikatoren, die mit verwendet werden -März und -mcpu kann eine der folgenden und ihre sein
umgekehrt nicht-Funktion:
crc Aktivieren Sie die CRC-Erweiterung. Dies ist standardmäßig aktiviert für -march=armv8.1-a.
Krypto
Krypto-Erweiterung aktivieren. Dies ermöglicht auch Advanced SIMD und Floating-Point
Anweisungen.
fp Gleitkomma-Anweisungen aktivieren. Dies ist standardmäßig für alle möglichen Werte für aktiviert
Optionen -März und -mcpu.
simd
Aktivieren Sie die erweiterten SIMD-Anweisungen. Dies ermöglicht auch Gleitkommabefehle.
Dies ist standardmäßig für alle möglichen Werte für Optionen aktiviert -März und -mcpu.
Lch Aktivieren Sie die Anweisungen für die große Systemerweiterung. Dies ist standardmäßig aktiviert für
-march=armv8.1-a.
Das heißt, Krypto impliziert simd impliziert fp. Umgekehrt, nofp (oder äquivalent,
-mgeneral-regs-only) impliziert nosimd impliziert keine Krypto.
Adapteva Dreikönigsfest Optionen
Diese -m Optionen sind für Adapteva Epiphany definiert:
-mhalf-reg-Datei
Weisen Sie kein Register im Bereich "r32"..."r63" zu. Dadurch kann Code ausgeführt werden
Hardwarevarianten, denen diese Register fehlen.
-mrefer-short-insn-regs
Weisen Sie vorzugsweise Register zu, die eine kurze Befehlserzeugung ermöglichen. Das kann
zu einer erhöhten Befehlsanzahl führen, sodass dies insgesamt entweder reduziert oder erhöht werden kann
Codegröße.
-filialkosten=num
Legen Sie die Kosten für Filialen auf ungefähr fest num "einfache" Anleitung. Diese Kosten sind nur a
heuristisch und es kann nicht garantiert werden, dass über mehrere Releases hinweg konsistente Ergebnisse erzielt werden.
-mcmove
Aktivieren Sie die Generierung von bedingten Verschiebungen.
-mnops=num
Emittieren num NOPs vor jedem anderen generierten Befehl.
-mno-soft-cmpsf
Geben Sie für Gleitkommavergleiche mit einfacher Genauigkeit einen "fsub"-Befehl aus und testen Sie
die Fahnen. Dies ist schneller als ein Softwarevergleich, kann aber zu falschen Ergebnissen führen
in Gegenwart von NaNs oder wenn zwei verschiedene kleine Zahlen verglichen werden, so dass
ihre Differenz wird als Null berechnet. Die Standardeinstellung ist -msoft-cmpsf, Welche Anwendungen
langsamere, aber IEEE-konforme Softwarevergleiche.
-mstack-offset=num
Legen Sie den Versatz zwischen dem oberen Ende des Stapels und dem Stapelzeiger fest. ZB ein Wert von 8
bedeutet, dass die acht Bytes im Bereich "sp+0...sp+7" von Blattfunktionen verwendet werden können
ohne Stapelzuordnung. Andere Werte als 8 or 16 sind ungetestet und unwahrscheinlich
Arbeit. Beachten Sie auch, dass diese Option die ABI ändert; kompilieren eines Programms mit a
ein anderer Stack-Offset als die Bibliotheken mit denen die Bibliotheken kompiliert wurden in der Regel nicht
Arbeit. Diese Option kann nützlich sein, wenn Sie prüfen möchten, ob ein anderer Stapelversatz
würde Ihnen besseren Code geben, aber tatsächlich einen anderen Stack-Offset zum Erstellen verwenden
Arbeitsprogrammen wird empfohlen, die Toolchain mit den entsprechenden
--with-stack-offset=num .
-mno-round-nächster
Lassen Sie den Scheduler davon ausgehen, dass der Rundungsmodus auf Abschneiden eingestellt wurde. Die
Standard ist -mround-nächstes.
-mlong-anrufe
Wenn durch ein Attribut nicht anders angegeben, gehen Sie davon aus, dass alle Aufrufe außerhalb des
Offset-Bereich der Anweisungen "b" / "bl", und laden Sie daher die Funktionsadresse
in ein Register ein, bevor Sie einen (ansonsten direkten) Anruf durchführen. Dies ist die Standardeinstellung.
-mkurze-Anrufe
Wenn durch ein Attribut nicht anders angegeben, nehmen Sie an, dass alle Direktaufrufe im Bereich liegen
der Anweisungen "b" / "bl", verwenden Sie diese Anweisungen also für direkte Anrufe. Die
Standard ist -mlong-anrufe.
-mklein16
Angenommen, Adressen können als 16-Bit-Werte ohne Vorzeichen geladen werden. Dies gilt nicht für
Funktionsadressen für die -mlong-anrufe Semantik ist wirksam.
-mfp-mode=Modus
Stellen Sie den vorherrschenden Modus der Gleitkommaeinheit ein. Dies bestimmt die Schwebe-
Punktmodus, der beim Funktionsaufruf und bei der Rückkehr bereitgestellt und erwartet wird. Herstellung
Dieser Modus entspricht dem Modus, den Sie hauptsächlich beim Funktionsstart benötigen, kann Ihren
Programme kleiner und schneller, indem unnötige Moduswechsel vermieden werden.
Modus kann auf einen der folgenden Werte eingestellt werden:
Anrufer
Jeder Modus bei Funktionseintritt ist gültig und wird beibehalten oder wiederhergestellt, wenn die Funktion
zurückgibt, und wenn es andere Funktionen aufruft. Dieser Modus ist nützlich zum Kompilieren
Bibliotheken oder andere Kompilierungseinheiten, die Sie in andere
Programme mit verschiedenen vorherrschenden FPU-Modi und die Bequemlichkeit, in der Lage zu sein,
Die Verwendung einer einzigen Objektdatei überwiegt die Größe und den Geschwindigkeitsaufwand für jeden zusätzlichen Modus
Schaltvorgänge, die möglicherweise erforderlich sind, verglichen mit dem, was mit einem mehr erforderlich wäre
spezifische Wahl des vorherrschenden FPU-Modus.
abschneiden
Dies ist der Modus, der für Gleitkommaberechnungen mit Abschneiden verwendet wird (dh rund
gegen Null) Rundungsmodus. Dazu gehört die Konvertierung von Gleitkomma in
ganze Zahl.
rund-nächst
Dies ist der Modus, der für Gleitkommaberechnungen mit Round-to-Nearest-or-
sogar Rundungsmodus.
int Dies ist der Modus, der verwendet wird, um Integer-Berechnungen in der FPU durchzuführen, z. B. Integer
multiplizieren oder ganzzahlig multiplizieren und akkumulieren.
Die Standardeinstellung ist -mfp-mode=Anrufer
-mnosplit-lohi
-mno-postinc
-mno-postmodify
Optimierungen bei der Codegenerierung, die das Aufteilen von 32-Bit-Lasten deaktivieren bzw.
Generierung von Post-Inkrement-Adressen und Generierung von Post-Modify-Adressen. Die
Standardwerte sind msplit-lohi, -mpost-inc und -mpost-modifizieren.
-mnovect-double
Ändern Sie den bevorzugten SIMD-Modus in SImode. Die Standardeinstellung ist -mvect-double, Welche Anwendungen
DImode als bevorzugter SIMD-Modus.
-Max-vect-align =num
Die maximale Ausrichtung für SIMD-Vektormodustypen. num kann 4 oder 8 sein. Der Standardwert ist
8. Beachten Sie, dass dies eine ABI-Änderung ist, obwohl viele Bibliotheksfunktionsschnittstellen
nicht betroffen, wenn sie keine SIMD-Vektormodi an Stellen verwenden, die sich auf die Größe und/oder . auswirken
Ausrichtung relevanter Typen.
-msplit-vecmove-früh
Teilen Sie die Vektorbewegungen in einzelne Wortbewegungen, bevor Sie sie neu laden. Theoretisch kann das geben
bessere Registerzuordnung, aber bisher scheint im Allgemeinen das Gegenteil der Fall zu sein.
-m1reg-reg
Geben Sie ein Register an, um die Konstante -1 zu halten, wodurch das Laden klein negativ wird
Konstanten und bestimmte Bitmasken schneller. Zulässige Werte für reg sind r43 und r63,
die die Verwendung dieses Registers als festes Register spezifizieren, und keine, was bedeutet, dass nein
Zu diesem Zweck wird das Register verwendet. Die Standardeinstellung ist -m1reg-keine.
ARC Optionen
Die folgenden Optionen steuern die Architekturvariante, für die Code kompiliert wird:
-mbarrel-Shifter
Generieren Sie Anweisungen, die vom Barrel-Shifter unterstützt werden. Dies ist die Standardeinstellung, es sei denn
-mcpu=ARC601 ist in Kraft.
-mcpu=CPU
Legen Sie die Parameter für Architekturtyp, Registerverwendung und Befehlsplanung fest für CPU.
Es gibt auch Shortcut-Alias-Optionen für Abwärtskompatibilität und
Bequemlichkeit. Unterstützte Werte für CPU sind
ARC600
Kompilieren Sie für ARC600. Aliase: -mA6, -mARC600.
ARC601
Kompilieren Sie für ARC601. Alias: -mARC601.
ARC700
Kompilieren Sie für ARC700. Aliase: -mA7, -mARC700. Dies ist die Standardeinstellung, wenn konfiguriert
mit --with-cpu=arc700.
-mdpfp
-mdpfp-kompakt
FPX: Generieren Sie Double Precision FPX-Anweisungen, die auf die kompakte Implementierung abgestimmt sind.
-mdpfp-schnell
FPX: Generieren Sie Double Precision FPX-Anweisungen, die auf die schnelle Implementierung abgestimmt sind.
-mno-dpfp-lrsr
Deaktivieren Sie die LR- und SR-Befehle für die Verwendung von FPX-Erweiterungs-Aux-Registern.
-mea
Generieren Sie erweiterte arithmetische Anweisungen. Derzeit nur "divaw", "adds", "subs",
und "sat16" werden unterstützt. Dies ist immer aktiviert für -mcpu=ARC700.
-mno-mpy
Generieren Sie keine MPy-Anweisungen für ARC700.
-mmul32x16
Generieren Sie 32x16-Bit-Multiplikations- und Mac-Anweisungen.
-mmul64
Generieren Sie mul64- und mulu64-Anweisungen. Gilt nur für -mcpu=ARC600.
-mnorm
Normanweisung generieren. Dies ist die Standardeinstellung, wenn -mcpu=ARC700 ist in Kraft.
-mspfp
-mspfp-kompakt
FPX: Generieren Sie Single Precision FPX-Anweisungen, die auf die kompakte Implementierung abgestimmt sind.
-mspfp-schnell
FPX: Generieren Sie Single Precision FPX-Anweisungen, die auf die schnelle Implementierung abgestimmt sind.
-msimd
Aktivieren Sie die Generierung von ARC SIMD-Anweisungen über zielspezifische Built-Ins. Nur gültig
für -mcpu=ARC700.
-msoft-float
Diese Option wird ignoriert; es wird nur zu Kompatibilitätszwecken bereitgestellt. Software
Gleitkommacode wird standardmäßig ausgegeben, und dieser Standard kann von FPX überschrieben werden
Optionen; mspfp, mspfp-kompakt, oder auch mspfp-schnell für einfache Genauigkeit und mdpfp, mdpfp-
kompakt, oder auch mdpfp-schnell für doppelte Präzision.
-mswap
Swap-Anweisungen generieren.
Die folgenden Optionen werden an den Assembler durchgereicht und definieren auch Präprozessor
Makrosymbole.
-mdsp-packa
Wird an den Assembler weitergegeben, um die DSP Pack A-Erweiterungen zu aktivieren. Setzt auch die
Präprozessorsymbol "__Xdsp_packa".
-mdvbf
Wird an den Assembler weitergegeben, um die duale Viterbi Butterfly-Erweiterung zu aktivieren. Ebenfalls
setzt das Präprozessorsymbol "__Xdvbf".
-mlock
Wird an den Assembler weitergegeben, um die Locked Load/Store Conditional-Erweiterung zu aktivieren.
Setzt auch das Präprozessorsymbol "__Xlock".
-mmac-d16
An den Assembler weitergegeben. Setzt auch das Präprozessorsymbol "__Xxmac_d16".
-mmac-24
An den Assembler weitergegeben. Setzt auch das Präprozessorsymbol "__Xxmac_24".
-mrtsc
Wird an den Assembler weitergegeben, um die 64-Bit-Zeitstempelzähler-Erweiterung zu aktivieren
Anweisung. Setzt auch das Präprozessorsymbol "__Xrtsc".
-mswap
Wird an den Assembler weitergegeben, um die Anweisung zur Erweiterung der Swap-Byte-Reihenfolge zu aktivieren.
Setzt auch das Präprozessorsymbol "__Xswape".
-Telefonie
Wird an den Assembler weitergegeben, um Dual- und Single-Operand-Anweisungen für
Telefonie. Setzt auch das Präprozessorsymbol "__Xtelephony".
-mxy
Wird an den Assembler weitergegeben, um die XY-Speichererweiterung zu aktivieren. Setzt auch die
Präprozessorsymbol "__Xxy".
Die folgenden Optionen steuern, wie der Assemblycode mit Anmerkungen versehen wird:
-missize
Kommentieren Sie Assembler-Anweisungen mit geschätzten Adressen.
-mannotate-align
Erklären Sie, welche Überlegungen zur Ausrichtung zu der Entscheidung führen, eine Anweisung zu machen
kurz oder lang.
Die folgenden Optionen werden an den Linker durchgereicht:
-marclinux
Wird an den Linker weitergegeben, um die Verwendung der "arclinux"-Emulation anzugeben. Diese Option
ist standardmäßig in Toolketten aktiviert, die für "arc-linux-uclibc" erstellt wurden und
"arceb-linux-uclibc"-Ziele, wenn keine Profilerstellung angefordert wird.
-marclinux_prof
Wird an den Linker weitergegeben, um die Verwendung der Emulation "arclinux_prof" anzugeben. Dies
Option ist standardmäßig in Toolketten aktiviert, die für "arc-linux-uclibc" erstellt wurden und
"arceb-linux-uclibc"-Ziele, wenn Profilerstellung angefordert wird.
Die folgenden Optionen steuern die Semantik des generierten Codes:
-mepilog-cfi
Aktivieren Sie die Generierung von Anrufrahmeninformationen für Epiloge.
-mno-epilog-cfi
Deaktivieren Sie die Generierung von Anrufrahmeninformationen für Epiloge.
-mlong-anrufe
Generieren Sie Anruf-Insns als Register indirekte Anrufe und bieten Sie so Zugriff auf den vollen
32-Bit-Adressbereich.
-mmedium-Anrufe
Verwenden Sie nicht weniger als 25-Bit-Adressierungsbereich für Anrufe, das ist der verfügbare Offset
für einen unbedingten Branch-and-Link-Befehl. Bedingte Ausführung der Funktion
Anrufe werden unterdrückt, um die Verwendung des 25-Bit-Bereichs anstelle des 21-Bit-Bereichs zu ermöglichen
mit bedingter Verzweigung und Verknüpfung. Dies ist die Standardeinstellung für Werkzeugketten, die für
"arc-linux-uclibc"- und "arceb-linux-uclibc"-Ziele.
-mno-sdata
Generieren Sie keine Sdata-Referenzen. Dies ist die Standardeinstellung für Werkzeugketten, die für
"arc-linux-uclibc"- und "arceb-linux-uclibc"-Ziele.
-mucb-mcount
Instrument mit mcount-Aufrufen wie im UCB-Code verwendet. Dh zähle im Angerufenen,
nicht der Anrufer. Standardmäßig zählt die ARC-Instrumentierung im Aufrufer.
-mvolatile-cache
Verwenden Sie normalerweise zwischengespeicherte Speicherzugriffe für flüchtige Verweise. Dies ist die Standardeinstellung.
-mno-volatile-cache
Aktivieren Sie die Cache-Umgehung für flüchtige Verweise.
Die folgenden Optionen optimieren die Codegenerierung:
-bösartiger Ruf
Führen Sie Ausrichtungsoptimierungen für Anrufanweisungen durch.
-mauto-modify-reg
Aktivieren Sie die Verwendung von Pre/Post Modify mit Registerverschiebung.
-mbbit-Guckloch
Aktivieren Sie bbit peephole2.
-mno-brcc
Diese Option deaktiviert einen zielspezifischen Pass in arc_reorg "BRcc" generieren
Anweisungen. Sie hat keine Auswirkung auf die durch den Kombiniererdurchlauf getriebene "BRcc"-Erzeugung.
-mcase-Vektor-pcrel
PC-relative Switch-Case-Tabellen verwenden - dies ermöglicht die Verkürzung der Case-Tabelle. Dies ist das
Standard für -Du.
-mcompact-casesi
Aktivieren Sie das kompakte Casesi-Muster. Dies ist die Standardeinstellung für -Du.
-mno-cond-exec
Deaktivieren Sie den ARCompact-spezifischen Durchgang, um bedingte Ausführungsanweisungen zu generieren. Während
um Slot-Scheduling und Interaktionen zwischen Operandennummern, Literalgrößen zu verzögern,
Befehlslängen und die Unterstützung für bedingte Ausführung, die zielunabhängige
Pass zum Generieren einer bedingten Ausführung fehlt oft, daher hat der ARC-Port einen beibehalten
spezieller Durchlauf, der versucht, mehr bedingte Ausführungsgenerierung zu finden
Möglichkeiten nach Registerzuweisung, Verzweigungsverkürzung und Verzögerungszeitschlitzplanung
wurden durchgeführt. Dieser Pass verbessert im Allgemeinen, aber nicht immer die Leistung und den Code
Größe, auf Kosten zusätzlicher Kompilierungszeit, weshalb es eine Option zum Wechseln gibt
es aus. Wenn Sie ein Problem mit Aufrufanweisungen haben, die ihren zulässigen Offset überschreiten
Bereich, da sie konditionalisiert sind, sollten Sie die Verwendung von . in Betracht ziehen -mmedium-Anrufe
stattdessen.
-mearly-cbranchsi
Aktivieren Sie die Verwendung des cbranchsi-Musters vor dem Neuladen.
-mexpand-adddi
Erweitern Sie "adddi3" und "subdi3" zum Zeitpunkt der RTL-Generierung in "add.f", "adc" usw.
-indizierte-Lasten
Aktivieren Sie die Verwendung indizierter Lasten. Dies kann problematisch sein, da einige Optimierer dann
annehmen, dass indizierte Speicher vorhanden sind, was nicht der Fall ist.
-mlra
Aktivieren Sie die lokale Registerzuordnung. Dies ist für ARC noch experimentell, also standardmäßig
der Compiler verwendet Standard-Reload (dh -mno-lra).
-mlra-priorität-none
Geben Sie keine Priorität für Zielregister an.
-mlra-priority-compact
Anzeige der Zielregisterpriorität für r0..r3 / r12..r15.
-mlra-priority-noncompact
Reduzieren Sie die Zielregisterpriorität für r0..r3 / r12..r15.
-mno-Millicode
Bei der Größenoptimierung (mit -Du), Prologe und Epiloge, die retten müssen oder
Wiederherstellen einer großen Anzahl von Registern werden oft durch den Aufruf eines speziellen
Funktion in libgcc; dies wird als a . bezeichnet Millicode Anruf. Wie diese Anrufe darstellen können
Leistungsprobleme und/oder Verbindungsprobleme verursachen, wenn auf nicht standardmäßige Weise verlinkt wird,
Diese Option wird bereitgestellt, um die Generierung von Millicode-Aufrufen zu deaktivieren.
-Mischcode
Optimieren Sie die Registerzuordnung, um die Erzeugung von 16-Bit-Befehlen zu unterstützen. Dies hat im Allgemeinen
die Auswirkung der Verringerung der durchschnittlichen Befehlsgröße bei gleichzeitiger Erhöhung des Befehls
Anzahl.
-mq-Klasse
Aktivieren Sie die 'q'-Befehlsalternativen. Dies ist die Standardeinstellung für -Du.
-mRcq
Aktivieren Sie die Behandlung von Rcq-Beschränkungen - die meisten Kurzcode-Generierungen hängen davon ab. Das ist
der Standard.
-mRcw
Rcw-Beschränkungsbehandlung aktivieren - ccfsm condexec hängt hauptsächlich davon ab. Dies ist das
default.
-msize-level=Grad des
Feinabstimmung der Größenoptimierung in Bezug auf Instruktionslängen und Ausrichtung. Die
anerkannte Werte für Grad des sind:
0 Keine Größenoptimierung. Dieses Level ist veraltet und wird behandelt wie 1.
1 Kurze Anweisungen werden opportunistisch verwendet.
2 Außerdem entfällt die Ausrichtung von Schleifen und Code nach Barrieren.
3 Außerdem entfällt die optionale Datenausrichtung und die Option Os aktiviert.
Dies ist standardmäßig 3 wann -Du ist in Kraft. Andernfalls ist das Verhalten, wenn dies nicht der Fall ist
set entspricht level 1.
-mtune=CPU
Instruktionsplanungsparameter festlegen für CPU, überschreibt alle implizierten von -mcpu=.
Unterstützte Werte für CPU sind
ARC600
Tune für ARC600-CPU.
ARC601
Tune für ARC601-CPU.
ARC700
Tune für ARC700-CPU mit Standard-Multiplikatorblock.
ARC700-xmac
Tune für ARC700-CPU mit XMAC-Block.
ARC725D
Tune für ARC725D-CPU.
ARC750D
Tune für ARC750D-CPU.
-mmultkosten=num
Anzunehmende Kosten für eine Multiplikationsanweisung, mit 4 entspricht einer normalen Anweisung.
-munalign-prob-threshold=Wahrscheinlichkeit
Legen Sie den Wahrscheinlichkeitsschwellenwert für das Aufheben der Ausrichtung von Verzweigungen fest. Beim Abstimmen auf ARC700 und
Optimierung auf Geschwindigkeit, Zweige ohne gefüllten Delay-Slot werden bevorzugt emittiert
nicht ausgerichtet und lang, es sei denn, die Profilerstellung zeigt, dass die Wahrscheinlichkeit für die Verzweigung
genommen werden ist unten Wahrscheinlichkeit. Der Standardwert ist (REG_BR_PROB_BASE/2), dh 5000.
Die folgenden Optionen werden aus Gründen der Abwärtskompatibilität beibehalten, sind aber jetzt veraltet
und wird in einer zukünftigen Version entfernt:
-Margonaut
Veraltete FPX.
-mbig-endian
-EB Kompilieren Sie Code für Big-Endian-Ziele. Die Verwendung dieser Optionen ist jetzt veraltet. Benutzer
Wenn Sie Big-Endian-Code möchten, sollten Sie die Ziele "arceb-elf32" und "arceb-linux-uclibc" verwenden
beim Erstellen der Werkzeugkette, für die Big-Endian die Standardeinstellung ist.
-mlittle-endian
-DER Kompilieren Sie Code für Little-Endian-Ziele. Die Verwendung dieser Optionen ist jetzt veraltet.
Benutzer, die Little-Endian-Code wünschen, sollten "arc-elf32" und "arc-linux-uclibc" verwenden.
Ziele beim Erstellen der Werkzeugkette, für die Little-Endian die Standardeinstellung ist.
-mbarrel_shifter
Ersetzt durch -mbarrel-Shifter.
-mdpfp_compact
Ersetzt durch -mdpfp-kompakt.
-mdpfp_fast
Ersetzt durch -mdpfp-schnell.
-mdsp_packa
Ersetzt durch -mdsp-packa.
-mEA
Ersetzt durch -mea.
-mmac_24
Ersetzt durch -mmac-24.
-mmac_d16
Ersetzt durch -mmac-d16.
-mspfp_compact
Ersetzt durch -mspfp-kompakt.
-mspfp_fast
Ersetzt durch -mspfp-schnell.
-mtune=CPU
Werte arc600, arc601, arc700 und arc700-xmac für CPU werden ersetzt durch ARC600, ARC601,
ARC700 und ARC700-xmac beziehungsweise
-multicost=num
Ersetzt durch -Multkosten.
ARM Optionen
Diese -m Optionen sind für den ARM-Port definiert:
-mabi=Name
Generieren Sie Code für die angegebene ABI. Zulässige Werte sind: apcs-gnu, atst, aapcs,
aapcs-linux und iwmmxt.
-maps-Rahmen
Generieren Sie einen Stack-Frame, der dem ARM-Prozeduraufruf-Standard für alle entspricht
Funktionen, auch wenn dies für die korrekte Ausführung des Codes nicht unbedingt erforderlich ist.
Angeben -fomit-Frame-Zeiger Mit dieser Option werden die Stapelrahmen nicht
für Blattfunktionen generiert. Die Standardeinstellung ist -mno-apcs-Rahmen. Diese Option ist
veraltet.
-maps
Dies ist ein Synonym für -maps-Rahmen und ist veraltet.
-mhumb-interwork
Generieren Sie Code, der Aufrufe zwischen den ARM- und Thumb-Befehlssätzen unterstützt.
Ohne diese Option können die beiden Befehlssätze auf Architekturen vor v5 nicht
zuverlässig innerhalb eines Programms verwendet. Die Standardeinstellung ist -mno-daumen-interwork, seit etwas
größerer Code wird generiert, wenn -mhumb-interwork angegeben. In AAPCS-Konfigurationen
diese Option ist bedeutungslos.
-mno-sched-prolog
Verhindern Sie die Neuordnung von Anweisungen im Funktionsprolog oder das Zusammenführen von
diese Anweisung mit den Anweisungen im Hauptteil der Funktion. Dies bedeutet, dass alle
Funktionen beginnen mit einem erkennbaren Satz von Anweisungen (oder sogar einer einer Auswahl)
aus einer kleinen Menge verschiedener Funktionsprologe) und diese Informationen können verwendet werden, um
Suchen Sie den Anfang von Funktionen in einem ausführbaren Code. Die Standardeinstellung ist
-msched-prolog.
-mfloat-abi=Name
Gibt an, welches Gleitkomma-ABI verwendet werden soll. Zulässige Werte sind: weich, softfp und
hart.
Angeben weich bewirkt, dass GCC eine Ausgabe mit Bibliotheksaufrufen für Floating-
Punktoperationen. softfp ermöglicht die Generierung von Code mit Hardware-Gleitkomma
-Anweisungen, verwendet aber weiterhin die Softfloat-Aufrufkonventionen. hart erlaubt
Generierung von Gleitkommabefehlen und verwendet FPU-spezifische Aufrufkonventionen.
Der Standardwert hängt von der spezifischen Zielkonfiguration ab. Beachten Sie, dass der Festkörper
und Soft-Float-ABIs sind nicht Link-kompatibel; Sie müssen Ihr gesamtes Programm mit kompilieren
die gleiche ABI und mit einem kompatiblen Satz von Bibliotheken verknüpfen.
-mlittle-endian
Generieren Sie Code für einen Prozessor, der im Little-Endian-Modus ausgeführt wird. Dies ist die Standardeinstellung für
alle Standardkonfigurationen.
-mbig-endian
Generieren Sie Code für einen Prozessor, der im Big-Endian-Modus ausgeführt wird; der Standard ist zu kompilieren
Code für einen Little-Endian-Prozessor.
-marsch=Name
Dies gibt den Namen der Ziel-ARM-Architektur an. GCC verwendet diesen Namen, um
bestimmen, welche Art von Anweisungen es beim Generieren von Assemblercode ausgeben kann. Dies
Option kann in Verbindung mit oder anstelle von -mcpu= Möglichkeit. Zulässig
Namen sind: 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, iwmmxt,
iwmmxt2, ep9312.
-marsch=armv7ve ist die armv7-a-Architektur mit Virtualisierungserweiterungen.
-march=armv8-a+crc ermöglicht die Codegenerierung für die ARMv8-A Architektur zusammen mit
die optionalen CRC32-Erweiterungen.
-marsch=einheimisch bewirkt, dass der Compiler die Architektur des Builds automatisch erkennt
Rechner. Derzeit wird diese Funktion nur von GNU/Linux unterstützt und nicht von allen
Architekturen anerkannt. Wenn die automatische Erkennung nicht erfolgreich ist, hat die Option keine
Wirkung.
-mtune=Name
Diese Option gibt den Namen des Ziel-ARM-Prozessors an, für den GCC optimieren soll
die Leistung des Codes. Für einige ARM-Implementierungen kann eine bessere Leistung erzielt werden
erhalten Sie mit dieser Option. Zulässige Namen sind: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi, arm70,
arm700, arm700i, arm710, arm710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, arm710t, arm720t, arm740t, strongarm, starker Arm110, starker Arm1100,
starker Arm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi, arm1020t, arm1026ej-s,
arm10e, arm1020e, arm1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, arm1176jzf-s, generisch-armv7-a, Cortex-a5, Cortex-a7,
Cortex-a8, Cortex-a9, Cortex-a12, Cortex-a15, Cortex-a17, Cortex-a53, Cortex-a57,
Cortex-a72, Kortex-r4, Kortex-r4f, Kortex-r5, Kortex-r7, Cortex-m7, Cortex-m4,
Cortex-m3, Cortex-m1, Cortex-m0, cortex-m0plus, cortex-m1.small-multiplizieren,
cortex-m0.small-multiplizieren, cortex-m0plus.small-multiply, exynos-m1, qdf24xx,
Marvell-pj4, xscale, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te, xgen1.
Darüber hinaus kann diese Option festlegen, dass GCC die Leistung des Codes optimieren soll
für ein großes.LITTLE System. Zulässige Namen sind: cortex-a15.cortex-a7,
cortex-a17.cortex-a7, cortex-a57.cortex-a53, cortex-a72.cortex-a53.
-mtune=generisch-Bogen gibt an, dass GCC die Leistung für eine Mischung aus
Prozessoren innerhalb der Architektur Bogen. Ziel ist es, Code zu generieren, der auf dem
derzeit beliebtesten Prozessoren, Balance zwischen Optimierungen, von denen einige profitieren
CPUs im Sortiment und die Vermeidung von Leistungsfallen anderer CPUs. Die Effekte von
diese Option kann sich in zukünftigen GCC-Versionen ändern, wenn CPU-Modelle kommen und gehen.
-mtune=einheimisch bewirkt, dass der Compiler die CPU des Build-Computers automatisch erkennt. Bei
vorhanden, wird diese Funktion nur unter GNU/Linux unterstützt, und nicht alle Architekturen werden unterstützt
anerkannt. Wenn die automatische Erkennung nicht erfolgreich ist, hat die Option keine Wirkung.
-mcpu=Name
Dies gibt den Namen des Ziel-ARM-Prozessors an. GCC verwendet diesen Namen, um die
Name der Ziel-ARM-Architektur (wie angegeben durch -März) und der ARM-Prozessor
Typ, für den die Leistung eingestellt werden soll (wie von angegeben) -munt). Wo diese Option
wird in Verbindung mit verwendet -März or -munt, haben diese Optionen Vorrang vor den
entsprechenden Teil dieser Option.
Zulässige Namen für diese Option sind dieselben wie für -munt.
-mcpu=generisch-Bogen ist ebenfalls zulässig und entspricht -marsch=Bogen
-mtune=generisch-Bogen. Sehen -munt .
-mcpu=nativ bewirkt, dass der Compiler die CPU des Build-Computers automatisch erkennt. Bei
vorhanden, wird diese Funktion nur unter GNU/Linux unterstützt, und nicht alle Architekturen werden unterstützt
anerkannt. Wenn die automatische Erkennung nicht erfolgreich ist, hat die Option keine Wirkung.
-mfpu=Name
Dies gibt an, auf welcher Gleitkomma-Hardware (oder Hardware-Emulation) verfügbar ist
das Ziel. Zulässige Namen sind: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, Neon, Neon-FP16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8 und Krypto-Neon-FP-Armv8.
If -msoft-float angegeben ist, gibt dies das Format von Gleitkommawerten an.
Wenn die ausgewählte Gleitkomma-Hardware die NEON-Erweiterung enthält (z -mfpu=Neon),
Beachten Sie, dass Gleitkommaoperationen nicht vom Auto-Vektorisierungspass von GCC generiert werden
es sei denn -funsafe-mathematik-optimierungen ist ebenfalls angegeben. Dies liegt daran, dass NEON-Hardware
implementiert den IEEE 754-Standard für Gleitkomma-Arithmetik nicht vollständig (in
bestimmte denormale Werte werden als Null behandelt), daher kann die Verwendung von NEON-Befehlen
zu einem Genauigkeitsverlust führen.
-mfp16-format=Name
Geben Sie das Format des Gleitkommatyps "__fp16" mit halber Genauigkeit an. Zulässig
Namen sind keine, Ieee und Alternative; die Standardeinstellung ist keine, in diesem Fall die "__fp16"
Typ ist nicht definiert.
-mstructure-size-boundary=n
Die Größen aller Strukturen und Gewerkschaften werden auf ein Vielfaches der Anzahl der aufgerundet
Bits, die durch diese Option gesetzt werden. Zulässige Werte sind 8, 32 und 64. Der Standardwert
variiert für verschiedene Toolchains. Für die gezielte COFF-Toolkette ist der Standardwert
8. Ein Wert von 64 ist nur zulässig, wenn die zugrunde liegende ABI dies unterstützt.
Die Angabe einer größeren Zahl kann schnelleren und effizienteren Code erzeugen, kann aber auch
die Programmgröße erhöhen. Unterschiedliche Werte sind potenziell inkompatibel.
Code, der mit einem Wert kompiliert wurde, kann nicht unbedingt erwarten, dass er mit Code oder Bibliotheken funktioniert
mit einem anderen Wert kompiliert, wenn sie Informationen über Strukturen oder Vereinigungen austauschen.
-mabort-auf-noreturn
Generieren Sie einen Aufruf der Funktion "abort" am Ende einer "noreturn"-Funktion. es ist
ausgeführt, wenn die Funktion versucht, zurückzukehren.
-mlong-anrufe
-mno-lange-Anrufe
Weist den Compiler an, Funktionsaufrufe durchzuführen, indem er zuerst die Adresse des
-Funktion in ein Register und führt dann einen Unterprogrammaufruf für dieses Register aus. Dies
Schalter wird benötigt, wenn die Zielfunktion außerhalb der 64-Megabyte-Adressierung liegt
Bereich der offsetbasierten Version des Unterprogrammaufrufbefehls.
Auch wenn dieser Schalter aktiviert ist, werden nicht alle Funktionsaufrufe in lange Anrufe umgewandelt.
Die Heuristik ist, dass statische Funktionen, Funktionen mit dem "short_call"
-Attribut, Funktionen, die im Geltungsbereich einer "#pragma no_long_calls"-Direktive liegen,
und Funktionen, deren Definitionen bereits innerhalb der aktuellen
Compilereinheit werden nicht in lange Aufrufe umgewandelt. Die Ausnahmen von dieser Regel sind, dass
schwache Funktionsdefinitionen, Funktionen mit dem Attribut "long_call" oder dem "section"
-Attribut und Funktionen, die im Geltungsbereich einer "#pragma long_calls"-Direktive liegen
werden immer zu langen Anrufen.
Diese Funktion ist standardmäßig nicht aktiviert. Angabe -mno-lange-Anrufe stellt das wieder her
Standardverhalten, ebenso wie das Platzieren der Funktionsaufrufe innerhalb des Geltungsbereichs eines "#pragma
long_calls_off"-Direktive. Beachten Sie, dass diese Schalter keinen Einfluss darauf haben, wie der Compiler
generiert Code, um Funktionsaufrufe über Funktionszeiger zu verarbeiten.
-msingle-pic-base
Behandeln Sie das Register, das für die PIC-Adressierung verwendet wird, als schreibgeschützt, anstatt es in die Datei zu laden
Prolog für jede Funktion. Für die Initialisierung ist das Laufzeitsystem zuständig
registrieren Sie sich mit einem geeigneten Wert, bevor die Ausführung beginnt.
-mpic-register=reg
Geben Sie das Register an, das für die PIC-Adressierung verwendet werden soll. Für das Standard-PIC-Basisgehäuse ist die
default ist ein beliebiges geeignetes Register, das vom Compiler bestimmt wird. Für einzelnes PIC-Basisgehäuse,
Der Standardwert ist R9 wenn das Ziel EABI-basiert ist oder Stack-Checking aktiviert ist, andernfalls die
Standard ist R10.
-mpic-data-ist-text-relative
Angenommen, jedes Datensegment ist relativ zum Textsegment zur Ladezeit. Deswegen,
es ermöglicht die Adressierung von Daten unter Verwendung von PC-relativen Operationen. Diese Option ist standardmäßig aktiviert
für andere Ziele als VxWorks RTP.
-mpoke-Funktionsname
Schreiben Sie den Namen jeder Funktion in den Textabschnitt direkt vor der Funktion
Prolog. Der generierte Code sieht so aus:
t0
.ascii "arm_poke_function_name", 0
.ausrichten
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov-ip, sp
stmfd sp!, {fp, ip, lr, pc}
subfp, ip, #4
Beim Ausführen eines Stack-Backtrace kann der Code den Wert von "pc" überprüfen, der unter "fp + ." gespeichert ist
0". Wenn die Trace-Funktion dann auf die Position "pc - 12" schaut und die oberen 8 Bits sind
set, dann wissen wir, dass unmittelbar davor ein Funktionsname eingebettet ist
Standort und hat die Länge "((pc[-3]) & 0xff000000)".
-mtdaumen
-mar
Wählen Sie zwischen dem Generieren von Code, der in den Zuständen ARM und Thumb ausgeführt wird. Die Vorgabe für
Die meisten Konfigurationen bestehen darin, Code zu generieren, der im ARM-Zustand ausgeführt wird, aber die Standardeinstellung
kann durch Konfigurieren von GCC mit dem --with-mode=Zustand Option konfigurieren.
Sie können den ARM- und Thumb-Modus für jede Funktion auch überschreiben, indem Sie die
"target("thumb")" und "target("arm")" Funktionsattribute oder Pragmas.
-mtpcs-Rahmen
Generieren Sie einen Stapelrahmen, der dem Thumb Procedure Call Standard für . entspricht
alle Nicht-Blatt-Funktionen. (Eine Blattfunktion ist eine, die keine andere aufruft
Funktionen.) Die Standardeinstellung ist -mno-tpcs-rahmen.
-mtpcs-Blatt-Rahmen
Generieren Sie einen Stapelrahmen, der dem Thumb Procedure Call Standard für . entspricht
alle Blattfunktionen. (Eine Blattfunktion ist eine Funktion, die keine anderen Funktionen aufruft.)
Die Standardeinstellung ist -mno-apcs-Blattrahmen.
-mcallee-super-interworking
Gibt allen extern sichtbaren Funktionen in der zu kompilierenden Datei eine ARM-Anweisung
set header, das in den Thumb-Modus wechselt, bevor der Rest der Funktion ausgeführt wird.
Dadurch können diese Funktionen aus nicht zusammenarbeitendem Code aufgerufen werden. Diese Option ist
in AAPCS-Konfigurationen nicht gültig, da Interworking standardmäßig aktiviert ist.
-mcaller-super-interworking
Ermöglicht die korrekte Ausführung von Aufrufen über Funktionszeiger (einschließlich virtueller Funktionen)
unabhängig davon, ob der Zielcode für die Zusammenarbeit kompiliert wurde oder nicht.
Die Kosten für die Ausführung eines Funktionszeigers sind gering, wenn diese Option
aktiviert. Diese Option ist in AAPCS-Konfigurationen nicht gültig, da Interworking
standardmäßig aktiviert.
-mtp=Name
Geben Sie das Zugriffsmodell für den lokalen Thread-Speicherzeiger an. Die gültigen Modelle sind
weich, die Aufrufe an "__aeabi_read_tp" generiert, cp15, die den Thread holt
Zeiger von "cp15" direkt (unterstützt in der arm6k-Architektur) und Auto, Die
verwendet die beste verfügbare Methode für den ausgewählten Prozessor. Die Standardeinstellung ist
Auto.
-mtls-dialekt=Dialekt
Geben Sie den Dialekt an, der für den Zugriff auf den lokalen Threadspeicher verwendet werden soll. Zwei Dialekts sind
unterstützt---Gnu und gnu2dem „Vermischten Geschmack“. Seine Gnu Dialekt wählt das ursprüngliche GNU-Schema für
Unterstützung lokaler und globaler dynamischer TLS-Modelle. Die gnu2 Dialekt wählt das GNU
Deskriptorschema, das eine bessere Leistung für gemeinsam genutzte Bibliotheken bietet. Die GNU
Deskriptorschema ist mit dem ursprünglichen Schema kompatibel, erfordert aber ein neues
Assembler-, Linker- und Bibliotheksunterstützung. Initiale und lokale Exec-TLS-Modelle sind
unbeeinflusst von dieser Option und verwenden Sie immer das ursprüngliche Schema.
-mword-umzüge
Generieren Sie absolute Verschiebungen nur bei wortgroßen Werten (zB R_ARM_ABS32). Das ist
standardmäßig auf Zielen (uClinux, SymbianOS) aktiviert, auf denen der Runtime-Loader auferlegt
diese Einschränkung, und wann -fpic or -fPIC angegeben.
-mfix-cortex-m3-ldrd
Einige Cortex-M3-Kerne können Datenbeschädigungen verursachen, wenn "ldrd"-Anweisungen mit
überlappende Ziel- und Basisregister werden verwendet. Diese Option vermeidet die Generierung
diese Anleitung. Diese Option ist standardmäßig aktiviert, wenn -mcpu=cortex-m3 is
spezifiziert.
-unaligned-access
-mno-unaigned-access
Aktiviert (oder deaktiviert) das Lesen und Schreiben von 16- und 32-Bit-Werten von Adressen
die nicht 16- oder 32-bit ausgerichtet sind. Standardmäßig ist der nicht ausgerichtete Zugriff für alle deaktiviert
vor ARMv6 und alle ARMv6-M-Architekturen und für alle anderen Architekturen aktiviert. Wenn
unausgerichteter Zugriff ist nicht aktiviert, dann wird auf Wörter in gepackten Datenstrukturen zugegriffen a
Byte auf einmal.
Das ARM-Attribut "Tag_CPU_unaligned_access" wird in der generierten Objektdatei auf . gesetzt
entweder wahr oder falsch, abhängig von der Einstellung dieser Option. Bei nicht ausgerichtetem Zugriff
aktiviert ist, wird auch das Präprozessorsymbol "__ARM_FEATURE_UNALIGNED" definiert.
-mneon-für-64bits
Ermöglicht die Verwendung von Neon zur Verarbeitung von skalaren 64-Bit-Operationen. Dies ist standardmäßig deaktiviert
da die Kosten für die Übertragung von Daten von Kernregistern zu Neon hoch sind.
-mslow-flash-daten
Angenommen, das Laden von Daten aus dem Flash ist langsamer als das Abrufen von Befehlen. Daher wörtlich
Die Last wird für eine bessere Leistung minimiert. Diese Option wird nur unterstützt, wenn
Kompilieren für ARMv7 M-Profil und standardmäßig deaktiviert.
-masm-syntax-unified
Angenommen, der Inline-Assembler verwendet eine einheitliche asm-Syntax. Die Standardeinstellung ist derzeit deaktiviert
was eine geteilte Syntax impliziert. Diese Option hat keine Auswirkungen auf Thumb2. Dies kann jedoch
Änderungen in zukünftigen Versionen von GCC. Die geteilte Syntax sollte als veraltet betrachtet werden.
-mbeschränken-es
Schränkt die Generierung von IT-Blöcken ein, um den Regeln von ARMv8 zu entsprechen. IT-Blöcke können
nur einen einzelnen 16-Bit-Befehl aus einem ausgewählten Satz von Befehlen enthalten. Dies
Die Option ist standardmäßig für den ARMv8-Thumb-Modus aktiviert.
-mprint-tune-info
CPU-Tuning-Informationen als Kommentar in der Assembler-Datei ausgeben. Dies ist eine verwendete Option
nur für Regressionstests des Compilers und nicht für den normalen Gebrauch in
Code kompilieren. Diese Option ist standardmäßig deaktiviert.
AVR Optionen
Diese Optionen sind für AVR-Implementierungen definiert:
-mmcu=MCU
Geben Sie die Atmel AVR-Befehlssatzarchitekturen (ISA) oder den MCU-Typ an.
Die Standardeinstellung für diese Option ist@tie{}avr2.
GCC unterstützt die folgenden AVR-Geräte und ISAs:
"avr2"
"Klassische" Geräte mit bis zu 8@tie{}KiB Programmspeicher. MCU@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".
"avr25"
"Klassische" Geräte mit bis zu 8@tie{}KiB Programmspeicher und mit dem "MOVW"
Anweisung. 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"
"Klassische" Geräte mit 16@tie{}KiB bis 64@tie{}KiB Programmspeicher.
MCU@tie{}= "at43usb355", "at76c711".
"avr31"
"Klassische" Geräte mit 128@tie{}KiB Programmspeicher. MCU@tie{}= "atmega103",
"at43usb320".
"avr35"
"Klassische" Geräte mit 16@tie{}KiB bis 64@tie{}KiB Programmspeicher und mit
die Anweisung "MOVW". MCU@tie{}= "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"at90usb82".
"avr4"
"Erweiterte" Geräte mit bis zu 8@tie{}KiB Programmspeicher. 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"
"Erweiterte" Geräte mit 16@tie{}KiB bis zu 64@tie{}KiB Programmspeicher.
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"
"Erweiterte" Geräte mit 128@tie{}KiB Programmspeicher. MCU@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"at90usb1287".
"avr6"
"Erweiterte" Geräte mit 3-Byte-PC, dh mit mehr als 128@tie{}KiB Programm
Speicher. MCU@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".
"avrxmega2"
"XMEGA"-Geräte mit mehr als 8@tie{}KiB und bis zu 64@tie{}KiB Programmspeicher.
MCU@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".
"avrxmega4"
"XMEGA"-Geräte mit mehr als 64@tie{}KiB und bis zu 128@tie{}KiB Programm
Speicher. MCU@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".
"avrxmega5"
"XMEGA"-Geräte mit mehr als 64@tie{}KiB und bis zu 128@tie{}KiB Programm
Arbeitsspeicher und mehr als 64@tie{}KiB RAM. MCU@tie{}= "atxmega64a1",
"atxmega64a1u".
"avrxmega6"
"XMEGA"-Geräte mit mehr als 128@tie{}KiB Programmspeicher. MCU@Krawatte{}=
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".
"avrxmega7"
"XMEGA"-Geräte mit mehr als 128@tie{}KiB Programmspeicher und mehr als
64@tie{}KiB RAM. MCU@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".
"avrtiny"
"TINY" Tiny-Core-Geräte mit 512@tie{}B bis zu 4@tie{}KiB Programmspeicher.
MCU@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".
"avr1"
Diese ISA wird vom minimalen AVR-Kern implementiert und nur für Assembler unterstützt.
MCU@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".
-maccumulate-args
Ausgehende Funktionsargumente akkumulieren und den benötigten Stapelplatz für erwerben/freigeben
ausgehende Funktionsargumente einmal im Funktionsprolog/Epilog. Ohne diese Möglichkeit,
ausgehende Argumente werden vor dem Aufruf einer Funktion gepusht und danach ausgegeben.
Das Popup der Argumente nach dem Funktionsaufruf kann bei AVR teuer sein, so dass
Das Ansammeln des Stapelspeicherplatzes kann zu kleineren ausführbaren Dateien führen, da Argumente
nach einem solchen Funktionsaufruf nicht vom Stack entfernt werden.
Diese Option kann zu einer reduzierten Codegröße für Funktionen führen, die mehrere Aufrufe von
Funktionen, die ihre Argumente auf dem Stack erhalten, wie Aufrufe von printf-ähnlichen Funktionen.
-filialkosten=kosten
Setzen Sie die Verzweigungskosten für bedingte Verzweigungsanweisungen auf kosten. Angemessene Werte
für kosten sind kleine, nicht negative ganze Zahlen. Die Standardkosten für Zweigstellen betragen 0.
-mcall-prologe
Funktionen Prologe/Epiloge werden als Aufrufe entsprechender Unterprogramme erweitert. Code
Größe ist kleiner.
-minze8
Angenommen, "int" ist eine 8-Bit-Ganzzahl. Dies betrifft die Größen aller Typen: ein "char" ist 1
Byte, ein "int" ist 1 Byte, ein "long" ist 2 Byte und "long long" ist 4 Byte. Bitte
Beachten Sie, dass diese Option nicht den C-Standards entspricht, aber zu kleineren
Codegröße.
-mn-flash=num
Angenommen, der Flash-Speicher hat eine Größe von num mal 64@tie{}KiB.
-mno-unterbricht
Generierter Code ist nicht mit Hardware-Interrupts kompatibel. Codegröße ist kleiner.
-Entspann dich
Versuchen Sie, "CALL" bzw. "CALL" zu ersetzen. "JMP"-Befehl durch den kürzeren "RCALL" bzw. "RJMP"
Anleitung ggf. Einstellung -Entspann dich fügt nur die hinzu --mlink-entspannen Option zum
Assembler-Befehlszeile und die --Entspannen Sie sich Option zur Befehlszeile des Linkers.
Die Sprungentspannung wird vom Linker durchgeführt, da Sprung-Offsets vorher nicht bekannt sind
Code befindet. Daher ist der vom Compiler generierte Assemblercode derselbe,
aber die Anweisungen in der ausführbaren Datei können von den Anweisungen im Assembler abweichen
Code.
Relaxing muss eingeschaltet sein, wenn Linker-Stubs benötigt werden, siehe Abschnitt "EIND" und
Linker-Stubs unten.
-mrmw
Angenommen, das Gerät unterstützt die Read-Modify-Write-Anweisungen "XCH", "LAC", "LAS"
und "LAT".
-msp8
Behandeln Sie das Stack-Pointer-Register wie ein 8-Bit-Register, dh nehmen Sie das High-Byte von an
der Stapelzeiger ist null. Im Allgemeinen müssen Sie diese Option nicht manuell einstellen.
Diese Option wird intern vom Compiler verwendet, um Multilibs für
Architekturen "avr2" und "avr25". Diese Architekturen mischen Geräte mit und ohne
"SPH". Für jede andere Einstellung als -mmcu=avr2 or -mmcu=avr25 der Compiler-Treiber fügt hinzu
oder entfernt diese Option aus der Befehlszeile des eigentlichen Compilers, da der Compiler
weiß dann, ob das Gerät oder die Architektur einen 8-Bit-Stack-Pointer und damit kein "SPH" hat
registrieren oder nicht.
-mstrict-X
Verwenden Sie das Adressregister "X" in einer von der Hardware vorgeschlagenen Weise. Dies bedeutet, dass "X" ist
nur bei indirekter, Post-Inkrement- oder Pre-Dekrement-Adressierung verwendet.
Ohne diese Option kann das "X"-Register wie "Y" oder "Z" verwendet werden, was
wird dann durch zusätzliche Anweisungen emuliert. Laden Sie beispielsweise einen Wert mit
"X+const" Adressierung mit einem kleinen nicht-negativen "const < 64" auf ein Register Rn is
durchgeführt als
adiw r26, const ; X += konst
ld , X ; = *X
sbiw r26, const ; X -= konst
-Mtiny-Stack
Ändern Sie nur die unteren 8@tie{}Bits des Stapelzeigers.
-nodevicelib
Verlinken Sie nicht gegen die gerätespezifische Bibliothek "libdev.a" von AVR-LibC.
-Waddr-Space-Convert
Warnen Sie vor Konvertierungen zwischen Adressräumen, wenn die resultierende Adresse
space ist nicht im eingehenden Adressraum enthalten.
"EIND" und Geräte mit mehr als 128 Ki Bytes Flash
Zeiger in der Implementierung sind 16@tie{}bits breit. Die Adresse einer Funktion oder eines Labels
wird als Wortadresse dargestellt, sodass indirekte Sprünge und Aufrufe auf jeden Code abzielen können
Adresse im Bereich von 64@tie{}Ki-Wörtern.
Um den indirekten Sprung auf Geräten mit mehr als 128@tie{}Ki Bytes von . zu erleichtern
Programmspeicherplatz gibt es ein spezielles Funktionsregister namens "EIND", das als
wichtigster Teil der Zieladresse, wenn die Anweisungen "EICALL" oder "EIJMP"
benutzt.
Indirekte Sprünge und Aufrufe auf diesen Geräten werden vom Compiler wie folgt behandelt und sind
unterliegt einigen Einschränkungen:
* Der Compiler setzt nie "EIND".
* Der Compiler verwendet "EIND" implizit in "EICALL"/"EIJMP"-Anweisungen oder liest möglicherweise
"EIND" direkt um einen indirekten Aufruf/Sprung mittels "RET" zu emulieren
Anweisung.
* Der Compiler geht davon aus, dass sich "EIND" während des Startcodes oder während des
Anwendung. Insbesondere wird "EIND" nicht in Funktion oder Unterbrechung gespeichert/wiederhergestellt
Service Routine Prolog/Epilog.
* Bei indirekten Aufrufen von Funktionen und berechnetem Goto generiert der Linker Stummel. Stummel
werden manchmal auch Sprungpads genannt Trampoline. Damit springt der indirekte Aufruf/Sprung auf
so ein stummel. Der Stub enthält einen direkten Sprung zur gewünschten Adresse.
* Linker-Relaxation muss eingeschaltet sein, damit der Linker die Stubs korrekt generiert
in allen Situationen. Siehe die Compiler-Option -Entspann dich und die Linker-Option --Entspannen Sie sich.
Es gibt Eckfälle, in denen der Linker Stubs generieren soll, aber abbricht
ohne Entspannung und ohne hilfreiche Fehlermeldung.
* Das Standard-Linker-Skript ist für Code mit "EIND = 0" eingerichtet. Wenn Code angenommen wird
um für ein Setup mit "EIND != 0" zu arbeiten, muss ein benutzerdefiniertes Linker-Skript verwendet werden
um die Abschnitte, deren Name mit ".trampolines" beginnt, in das Segment zu platzieren, in dem
"EIND" zeigt auf.
* Der Startcode von libgcc setzt niemals "EIND". Beachten Sie, dass der Startcode eine Mischung ist
von Code aus libgcc und AVR-LibC. Zu den Auswirkungen von AVR-LibC auf "EIND" siehe die AVR-
LibC-Benutzerhandbuch ("http://nongnu.org/avr-libc/user-manual/").
* Es ist legitim, dass der benutzerspezifische Startcode "EIND" frühzeitig einrichtet, zum Beispiel durch
Mittel des Initialisierungscodes im Abschnitt ".init3". Ein solcher Code läuft vor
allgemeiner Startcode, der RAM initialisiert und Konstruktoren aufruft, aber nach dem Bit von
Startcode von AVR-LibC, der "EIND" auf das Segment setzt, in dem sich die Vektortabelle befindet
gelegen.
#enthalten
Statische Leere
__Attribut__((Abschnitt(.init3"),naked,used,no_instrument_function))
init3_set_eind (ungültig)
{
__asm flüchtig ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND) : "r24","memory");
}
Das Symbol "__trampolines_start" ist im Linker-Skript definiert.
* Stubs werden automatisch vom Linker generiert, wenn die folgenden beiden Bedingungen erfüllt sind
mit:
-
(kurz für erzeugen Stummel) so:
LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))
-
aussen das Segment, in dem sich die Stichleitungen befinden.
* Der Compiler gibt solche "gs"-Modifizierer für Codelabels in den folgenden Situationen aus:
-
-
- -mcall-prologe>
Befehlszeilenoption.
-
Tabellen, die Sie angeben können -fno-Sprungtabellen Befehlszeilenoption.
-
-
* Springen zu nicht-symbolischen Adressen wie so ist nicht unterstützt:
int main (nichtig)
{
/* Funktion an Wortadresse 0x2 aufrufen */
zurück ((int(*)(void)) 0x2)();
}
Stattdessen muss ein Stub eingerichtet werden, dh die Funktion muss über ein Symbol aufgerufen werden
("func_4" im Beispiel):
int main (nichtig)
{
extern int func_4 (ungültig);
/* Funktion an Byteadresse 0x4 aufrufen */
return func_4();
}
und die Anwendung verlinkt werden -Wl,--defsym,func_4=0x4. Alternativ "fuc_4"
kann im Linker-Skript definiert werden.
Handhabung der Sonderfunktionsregister „RAMPD“, „RAMPX“, „RAMPY“ und „RAMPZ“
Einige AVR-Geräte unterstützen Speicher, die größer sind als der 64@tie{}KiB-Bereich, auf den zugegriffen werden kann
mit 16-Bit-Zeigern. Um auf Speicherorte außerhalb dieses 64@tie{}KiB-Bereichs zuzugreifen,
Inhalt eines "RAMP"-Registers wird als hoher Teil der Adresse verwendet: Das "X", "Y", "Z"
Adressregister wird mit der Sonderfunktion "RAMPX", "RAMPY", "RAMPZ" verkettet
registrieren, um eine breite Adresse zu erhalten. In ähnlicher Weise wird "RAMPD" zusammen mit verwendet
direkte Ansprache.
* Der Startup-Code initialisiert die Sonderfunktionsregister "RAMP" mit Null.
* Wenn ein AVR Namens Adresse Räume, benannt Adresse Raum anders als generisch oder "__flash" ist
verwendet, dann wird "RAMPZ" nach Bedarf vor der Operation gesetzt.
* Wenn das Gerät RAM größer als 64@tie{}KiB unterstützt und der Compiler geändert werden muss
"RAMPZ", um eine Operation auszuführen, wird "RAMPZ" nach der Operation auf Null zurückgesetzt.
* Wenn das Gerät mit einem bestimmten "RAMP"-Register ausgestattet ist, wird der ISR-Prolog/Epilog
speichert/wiederherstellt diesen SFR und initialisiert ihn mit Null, falls der ISR-Code möglicherweise
(implizit) verwenden.
* RAM größer als 64@tie{}KiB wird von GCC für AVR-Ziele nicht unterstützt. Wenn du benutzt
Inline-Assembler, um von Orten außerhalb des 16-Bit-Adressbereichs zu lesen und zu ändern
eines der "RAMP"-Register, müssen Sie es nach dem Zugriff auf Null zurücksetzen.
Integrierte AVR-Makros
GCC definiert mehrere eingebaute Makros, damit der Benutzercode die Anwesenheit testen kann oder
Fehlen von Funktionen. Fast jedes der folgenden integrierten Makros wird vom Gerät abgeleitet
Fähigkeiten und damit ausgelöst durch die -mmcu= Befehlszeilenoption.
Für noch mehr AVR-spezifische integrierte Makros siehe AVR Namens Adresse Spaces und AVR Eingebaut
Funktionen.
"__AVR_ARCH__"
Eingebautes Makro, das in eine Dezimalzahl aufgelöst wird, die die Architektur identifiziert und
abhängig von der -mmcu=MCU Möglichkeit. Mögliche Werte sind:
2, 25, 3, 31, 35, 4, 5, 51, 6
für MCU="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
jeweils und
100, 102, 104, 105, 106, 107
für MCU="avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
bzw. Wenn MCU ein Gerät angibt, wird dieses eingebaute Makro entsprechend eingestellt. Zum
Beispiel, mit -mmcu=atmega8 das Makro ist auf 4 definiert.
"__AVR_Gerät__"
Rahmen -mmcu=Gerät definiert dieses eingebaute Makro, das den Namen des Geräts widerspiegelt. Zum
Beispiel -mmcu=atmega8 definiert das eingebaute Makro "__AVR_ATmega8__", -mmcu=attiny261a
definiert "__AVR_ATtiny261A__", usw.
Die Namen der eingebauten Makros folgen dem Schema "__AVR_Gerät__" woher Gerät lernen muss die
Gerätename wie aus der AVR-Bedienungsanleitung. Der Unterschied zwischen Gerät im eingebauten
Makro und Gerät in -mmcu=Gerät ist, dass letzteres immer klein geschrieben ist.
If Gerät ist kein Gerät, sondern nur eine Kernarchitektur wie avr51, dieses Makro ist nicht
definiert.
"__AVR_DEVICE_NAME__"
Rahmen -mmcu=Gerät definiert dieses eingebaute Makro für den Gerätenamen. Zum Beispiel,
mit -mmcu=atmega8 das Makro ist als "atmega8" definiert.
If Gerät ist kein Gerät, sondern nur eine Kernarchitektur wie avr51, dieses Makro ist nicht
definiert.
"__AVR_XMEGA__"
Das Gerät / die Architektur gehört zur XMEGA-Gerätefamilie.
"__AVR_HAVE_ELPM__"
Das Gerät verfügt über die Anweisung "ELPM".
"__AVR_HAVE_ELPMX__"
Das Gerät hat das "ELPM Rn, Z" und "ELPM Rn,Z+" Anweisungen.
"__AVR_HAVE_MOVW__"
Das Gerät verfügt über den Befehl "MOVW", um 16-Bit-Register-Register-Bewegungen durchzuführen.
"__AVR_HAVE_LPMX__"
Das Gerät verfügt über das "LPM Rn, Z" und "LPM Rn,Z+" Anweisungen.
"__AVR_HAVE_MUL__"
Das Gerät verfügt über einen Hardware-Multiplikator.
"__AVR_HAVE_JMP_CALL__"
Das Gerät verfügt über die Anweisungen "JMP" und "CALL". Dies ist bei Geräten mit
mindestens 16@tie{}KiB Programmspeicher.
"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
Das Gerät verfügt über die Anweisungen "EIJMP" und "EICALL". Dies ist bei Geräten der Fall
mit mehr als 128@tie{}KiB Programmspeicher. Das bedeutet auch, dass das Programm
Zähler (PC) ist 3@tie{}Byte breit.
"__AVR_2_BYTE_PC__"
Der Programmzähler (PC) ist 2@tie{}Byte breit. Dies ist bei Geräten mit bis zu
128@tie{}KiB Programmspeicher.
"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Das Stack-Pointer (SP)-Register wird von als 8-Bit- bzw. 16-Bit-Register behandelt
der Compiler. Die Definition dieser Makros wird beeinflusst durch -Mtiny-Stack.
"__AVR_HAVE_SPH__"
"__AVR_SP8__"
Das Gerät verfügt über das Sonderfunktionsregister SPH (High Part of Stack Pointer) oder hat
jeweils ein 8-Bit-Stack-Pointer. Die Definition dieser Makros wird beeinflusst durch
-mmcu= und in den Fällen von -mmcu=avr2 und -mmcu=avr25 auch von -msp8.
"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Das Gerät verfügt über die Sonderfunktionsregister "RAMPD", "RAMPX", "RAMPY", "RAMPZ",
beziehungsweise.
"__KEINE_UNTERBRECHUNGEN__"
Dieses Makro spiegelt die -mno-unterbricht Befehlszeilenoption.
"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Einige AVR-Geräte (AT90S8515, ATmega103) dürfen keine 32-Bit-Befehle überspringen, da a
Hardware-Erratum. Skip-Anweisungen sind "SBRS", "SBRC", "SBIS", "SBIC" und "CPSE".
Das zweite Makro ist nur definiert, wenn auch "__AVR_HAVE_JMP_CALL__" gesetzt ist.
"__AVR_ISA_RMW__"
Das Gerät verfügt über Read-Modify-Write-Anweisungen (XCH, LAC, LAS und LAT).
"__AVR_SFR_OFFSET__=Versatz"
Befehle, die E/A-Sonderfunktionsregister direkt adressieren können wie "IN",
"OUT", "SBI" usw. können eine andere Adresse verwenden, als ob sie durch eine Anweisung an
Zugriff auf RAM wie "LD" oder "STS". Dieser Offset hängt von der Gerätearchitektur ab und hat
von der RAM-Adresse abgezogen werden, um die entsprechende I/O@tie{}Adresse zu erhalten.
"__WITH_AVRLIBC__"
Der Compiler ist so konfiguriert, dass er zusammen mit AVR-Libc verwendet werden kann. Siehe die --with-avrlibc
Option konfigurieren.
Blackfin Optionen
-mcpu=CPU[-vatervision]
Gibt den Namen des Ziel-Blackfin-Prozessors an. Zur Zeit, CPU kann einer von sein
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.
Das optionale vatervision spezifiziert die Silizium-Revision des Ziel-Blackfin
Prozessor. Alle für die angestrebte Siliziumrevision verfügbaren Problemumgehungen sind aktiviert.
If vatervision is keine, sind keine Problemumgehungen aktiviert. Wenn vatervision is jedem, alle
Problemumgehungen für den Zielprozessor sind aktiviert. Das Makro "__SILICON_REVISION__"
ist definiert als zwei hexadezimale Ziffern, die die Haupt- und Nebenzahlen im darstellen
Silikon-Revision. Wenn vatervision is keine, die "__SILICON_REVISION__" ist nicht definiert.
If vatervision is jedem, ist "__SILICON_REVISION__" als 0xffff definiert. Wenn das
optional vatervision nicht verwendet wird, geht GCC von der letzten bekannten Silizium-Revision der
gezielter Blackfin-Prozessor.
GCC definiert ein Präprozessor-Makro für die angegebenen CPU. Für die bfin-elf Werkzeugkette,
diese Option bewirkt, dass das von libgloss bereitgestellte Hardware-BSP eingebunden wird, wenn -msim is
nicht gegeben.
Ohne diese Möglichkeit bf532 wird standardmäßig als Prozessor verwendet.
Beachten Sie, dass die Unterstützung für bf561 ist unvollständig. Zum bf561, nur das Präprozessormakro ist
definiert.
-msim
Gibt an, dass das Programm auf dem Simulator ausgeführt wird. Dies führt dazu, dass der Simulator
Von libgloss bereitgestelltes BSP zum Einbinden. Diese Option hat nur Auswirkungen für bfin-elf
Werkzeugkette. Bestimmte andere Optionen, wie z -Mitte-geteilte-Bibliothek und -mfdpic, implizieren
-msim.
-momit-Blatt-Rahmen-Zeiger
Bewahren Sie den Rahmenzeiger nicht in einem Register für Blattfunktionen auf. Dies vermeidet die
Anweisungen zum Speichern, Einrichten und Wiederherstellen von Rahmenzeigern und erstellt ein zusätzliches Register
in Blattfunktionen verfügbar. Die Option -fomit-Frame-Zeiger entfernt den Rahmen
Zeiger für alle Funktionen, was das Debuggen erschweren könnte.
-mspecld-Anomalie
Wenn aktiviert, stellt der Compiler sicher, dass der generierte Code keine
spekulative Ladungen nach Sprungbefehlen. Wenn diese Option verwendet wird,
"__WORKAROUND_SPECULATIVE_LOADS" ist definiert.
-mno-specld-anomalie
Generieren Sie keinen zusätzlichen Code, um das Auftreten spekulativer Ladevorgänge zu verhindern.
-mcsync-Anomalie
Wenn aktiviert, stellt der Compiler sicher, dass der generierte Code kein CSYNC oder . enthält
SSYNC-Anweisungen zu früh nach bedingten Verzweigungen. Wenn diese Option verwendet wird,
"__WORKAROUND_SPECULATIVE_SYNCS" ist definiert.
-mno-csync-anomalie
Generieren Sie keinen zusätzlichen Code, um zu verhindern, dass auch CSYNC- oder SSYNC-Anweisungen auftreten
kurz nach einer bedingten Verzweigung.
-mlow-64k
Wenn aktiviert, kann der Compiler das Wissen nutzen, dass das gesamte
Programm passt in die niedrigen 64k des Speichers.
-mno-low-64k
Angenommen, das Programm ist beliebig groß. Dies ist die Standardeinstellung.
-mstack-check-l1
Führen Sie eine Stack-Überprüfung durch, indem Sie Informationen verwenden, die von uClinux in den L1-Scratchpad-Speicher gelegt wurden
Kernel.
-Mitte-geteilte-Bibliothek
Generieren Sie Code, der gemeinsam genutzte Bibliotheken über die Bibliotheks-ID-Methode unterstützt. Dies erlaubt
für die Ausführung an Ort und Stelle und gemeinsam genutzte Bibliotheken in einer Umgebung ohne virtuellen Speicher
Verwaltung. Diese Option impliziert -fPIC. Mit einer bfin-elf Ziel, diese Option impliziert
-msim.
-mno-id-shared-library
Generieren Sie Code, der nicht davon ausgeht, dass ID-basierte gemeinsam genutzte Bibliotheken verwendet werden. Das ist
der Standard.
-mleaf-id-shared-library
Generieren Sie Code, der gemeinsam genutzte Bibliotheken über die Bibliotheks-ID-Methode unterstützt, aber davon ausgeht, dass
dass diese Bibliothek oder ausführbare Datei nicht mit anderen gemeinsam genutzten ID-Bibliotheken verknüpft wird.
Dadurch kann der Compiler schnelleren Code für Sprünge und Aufrufe verwenden.
-mno-leaf-id-shared-library
Gehen Sie nicht davon aus, dass der Code, der kompiliert wird, nicht mit einer gemeinsam genutzten ID-Bibliothek verknüpft wird.
Für Jump- und Call-Insns wird langsamerer Code generiert.
-mshared-library-id=n
Gibt die Identifikationsnummer der ID-basierten gemeinsam genutzten Bibliothek an, die kompiliert wird.
Die Angabe eines Werts von 0 erzeugt kompakteren Code; Angabe anderer Werte Kräfte
die Zuordnung dieser Nummer zur aktuellen Bibliothek, aber nicht mehr Raum- oder Zeit-
effizienter als das Weglassen dieser Option.
-msep-Daten
Generieren Sie Code, der es ermöglicht, das Datensegment in einem anderen Speicherbereich zu platzieren
aus dem Textsegment. Dies ermöglicht die Ausführung an Ort und Stelle in einer Umgebung ohne
Verwaltung des virtuellen Speichers durch Eliminieren von Verschiebungen gegenüber dem Textabschnitt.
-mno-sep-daten
Generieren Sie Code, der davon ausgeht, dass das Datensegment dem Textsegment folgt. Das ist
der Standard.
-mlong-anrufe
-mno-lange-Anrufe
Weist den Compiler an, Funktionsaufrufe durchzuführen, indem er zuerst die Adresse des
-Funktion in ein Register und führt dann einen Unterprogrammaufruf für dieses Register aus. Dies
Schalter wird benötigt, wenn die Zielfunktion außerhalb des 24-Bit-Adressbereichs von liegt
die offsetbasierte Version des Unterprogrammaufrufbefehls.
Diese Funktion ist standardmäßig nicht aktiviert. Angabe -mno-lange-Anrufe stellt das wieder her
Standardverhalten. Beachten Sie, dass diese Schalter keinen Einfluss darauf haben, wie der Compiler generiert
Code zum Behandeln von Funktionsaufrufen über Funktionszeiger.
-mfast-fp
Verknüpfung mit der schnellen Gleitkommabibliothek. Diese Bibliothek lockert einige der IEEE
Regeln des Gleitkomma-Standards zum Prüfen von Eingaben gegen Not-a-Number (NAN), in der
Interesse der Leistung.
-Minline-plt
Aktivieren Sie das Inlining von PLT-Einträgen in Funktionsaufrufen zu Funktionen, die nicht bekannt sind
lokal binden. Es hat keine Wirkung ohne -mfdpic.
-mmulticore
Erstellen Sie eine eigenständige Anwendung für Multicore-Blackfin-Prozessoren. Diese Option verursacht
richtige Startdateien und Link-Skripte, die Multicore unterstützen, und definiert die
Makro "__BFIN_MULTICORE". Es kann nur mit verwendet werden -mcpu=bf561[-vatervision].
Diese Option kann verwendet werden mit -mcorea or -mcoreb, die die Ein-Anwendungs-
Pro-Core-Programmiermodell. Ohne -mcorea or -mcoreb, der
Es wird ein Single-Application/Dual-Core-Programmiermodell verwendet. Bei diesem Modell ist die Haupt-
Funktion von Core B sollte als "coreb_main" bezeichnet werden.
Wenn diese Option nicht verwendet wird, wird das Single-Core-Anwendungsprogrammiermodell verwendet.
-mcorea
Erstellen Sie eine eigenständige Anwendung für Core A von BF561 bei Verwendung des One-Application-per-
Kernprogrammierungsmodell. Zur Unterstützung von Core . werden die richtigen Startdateien und Linkskripte verwendet
A, und das Makro "__BFIN_COREA" ist definiert. Diese Option kann nur verwendet werden in
Verbindung mit -mmulticore.
-mcoreb
Erstellen Sie eine eigenständige Anwendung für Core B von BF561 bei Verwendung des One-Application-per-
Kernprogrammierungsmodell. Zur Unterstützung von Core . werden die richtigen Startdateien und Linkskripte verwendet
B, und das Makro "__BFIN_COREB" wird definiert. Wenn diese Option verwendet wird, wird "coreb_main"
sollte anstelle von "main" verwendet werden. Diese Option kann nur in Verbindung mit . verwendet werden
-mmulticore.
-msdram
Erstellen Sie eine eigenständige Anwendung für SDRAM. Es werden die richtigen Startdateien und Linkskripte verwendet
um die Anwendung in SDRAM zu legen, und das Makro "__BFIN_SDRAM" wird definiert. Die
Loader sollte SDRAM initialisieren, bevor die Anwendung geladen wird.
-micplb
Angenommen, ICPLBs sind zur Laufzeit aktiviert. Dies wirkt sich auf bestimmte Anomalie aus
Problemumgehungen. Bei Linux-Zielen wird standardmäßig davon ausgegangen, dass ICPLBs aktiviert sind; zum
Standalone-Anwendungen ist die Standardeinstellung deaktiviert.
C6X Optionen
-marsch=Name
Dies gibt den Namen der Zielarchitektur an. GCC verwendet diesen Namen, um zu bestimmen
welche Art von Anweisungen es beim Generieren von Assemblercode ausgeben kann. Zulässig
Namen sind: c62x, c64x, c64x+, c67x, c67x+, c674x.
-mbig-endian
Generieren Sie Code für ein Big-Endian-Ziel.
-mlittle-endian
Generieren Sie Code für ein Little-Endian-Ziel. Dies ist die Standardeinstellung.
-msim
Wählen Sie Startdateien und Linker-Skripte, die für den Simulator geeignet sind.
-msdata=Standard
Fügen Sie kleine globale und statische Daten in den Abschnitt ".neardata" ein, auf den durch verwiesen wird
"B14" registrieren. Fügen Sie kleine nicht initialisierte globale und statische Daten in den Abschnitt ".bss" ein.
die sich neben dem Abschnitt ".neardata" befindet. Fügen Sie kleine schreibgeschützte Daten in die
Abschnitt ".rodata". Die entsprechenden Abschnitte, die für große Datenmengen verwendet werden, sind
".fardata", ".far" und ".const".
-msdata=alle
Fügen Sie alle Daten, nicht nur kleine Objekte, in die für kleine Daten reservierten Abschnitte ein, und
verwenden Sie eine Adressierung relativ zum Register "B14", um darauf zuzugreifen.
-msdata=keine
Verwenden Sie keine Abschnitte, die für kleine Daten reserviert sind, und verwenden Sie absolute Adressen, um
auf alle Daten zugreifen. Setzen Sie alle initialisierten globalen und statischen Daten in die ".fardata"
Abschnitt und alle nicht initialisierten Daten im Abschnitt ".far". Setzen Sie alle konstanten Daten in
den Abschnitt ".const".
CRIS Optionen
Diese Optionen sind speziell für die CRIS-Ports definiert.
-marsch=Architektur-Typ
-mcpu=Architektur-Typ
Generieren Sie Code für die angegebene Architektur. Die Auswahl für Architektur-Typ sind
v3, v8 und v10 für ETRAX 4, ETRAX 100 bzw. ETRAX 100 LX. Standard ist v0
außer cris-axis-linux-gnu, wo der Standardwert ist v10.
-mtune=Architektur-Typ
Stellen Sie ein Architektur-Typ alles Zutreffende über den generierten Code, außer
der ABI und die verfügbaren Anweisungen. Die Auswahl für Architektur-Typ sind
das gleiche wie für -marsch=Architektur-Typ.
-mmax-Stapelrahmen=n
Warnen, wenn der Stack-Frame einer Funktion überschreitet n Bytes.
-metrax4
-metrax100
Die Optionen -metrax4 und -metrax100 sind Synonyme für -marsch=v3 und -marsch=v8
beziehungsweise.
-mmul-Bug-Workaround
-mno-mul-bug-workaround
Beheben Sie einen Fehler in den Anweisungen "muls" und "mulu" für CPU-Modelle, bei denen es
gilt. Diese Option ist standardmäßig aktiv.
-mpdebug
Aktivieren Sie CRIS-spezifische ausführliche Debug-bezogene Informationen im Assemblycode. Dies
Option hat auch den Effekt, dass die #NO_APP formatierter Code-Indikator zum
Assembler am Anfang der Assembly-Datei.
-mcc-init
Verwenden Sie keine Bedingungscode-Ergebnisse aus vorherigen Anweisungen; immer vergleichen und ausgeben
Testanweisungen vor der Verwendung von Bedingungscodes.
-mno-nebenwirkungen
Geben Sie keine Anweisungen mit Nebenwirkungen in anderen Adressierungsmodi als Post-
Zuwachs.
-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-ausrichten
-mno-const-align
Diese Optionen (Nein- Optionen) für den Stapelrahmen anordnen (Vorkehrungen beseitigen),
individuelle Daten und Konstanten, die auf die maximale Einzeldatenzugriffsgröße ausgerichtet werden müssen
für das gewählte CPU-Modell. Standardmäßig wird ein 32-Bit-Alignment eingerichtet. ABI
Details wie das Strukturlayout werden von diesen Optionen nicht beeinflusst.
-m32-bit
-m16-bit
-m8-bit
Ähnlich wie bei den oben genannten stack-data- und const-align-Optionen sorgen diese Optionen für
Stapelrahmen, beschreibbare Daten und Konstanten alle 32-Bit-, 16-Bit- oder 8-Bit-ausgerichtet sein.
Die Standardeinstellung ist die 32-Bit-Ausrichtung.
-mno-prolog-epilog
-mprolog-epilog
Mit -mno-prolog-epilog, der normale Funktionsprolog und Epilog, die eingerichtet wurden
die Stack-Frames werden weggelassen und es werden keine Return-Anweisungen oder Return-Sequenzen verwendet
im Code generiert. Verwenden Sie diese Option nur in Verbindung mit einer Sichtprüfung des
kompilierter Code: Es werden keine Warnungen oder Fehler generiert, wenn aufrufgespeicherte Register sein müssen
gespeichert oder Speicher für lokale Variablen muss zugewiesen werden.
-mno-gotplt
-mgotplt
Mit -fpic und -fPIC, keine Befehlssequenzen generieren, die laden
Adressen für Funktionen aus dem PLT-Teil des GOT statt (traditionell auf anderen
Architekturen) Aufrufe an die PLT. Die Standardeinstellung ist -mgotplt.
-melfe
Legacy-No-Op-Option nur mit cris-axis-elf und cris-axis-linux-gnu . erkannt
Ziele.
-mlinux
Legacy-No-Op-Option wird nur mit dem Ziel cris-axis-linux-gnu erkannt.
-sim
Diese für die cris-axis-elf anerkannte Option sorgt für eine Verknüpfung mit Input-Output
Funktionen aus einer Simulatorbibliothek. Code, initialisierte Daten und nullinitialisierte Daten
werden nacheinander vergeben.
-sim2
Like -sim, aber übergeben Sie Linker-Optionen, um initialisierte Daten bei 0x40000000 und null zu finden.
initialisierte Daten bei 0x80000000.
CR16 Optionen
Diese Optionen sind speziell für die CR16-Ports definiert.
-mmac
Aktivieren Sie die Verwendung von Multiply-Accumulate-Anweisungen. Standardmäßig deaktiviert.
-mcr16cplus
-MCR16C
Generieren Sie Code für die CR16C- oder CR16C+-Architektur. CR16C+ Architektur ist Standard.
-msim
Verlinkt die Bibliothek libsim.a, die mit dem Simulator kompatibel ist. Gilt für ELF
nur Compiler.
-minze32
Wählen Sie den Integer-Typ als 32-Bit-Breite.
-mbit-ops
Erzeugt "sbit"/"cbit"-Anweisungen für Bitmanipulationen.
-mdata-model=Modell
Wählen Sie ein Datenmodell aus. Die Auswahl für Modell sind in der Nähe von, weit or mittlere. mittlere ist Standard.
Aber, weit ist nicht gültig mit -MCR16C, da die CR16C-Architektur die
fernes Datenmodell.
Darwin Optionen
Diese Optionen sind für alle Architekturen definiert, auf denen das Darwin-Betriebssystem ausgeführt wird.
FSF GCC auf Darwin erstellt keine "fetten" Objektdateien; es erstellt eine Objektdatei für die
einzelne Architektur, für die GCC entwickelt wurde. Apples GCC auf Darwin erzeugt "Fett"
Dateien, wenn mehrere -Bogen Optionen werden verwendet; Dies geschieht durch Ausführen des Compilers oder Linkers
mehrfach und zusammenfügen der Ergebnisse mit Lipo.
Der Untertyp der erstellten Datei (wie ppc7400 or ppc970 or i686) wird bestimmt durch die
Flags, die die ISA angeben, auf die GCC abzielt, z. B. -mcpu or -Märzdem „Vermischten Geschmack“. Seine
-force_cpusubtype_ALL Option kann verwendet werden, um dies zu überschreiben.
Die Darwin-Tools unterscheiden sich in ihrem Verhalten, wenn sie mit einem ISA-Mismatch konfrontiert werden. Die
Monteur, as, erlaubt nur die Verwendung von Anweisungen, die für den Subtyp des
Datei, die es generiert, sodass Sie keine 64-Bit-Anweisungen in a einfügen können ppc750 Objektdatei. Die
Linker für gemeinsam genutzte Bibliotheken, /usr/bin/libtool, schlägt fehl und gibt einen Fehler aus, wenn Sie dazu aufgefordert werden
Erstellen Sie eine gemeinsam genutzte Bibliothek mit einem weniger restriktiven Untertyp als ihre Eingabedateien (für
zum Beispiel versuchen, a ppc970 Objektdatei in a ppc7400 Bücherei). Der Linker für
ausführbare Dateien, ld, gibt der ausführbaren Datei leise den restriktivsten Subtyp von allen seinen
Eingabedateien.
-Fdir
Fügen Sie das Framework-Verzeichnis hinzu dir an den Anfang der Liste der zu durchsuchenden Verzeichnisse
für Header-Dateien. Diese Verzeichnisse sind mit denen verschachtelt, die durch . angegeben sind -I
Optionen und werden von links nach rechts gescannt.
Ein Framework-Verzeichnis ist ein Verzeichnis mit darin enthaltenen Frameworks. Ein Rahmen ist ein
Verzeichnis mit a Headers und / oder PrivateHeader direkt darin enthaltenes Verzeichnis, das
endet in .Rahmen. Der Name eines Frameworks ist der Name dieses Verzeichnisses ausgenommen
.Rahmen. Mit dem Framework verbundene Header befinden sich in einem dieser beiden
Verzeichnisse, mit Headers zuerst gesucht wird. Ein Subframework ist ein Framework
Verzeichnis, das sich in einem Framework befindet Frameworks Verzeichnis. Inklusive Unterbau
Header können nur in einem Header eines Frameworks erscheinen, das das Subframework enthält, oder
in einem Geschwister-Subframework-Header. Zwei Subframeworks sind Geschwister, wenn sie im
gleichen Rahmen. Ein Subframework sollte nicht denselben Namen wie ein Framework haben; ein
bei Verletzung wird eine Warnung ausgegeben. Derzeit kann ein Unterrahmen nicht haben
Unterrahmen; in Zukunft könnte der Mechanismus erweitert werden, um dies zu unterstützen. Die
Standard-Frameworks finden Sie in / System / Library / Frameworks und
/ Library / Frameworks. Ein Beispiel-Include sieht aus wie "#include ",
woher Unser Ansatz bezeichnet den Namen des Frameworks und header.h ist in der gefunden
PrivateHeader or Headers Verzeichnis.
-iFrameworkdir
Like -F außer dass das Verzeichnis als Systemverzeichnis behandelt wird. Der Hauptunterschied
dazwischen -iFramework und -F ist das mit -iFramework der Compiler warnt nicht
über Konstrukte, die in Header-Dateien enthalten sind, die über gefunden wurden dir. Diese Option ist gültig
nur für die C-Sprachfamilie.
-geguckt
Geben Sie Debugging-Informationen für verwendete Symbole aus. Für das stabs-debugging-Format,
das ermöglicht -feiminate-unused-debug-symbols. Dies ist standardmäßig EIN.
-gvoll
Geben Sie Debugging-Informationen für alle Symbole und Typen aus.
-mmacosx-version-min=Version
Die früheste Version von MacOS X, auf der diese ausführbare Datei ausgeführt wird, ist Version. Typisch
Werte von Version umfassen 10.1, 10.2 und 10.3.9.
Wenn der Compiler so erstellt wurde, dass er standardmäßig die Header des Systems verwendet, dann ist der Standard für
diese Option ist die Systemversion, auf der der Compiler läuft, andernfalls die
Standardmäßig werden Entscheidungen getroffen, die mit so vielen Systemen und Codebasen wie möglich kompatibel sind
möglich.
-mkernel
Aktivieren Sie den Kernel-Entwicklungsmodus. Die -mkernel Optionssätze -statisch, -fno-gemeinsam,
-fno-use-cxa-atexit, -fno-Ausnahmen, -fno-non-call-ausnahmen, -fapple-kext,
-fno-schwach und -fno-rtti wo anwendbar. Dieser Modus setzt auch -mno-altivec,
-msoft-float, -fno-eingebaut und -mlang-Zweig für PowerPC-Ziele.
-mone-byte-bool
Überschreiben Sie die Standardwerte für "bool", sodass "sizeof(bool)==1". Standardmäßig "sizeof(bool)"
ist 4 beim Kompilieren für Darwin/PowerPC und 1 beim Kompilieren für Darwin/x86, also das
Option hat keine Auswirkung auf x86.
Warnung: Die -mone-byte-bool Schalter bewirkt, dass GCC Code generiert, der nicht binär ist
kompatibel mit Code, der ohne diesen Schalter generiert wurde. Die Verwendung dieses Schalters erfordert möglicherweise
Neukompilieren aller anderen Module in einem Programm, einschließlich Systembibliotheken. Benutze das
wechseln, um einem nicht standardmäßigen Datenmodell zu entsprechen.
-mfix-und-weiter
-fixieren-und-weiter
-findirect-Daten
Generieren Sie Code, der für eine schnelle Turnaround-Entwicklung geeignet ist, z. B. um GDB zu ermöglichen,
dynamisch laden .o Dateien in bereits laufende Programme. -findirect-Daten und
-fixieren-und-weiter werden aus Gründen der Abwärtskompatibilität bereitgestellt.
-all_load
Lädt alle Mitglieder statischer Archivbibliotheken. Siehe Mann ld(1) für weitere Informationen.
-arch_errors_fatal
Verursachen Sie, dass die Fehler, die mit Dateien mit der falschen Architektur zu tun haben, fatal sind.
-bind_at_load
Bewirkt, dass die Ausgabedatei so markiert wird, dass der dynamische Linker alle bindet
undefinierte Referenzen, wenn die Datei geladen oder gestartet wird.
-bündeln
Erstellen Sie eine Datei im Mach-o-Bundle-Format. Siehe Mann ld(1) für weitere Informationen.
-bundle_loader ausführbar
Diese Option gibt die ausführbar das wird die Build-Ausgabedatei laden, die ist
verknüpft. Siehe Mann ld(1) für weitere Informationen.
-dynamische lib
Wenn diese Option übergeben wird, erstellt GCC eine dynamische Bibliothek anstelle einer ausführbaren Datei, wenn
Verknüpfung mit dem Darwin libtool Befehl.
-force_cpusubtype_ALL
Dies führt dazu, dass die Ausgabedatei von GCC die ALLER Untertyp, statt eines, der von gesteuert wird
-mcpu or -März .
-allowable_client Kundenname
-Kundenname
-kompatibilitätsversion
-aktuelle Version
-dead_strip
-Abhängigkeitsdatei
-dylib_file
-dylinker_install_name
-dynamisch
-exportierte_Symbolliste
-Dateiliste
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-image_base
-drin
-Installationsname
-keep_private_externs
-multi_modul
-multiply_definiert
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-noprebind
-naseglinkedit
-pagezero_size
-vorbinden
-prebind_all_twolevel_modules
-privates_bundle
-read_only_relocs
-sekt ausrichten
-sektenobjektsymbole
-warum?
-seg1adr
-sekt erstellen
-sektenobjektsymbole
-Sektoren
-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
-einzelnes_modul
-statisch
-Unterbibliothek
-sub_regenschirm
-Namensraum auf zwei Ebenen
-Regenschirm
-nicht definiert
-unexported_symbols_list
-weak_reference_mismatches
-Whatsloaded
Diese Optionen werden an den Darwin-Linker übergeben. Die Manpage von Darwin Linker beschreibt
sie ausführlich.
Dezember Aftershave Optionen
Diese -m Optionen sind für die DEC Alpha-Implementierungen definiert:
-Mno-soft-Float
-msoft-float
Verwenden (nicht verwenden) die Hardware-Gleitkommaanweisungen für Gleitkomma
Operationen. Wann -msoft-float angegeben, Funktionen in libgcc.a werden verwendet, um zu performen
Gleitkomma-Operationen. Es sei denn, sie werden durch Routinen ersetzt, die die
Gleitkommaoperationen oder so kompiliert, dass solche Emulationen aufgerufen werden
Routinen geben diese Routinen Gleitkommaoperationen aus. Wenn Sie für kompilieren
ein Alpha ohne Gleitkommaoperationen, müssen Sie sicherstellen, dass die Bibliothek erstellt wurde
um sie nicht anzurufen.
Beachten Sie, dass Alpha-Implementierungen ohne Gleitkomma-Operationen erforderlich sind
Gleitkommaregister.
-mfp-reg
-mno-fp-regs
Generieren Sie Code, der den Gleitkommaregistersatz verwendet (nicht verwendet). -mno-fp-regs
impliziert -msoft-float. Wenn der Gleitkomma-Registersatz nicht verwendet wird, wird Gleitkomma
Operanden werden in Integer-Registern übergeben, als wären sie Integer und Gleitkommazahlen
Ergebnisse werden in $0 anstelle von $f0 übergeben. Dies ist eine nicht standardmäßige Anrufsequenz, also
jede Funktion mit einem Gleitkomma-Argument oder einem Rückgabewert, die durch kompilierten Code aufgerufen wird
mit -mno-fp-regs muss auch mit dieser Option kompiliert werden.
Eine typische Verwendung dieser Option ist das Erstellen eines Kernels, der nicht verwendet und daher benötigt wird
nicht speichern und wiederherstellen, alle Gleitkommaregister.
-mieee
Die Alpha-Architektur implementiert Gleitkomma-Hardware, die für maximales . optimiert ist
Leistung. Es ist größtenteils konform mit dem IEEE-Gleitkomma-Standard. Jedoch,
für die vollständige Einhaltung ist Softwareunterstützung erforderlich. Diese Option generiert Code
vollständig IEEE-konformer Code ausgeschlossen , dass die ungenau-flagge wird nicht gepflegt (siehe unten).
Wenn diese Option eingeschaltet ist, wird das Präprozessor-Makro "_IEEE_FP" während
Zusammenstellung. Der resultierende Code ist weniger effizient, kann aber korrekt unterstützen
denormalisierte Zahlen und außergewöhnliche IEEE-Werte wie not-a-number und plus/minus
Unendlichkeit. Andere Alpha-Compiler nennen diese Option -ieee_with_no_inexact.
-mieee-mit-ungenau
Das ist wie -mieee außer der generierte Code unterhält auch die IEEE ungenau-flagge.
Das Aktivieren dieser Option bewirkt, dass der generierte Code vollständig konformes IEEE . implementiert
Mathematik. Neben "_IEEE_FP" ist "_IEEE_FP_EXACT" als Präprozessor-Makro definiert.
Bei einigen Alpha-Implementierungen kann der resultierende Code deutlich langsamer ausgeführt werden als
der standardmäßig generierte Code. Da es sehr wenig Code gibt, der von der
ungenau-flagge, sollten Sie diese Option normalerweise nicht angeben. Andere Alpha-Compiler rufen an
diese Option -ieee_with_inexact.
-mfp-trap-mode=Trap-Modus
Diese Option steuert, welche gleitkommabezogenen Traps aktiviert sind. Andere Alpha
Compiler rufen diese Option auf -fptm Trap-Modus. Der Trap-Modus kann auf einen von vier eingestellt werden
Werte:
n Dies ist die Standardeinstellung (normal). Die einzigen aktivierten Fallen sind die
solche, die nicht in der Software deaktiviert werden können (zB Division durch Null-Trap).
u Zusätzlich zu den von . aktivierten Fallen n, werden auch Unterlauffallen aktiviert.
su Like u, aber die Anweisungen sind für die Softwarevervollständigung als sicher gekennzeichnet (siehe
Alpha-Architekturhandbuch für Details).
auf Like su, aber auch ungenaue Traps sind aktiviert.
-mfp-rundungsmodus=Rundungsmodus
Wählt den IEEE-Rundungsmodus. Andere Alpha-Compiler nennen diese Option -fprm
Rundungsmodusdem „Vermischten Geschmack“. Seine Rundungsmodus kann sein:
n Normaler IEEE-Rundungsmodus. Gleitkommazahlen werden zum nächsten gerundet
Maschinennummer oder bei Gleichstand gegen die gerade Maschinennummer.
m Auf minus Unendlich runden.
c Gehackter Rundungsmodus. Gleitkommazahlen werden gegen Null gerundet.
d Dynamischer Rundungsmodus. Ein Feld im Gleitkomma-Steuerregister (fpcr, Siehe
Referenzhandbuch zur Alpha-Architektur) steuert den aktuellen Rundungsmodus. Das C
Die Bibliothek initialisiert dieses Register zum Runden in Richtung plus Unendlich. Daher,
es sei denn, Ihr Programm ändert die fpcr, d entspricht rund nach plus
Unendlichkeit.
-mtrap-precision=Fallenpräzision
In der Alpha-Architektur sind Gleitkomma-Traps ungenau. Das heißt ohne
Softwareunterstützung Es ist unmöglich, sich von einer schwimmenden Falle und einem Programm zu erholen
Die Ausführung muss normalerweise beendet werden. GCC kann Code generieren, der hilfreich sein kann
Trap-Handler des Betriebssystems bei der Bestimmung des genauen Ortes, der a . verursacht hat
Gleitkomma-Trap. Je nach Anforderung einer Anwendung, unterschiedliche
Genauigkeitsstufen wählbar:
p Programmpräzision. Diese Option ist die Standardeinstellung und bedeutet, dass ein Trap-Handler nur
Identifizieren Sie, welches Programm eine Gleitkomma-Ausnahme verursacht hat.
f Funktionspräzision. Der Trap-Handler kann die Funktion bestimmen, die a . verursacht hat
Gleitkomma-Ausnahme.
i Präzision der Anweisung. Der Trap-Handler kann die genaue Anweisung bestimmen, die
eine Gleitkommaausnahme verursacht.
Andere Alpha-Compiler bieten die entsprechenden Optionen namens -scope_safe und
-wiederaufnahme_safe.
-mieee-konform
Diese Option markiert den generierten Code als IEEE-konform. Sie dürfen diese Option nicht verwenden
es sei denn, Sie geben auch an -mtrap-precision=i und entweder -mfp-trap-mode=su or
-mfp-trap-mode=sui. Seine einzige Wirkung besteht darin, die Linie zu emittieren .flagge 48 in der Funktion
Prolog der generierten Baugruppendatei.
-mbuild-Konstanten
Normalerweise untersucht GCC eine 32- oder 64-Bit-Ganzzahlkonstante, um zu sehen, ob sie sie konstruieren kann
aus kleineren Konstanten in zwei oder drei Anweisungen. Wenn dies nicht möglich ist, gibt es die
konstant als Literal und generiert Code, um ihn zur Laufzeit aus dem Datensegment zu laden.
Verwenden Sie diese Option, um die Erstellung von GCC zu verlangen alle ganzzahlige Konstanten mit Code, auch wenn
es braucht mehr Anweisungen (das Maximum sind sechs).
Normalerweise verwenden Sie diese Option, um ein dynamisches Ladeprogramm für gemeinsam genutzte Bibliotheken zu erstellen. Selbst a
gemeinsam genutzte Bibliothek, muss sie sich im Speicher verlagern, bevor sie die Variablen finden kann und
Konstanten in einem eigenen Datensegment.
-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-mmax
-mno-max
Geben Sie an, ob GCC Code generieren soll, um die optionalen BWX, CIX, FIX und MAX zu verwenden
Anweisungssätze. Standardmäßig werden die von der CPU unterstützten Befehlssätze verwendet
Typangabe über -mcpu= Option oder die der CPU, auf der GCC gebaut wurde, wenn keine vorhanden ist
spezifiziert.
-mfloat-vax
-mfloat-ieee
Generieren Sie Code, der stattdessen VAX F- und G-Gleitkommaarithmetik verwendet (nicht verwendet).
von IEEE einfacher und doppelter Genauigkeit.
-mexplicit-relocs
-mno-explicit-relocs
Ältere Alpha-Assembler boten keine Möglichkeit, Symbolverschiebungen zu generieren, außer über
Assembler-Makros. Die Verwendung dieser Makros ermöglicht keine optimale Befehlsplanung.
GNU binutils ab Version 2.12 unterstützt eine neue Syntax, die es dem Compiler ermöglicht,
markieren Sie explizit, welche Verlagerungen für welche Weisungen gelten sollen. Diese Option ist
vor allem zum Debuggen nützlich, da GCC die Fähigkeiten des Assemblers erkennt, wenn es
erstellt und setzt den Standard entsprechend.
-mkleine-Daten
-mlarge-data
Wann -mexplicit-relocs aktiv ist, erfolgt der Zugriff auf statische Daten über gp-relativ
Umzüge. Wann -mkleine-Daten verwendet wird, werden Objekte mit einer Länge von 8 Byte oder kleiner in
a klein die Datenerfassung Gesamtfläche unserer Sitzes (die Abschnitte ".sdata" und ".sbss") und werden über 16-Bit
Umzüge aus dem $gp-Register. Dies begrenzt die Größe des kleinen Datenbereichs auf
64 KB, ermöglicht jedoch den direkten Zugriff auf die Variablen über eine einzige Anweisung.
Die Standardeinstellung ist -mlarge-data. Mit dieser Option ist der Datenbereich auf knapp darunter beschränkt
2GB. Programme, die mehr als 2 GB Daten benötigen, müssen "malloc" oder "mmap" verwenden, um
Ordnen Sie die Daten im Heap statt im Datensegment des Programms zu.
Beim Generieren von Code für gemeinsam genutzte Bibliotheken -fpic impliziert -mkleine-Daten und -fPIC
impliziert -mlarge-data.
-mkleiner-text
-mlarge-text
Wann -mkleiner-text verwendet wird, geht der Compiler davon aus, dass der Code des gesamten Programms
(oder gemeinsam genutzte Bibliothek) passt in 4 MB und ist somit mit einem Verzweigungsbefehl erreichbar.
Wann -mkleine-Daten verwendet wird, kann der Compiler davon ausgehen, dass alle lokalen Symbole die
gleichen $gp-Wert und reduzieren somit die Anzahl der für eine Funktion erforderlichen Anweisungen
Rufen Sie von 4 bis 1 an.
Die Standardeinstellung ist -mlarge-text.
-mcpu=CPU_Typ
Legen Sie den Befehlssatz und die Befehlsplanungsparameter für den Maschinentyp fest
CPU_Typ. Sie können entweder die EV Style-Name oder die entsprechende Chipnummer.
GCC unterstützt Scheduling-Parameter für die Prozessoren der EV4-, EV5- und EV6-Familie und
wählt die Standardwerte für den Befehlssatz von dem von Ihnen angegebenen Prozessor aus. Wenn
Wenn Sie keinen Prozessortyp angeben, verwendet GCC standardmäßig den Prozessor, auf dem die
Compiler gebaut wurde.
Unterstützte Werte für CPU_Typ sind
ev4
ev45
21064
Wird als EV4 geplant und hat keine Befehlssatzerweiterungen.
ev5
21164
Wird als EV5 geplant und hat keine Befehlssatzerweiterungen.
ev56
21164a
Wird als EV5 geplant und unterstützt die BWX-Erweiterung.
pca56
21164pc
21164PC
Wird als EV5 geplant und unterstützt die BWX- und MAX-Erweiterungen.
ev6
21264
Wird als EV6 geplant und unterstützt die Erweiterungen BWX, FIX und MAX.
ev67
21264a
Wird als EV6 geplant und unterstützt die Erweiterungen BWX, CIX, FIX und MAX.
Native Toolchains unterstützen auch den Wert nativen, die die beste Architektur auswählt
Option für den Host-Prozessor. -mcpu=nativ hat keine Auswirkung, wenn GCC nicht erkennt
der Prozessor.
-mtune=CPU_Typ
Legen Sie nur die Befehlsplanungsparameter für den Maschinentyp fest CPU_Typdem „Vermischten Geschmack“. Seine
Befehlssatz wird nicht geändert.
Native Toolchains unterstützen auch den Wert nativen, die die beste Architektur auswählt
Option für den Host-Prozessor. -mtune=einheimisch hat keine Auswirkung, wenn GCC nicht erkennt
der Prozessor.
-memory-latency=Zeit
Legt die Latenz fest, die der Scheduler für typische Speicherreferenzen annehmen sollte, wie von
die Anwendung. Diese Zahl hängt stark von den verwendeten Speicherzugriffsmustern ab
von der Anwendung und der Größe des externen Caches auf dem Computer.
Gültige Optionen für Zeit sind
Anzahl
Eine Dezimalzahl, die Taktzyklen darstellt.
L1
L2
L3
Haupt-
Der Compiler enthält Schätzungen der Anzahl der Taktzyklen für "typische" EV4 &
EV5-Hardware für die Level 1, 2 & 3 Caches (auch Dcache, Scache und . genannt)
Bcache) sowie in den Hauptspeicher. Beachten Sie, dass L3 nur für EV5 gültig ist.
FR30 Optionen
Diese Optionen sind speziell für den FR30-Port definiert.
-mkleines-Modell
Verwenden Sie das Modell des kleinen Adressraums. Dies kann kleineren Code erzeugen, aber es geht davon aus, dass
dass alle symbolischen Werte und Adressen in einen 20-Bit-Bereich passen.
-mno-lsim
Gehen Sie davon aus, dass Laufzeitunterstützung bereitgestellt wurde und es daher nicht erforderlich ist, die
Simulatorbibliothek (libsim.a) in der Linker-Befehlszeile.
FRV Optionen
-mgpr-32
Verwenden Sie nur die ersten 32 Universalregister.
-mgpr-64
Verwenden Sie alle 64 Universalregister.
-mfpr-32
Verwenden Sie nur die ersten 32 Gleitkommaregister.
-mfpr-64
Verwenden Sie alle 64 Gleitkommaregister.
-mhard-float
Verwenden Sie Hardwareanweisungen für Gleitkommaoperationen.
-msoft-float
Verwenden Sie Bibliotheksroutinen für Gleitkommaoperationen.
-malloc-cc
Bedingungscoderegister dynamisch zuordnen.
-mfixed-cc
Versuchen Sie nicht, Bedingungscoderegister dynamisch zuzuweisen, verwenden Sie nur "icc0" und
"fcc0".
-mdword
Ändern Sie ABI, um Doppelwort-Insns zu verwenden.
-mno-dword
Verwenden Sie keine Doppelwortanweisungen.
-mdoppelt
Verwenden Sie Gleitkomma-Doppelanweisungen.
-mno-doppelt
Verwenden Sie keine Gleitkomma-Doppelanweisungen.
-Medien
Verwenden Sie Medienanweisungen.
-mno-media
Verwenden Sie keine Medienanweisungen.
-mmulad
Verwenden Sie Anweisungen zum Multiplizieren und Addieren/Subtrahieren.
-mno-muladd
Verwenden Sie keine Multiplikations- und Addier-/Subtraktionsanweisungen.
-mfdpic
Wählen Sie die ABI des EDÖB aus, die Funktionsdeskriptoren verwendet, um Zeiger auf darzustellen
Funktionen. Ohne PIC/PIE-bezogene Optionen bedeutet dies -fpie. Mit -fpic or
-fpie, es geht davon aus, dass GOT-Einträge und kleine Daten innerhalb eines 12-Bit-Bereichs von GOT liegen
Basisadresse; mit -fPIC or -fpie, GOT-Offsets werden mit 32 Bit berechnet. Mit einem
bfin-elf Ziel, diese Option impliziert -msim.
-Minline-plt
Aktivieren Sie das Inlining von PLT-Einträgen in Funktionsaufrufen zu Funktionen, die nicht bekannt sind
lokal binden. Es hat keine Wirkung ohne -mfdpic. Es ist standardmäßig aktiviert, wenn
Optimierung auf Geschwindigkeit und Kompilierung für gemeinsam genutzte Bibliotheken (d. h., -fPIC or -fpic), oder
wenn eine Optimierungsoption wie -O3 oder höher ist in der Befehlszeile vorhanden.
-mTLS
Gehen Sie beim Generieren von Thread-lokalem Code von einem großen TLS-Segment aus.
-mtl
Gehen Sie beim Generieren von Thread-lokalem Code nicht von einem großen TLS-Segment aus.
-mgprel-ro
Nutzung von „GPREL“-Umzügen im ABI des EDÖB für bekanntermaßen in
schreibgeschützte Abschnitte. Es ist standardmäßig aktiviert, außer für -fpic or -fpie: obwohl
es kann helfen, die globale Offset-Tabelle zu verkleinern, es tauscht 1 Anweisung gegen 4. Mit
-fPIC or -fpie, es tauscht 3 Anweisungen gegen 4, von denen eine von mehreren geteilt werden kann
Symbole, und es vermeidet die Notwendigkeit eines GOT-Eintrags für das referenzierte Symbol, also ist es
eher ein Gewinn. Wenn es das nicht ist, -mno-gprel-ro kann verwendet werden, um es zu deaktivieren.
-multilib-bibliothek-pic
Link mit den (Bibliothek, nicht FD) Bildbibliotheken. Es ist impliziert von -mlibrary-pic, auch
Wie bei -fPIC und -fpic ohne -mfdpic. Sie sollten es nie explizit verwenden müssen.
-mlinked-fp
Befolgen Sie die EABI-Anforderung, immer einen Frame-Pointer zu erstellen, wenn ein Stack-Frame
vergeben wird. Diese Option ist standardmäßig aktiviert und kann mit deaktiviert werden
-mno-linked-fp.
-mlong-anrufe
Verwenden Sie die indirekte Adressierung, um Funktionen außerhalb der aktuellen Übersetzungseinheit aufzurufen. Dies
ermöglicht es, die Funktionen an einer beliebigen Stelle innerhalb des 32-Bit-Adressraums zu platzieren.
-bösartige-Etiketten
Versuchen Sie, Labels an einer 8-Byte-Grenze auszurichten, indem Sie NOPs in das vorherige Paket einfügen.
Diese Option hat nur eine Auswirkung, wenn das VLIW-Packen aktiviert ist. Es entsteht kein neues
Pakete; es fügt lediglich NOPs zu bestehenden hinzu.
-mlibrary-pic
Positionsunabhängigen EABI-Code generieren.
-Macc-4
Verwenden Sie nur die ersten vier Medienspeicherregister.
-Macc-8
Verwenden Sie alle acht Medienakkumulatorregister.
-mpack
Packen Sie die VLIW-Anweisungen ein.
-mno-pack
VLIW-Anweisungen nicht verpacken.
-mno-flaggen
Markieren Sie keine ABI-Schalter in e_flags.
-mcond-move
Aktivieren Sie die Verwendung von Anweisungen zum bedingten Verschieben (Standard).
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mno-cond-move
Deaktivieren Sie die Verwendung von Anweisungen zum bedingten Verschieben.
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mscc
Aktivieren Sie die Verwendung von Bedingungssatzanweisungen (Standard).
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mno-scc
Deaktivieren Sie die Verwendung von bedingten Set-Anweisungen.
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mcond-exec
Aktivieren Sie die Verwendung der bedingten Ausführung (Standard).
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mno-cond-exec
Deaktivieren Sie die Verwendung der bedingten Ausführung.
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mvliw-Zweig
Führen Sie einen Durchgang aus, um Verzweigungen in VLIW-Anweisungen zu packen (Standard).
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mno-vliw-Zweig
Führen Sie keinen Durchgang aus, um Zweige in VLIW-Anweisungen zu packen.
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mmulti-cond-exec
Optimierung von "&&" und "||" aktivieren bei bedingter Ausführung (Standard).
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mno-multi-cond-exec
Deaktivieren Sie die Optimierung von "&&" und "||" in bedingter Ausführung.
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mnested-cond-exec
Verschachtelte bedingte Ausführungsoptimierungen aktivieren (Standard).
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-mno-nested-cond-exec
Deaktivieren Sie geschachtelte bedingte Ausführungsoptimierungen.
Dieser Schalter dient hauptsächlich zum Debuggen des Compilers und wird wahrscheinlich in a . entfernt
zukünftige Version.
-moptimize-membar
Dieser Schalter entfernt redundante "Membar"-Anweisungen aus dem vom Compiler generierten Code.
Es ist standardmäßig aktiviert.
-mno-optimize-membar
Dieser Schalter deaktiviert das automatische Entfernen redundanter "Membar"-Anweisungen aus dem
generierten Code.
-mtomcat-stats
Veranlasse Gas, Katerstatistiken auszudrucken.
-mcpu=CPU
Wählen Sie den Prozessortyp aus, für den Code generiert werden soll. Mögliche Werte sind frv, fr550,
Kater, fr500, fr450, fr405, fr400, fr300 und einfach.
GNU / Linux Optionen
Diese -m Optionen sind für GNU/Linux-Ziele definiert:
-mlibc
Verwenden Sie die GNU-C-Bibliothek. Dies ist die Standardeinstellung außer auf *-*-linux-*uclibc*,
*-*-linux-*musl* und *-*-linux-*android* Ziele.
-muclibc
Verwenden Sie die uClibc C-Bibliothek. Dies ist die Standardeinstellung für *-*-linux-*uclibc* Ziele.
-musl
Verwenden Sie die Musl-C-Bibliothek. Dies ist die Standardeinstellung für *-*-linux-*musl* Ziele.
-mbionisch
Verwenden Sie die Bionic C-Bibliothek. Dies ist die Standardeinstellung für *-*-linux-*android* Ziele.
-Mandroid
Kompilieren Sie Code, der mit der Android-Plattform kompatibel ist. Dies ist die Standardeinstellung für
*-*-linux-*android* Ziele.
Beim Kompilieren aktiviert diese Option -mbionisch, -fPIC, -fno-Ausnahmen und -fno-rtti by
Ursprünglich. Beim Verknüpfen lässt diese Option den GCC-Treiber Android-spezifische Optionen passieren
zum Linker. Schließlich bewirkt diese Option, dass das Präprozessor-Makro "__ANDROID__"
definiert.
-tno-android-cc
Kompilierungseffekte von deaktivieren -Mandroid, dh nicht aktivieren -mbionisch, -fPIC,
-fno-Ausnahmen und -fno-rtti standardmäßig.
-tno-android-ld
Deaktivieren Sie die Verknüpfungseffekte von -Mandroid, dh die Standard-Linux-Verknüpfungsoptionen an die
Linker.
H8 / 300 Optionen
Diese -m Optionen sind für die H8/300-Implementierungen definiert:
-Entspann dich
Kürzen Sie nach Möglichkeit einige Adressreferenzen zur Linkzeit; verwendet die Linker-Option
-entspannen.
-Mh Code für H8/300H generieren.
-Frau Code für H8S generieren.
-Mn Generieren Sie Code für H8S und H8/300H im normalen Modus. Dieser Schalter muss verwendet werden
entweder mit -Mh or -Frau.
-ms2600
Code für H8S/2600 generieren. Dieser Schalter muss verwendet werden mit -Frau.
-mexr
Erweiterte Register werden auf dem Stack gespeichert, bevor die Funktion mit Monitor ausgeführt wird
Attribut. Standardoption ist -mexr. Diese Option ist nur für H8S-Ziele gültig.
-mno-exr
Erweiterte Register werden vor der Ausführung der Funktion mit Monitor nicht auf dem Stack gespeichert
Attribut. Standardoption ist -mno-exr. Diese Option ist nur für H8S-Ziele gültig.
-minze32
Machen Sie "int"-Daten standardmäßig auf 32 Bit.
-bösartig-300
Verwenden Sie beim H8/300H und H8S die gleichen Ausrichtungsregeln wie beim H8/300. Der Standard
für H8/300H und H8S besteht darin, Longs und Floats an 4-Byte-Grenzen auszurichten.
-bösartig-300 bewirkt, dass sie an 2-Byte-Grenzen ausgerichtet werden. Diese Option hat keine Auswirkung
auf der H8/300.
HPPA Optionen
Diese -m Optionen sind für die HPPA-Computerfamilie definiert:
-marsch=Architektur-Typ
Generieren Sie Code für die angegebene Architektur. Die Auswahl für Architektur-Typ sind
1.0 für PA 1.0, 1.1 für PA 1.1, und 2.0 für PA 2.0-Prozessoren. Beziehen auf
/usr/lib/sched.models auf einem HP-UX-System, um die richtige Architekturoption zu ermitteln
für Ihre Maschine. Code, der für Architekturen mit niedrigeren Nummern kompiliert wurde, läuft auf höheren
nummerierte Architekturen, aber nicht umgekehrt.
-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Synonym für -März=1.0, -März=1.1 und -März=2.0 beziehungsweise.
-mSprung in Verzögerung
Diese Option wird ignoriert und nur aus Kompatibilitätsgründen bereitgestellt.
-mdisable-fpregs
Verhindern Sie, dass Gleitkommaregister in irgendeiner Weise verwendet werden. Dies ist notwendig für
Kompilieren von Kerneln, die Lazy Context Switching von Gleitkommaregistern durchführen. Wenn
Sie verwenden diese Option und versuchen, Gleitkommaoperationen auszuführen, der Compiler
bricht ab.
-mdisable-indexing
Verhindern Sie, dass der Compiler die Indizierungsadressenmodi verwendet. Das vermeidet manche eher
unklare Probleme beim Kompilieren von MIG-generiertem Code unter MACH.
-mno-space-regs
Generieren Sie Code, der davon ausgeht, dass das Ziel keine Platzregister hat. Dadurch kann GCC
Generieren Sie schnellere indirekte Aufrufe und verwenden Sie nicht skalierte Indexadressmodi.
Ein solcher Code ist für PA-Systeme und -Kernel der Stufe 0 geeignet.
-mfast-indirekte-Aufrufe
Generieren Sie Code, der davon ausgeht, dass Aufrufe niemals Raumgrenzen überschreiten. Dadurch kann GCC
Code ausgeben, der schnellere indirekte Aufrufe durchführt.
Diese Option funktioniert nicht, wenn gemeinsam genutzte Bibliotheken oder verschachtelte Funktionen vorhanden sind.
-mfixed-range=Registerbereich
Generieren Sie Code, der den angegebenen Registerbereich als feste Register behandelt. Ein festes Register
ist eine, die der Registerzuordner nicht verwenden kann. Dies ist nützlich beim Kompilieren des Kernels
Code. Ein Registerbereich wird als zwei durch einen Bindestrich getrennte Register angegeben. Mehrere
Registerbereiche können durch ein Komma getrennt angegeben werden.
-mlong-load-store
Generieren Sie 3-Befehls-Lade- und -Speichersequenzen, wie sie manchmal von HP-UX 10 . benötigt werden
Linker. Dies entspricht dem +k Option zu den HP-Compilern.
-mportable-Laufzeit
Verwenden Sie die von HP für ELF-Systeme vorgeschlagenen tragbaren Anrufkonventionen.
-mg
Aktivieren Sie die Verwendung von Assembler-Direktiven, die nur GAS versteht.
-mschedule=CPU-Typ
Zeitplancode gemäß den Einschränkungen für den Maschinentyp CPU-Typ. Die Auswahlmöglichkeiten
für CPU-Typ sind 700 7100, 7100LC, 7200, 7300 und 8000. Beziehen auf
/usr/lib/sched.models auf einem HP-UX-System, um die richtige Planungsoption für
Ihre Maschine. Die Standardplanung ist 8000.
-mlinker-opt
Aktivieren Sie den Optimierungsdurchgang im HP-UX-Linker. Beachten Sie, dass dies das symbolische Debuggen ermöglicht
unmöglich. Es löst auch einen Fehler in den HP-UX 8- und HP-UX 9-Linkern aus, in denen sie
gefälschte Fehlermeldungen beim Verknüpfen einiger Programme ausgeben.
-msoft-float
Generieren Sie eine Ausgabe mit Bibliotheksaufrufen für Gleitkommazahlen. Warnung: das Erfordernis
Bibliotheken sind nicht für alle HPPA-Ziele verfügbar. Normalerweise sind die Einrichtungen der
der übliche C-Compiler der Maschine verwendet wird, dies kann jedoch nicht direkt in Cross-
Zusammenstellung. Sie müssen Ihre eigenen Vorkehrungen treffen, um eine geeignete Bibliothek bereitzustellen
Funktionen für die Kreuzkompilierung.
-msoft-float ändert die Aufrufkonvention in der Ausgabedatei; deshalb ist es nur
nützlich, wenn Sie kompilieren alle eines Programms mit dieser Option. Insbesondere müssen Sie
kompilieren libgcc.a, die Bibliothek, die mit GCC geliefert wird, mit -msoft-float um dies zu erreichen
an die Arbeit.
-msi
Generieren Sie die Vorgabe "_SIO" für Server-IO. Die Standardeinstellung ist -mwsio. Dies erzeugt
die Voreinstellungen "__hp9000s700", "__hp9000s700__" und "_WSIO" für Workstation-IO.
Diese Optionen sind unter HP-UX und HI-UX verfügbar.
-mgnu-ld
GNU .-spezifische Optionen verwenden ld. Das geht vorbei -geteilt zu ld beim Aufbau einer gemeinsamen
Bücherei. Dies ist die Standardeinstellung, wenn GCC explizit oder implizit mit dem
GNU-Linker. Diese Option hat keinen Einfluss darauf, welche ld wird genannt; es ändert nur was
Parameter werden daran übergeben lddem „Vermischten Geschmack“. Seine ld das heißt wird bestimmt durch die
--mit-ld Konfigurationsoption, den Programmsuchpfad von GCC und schließlich durch den Benutzer PATH.
Der von GCC verwendete Linker kann gedruckt werden mit welche `ggc -print-prog-name=ld`. Dies
Option ist nur auf dem 64-Bit HP-UX GCC verfügbar, dh konfiguriert mit
hppa*64*-*-hpux*.
-mhp-ld
HP-spezifische Optionen verwenden ld. Das geht vorbei -b zu ld beim Aufbau einer gemeinsamen Bibliothek
und geht vorbei +Akzeptieren TypMismatch zu ld auf allen Links. Dies ist die Standardeinstellung, wenn GCC . ist
explizit oder implizit mit dem HP-Linker konfiguriert werden. Diese Option hat keinen Einfluss
welche ld wird genannt; es ändert nur, welche Parameter daran übergeben werden lddem „Vermischten Geschmack“. Seine ld
das heißt wird bestimmt durch die --mit-ld Konfigurationsoption, GCC-Programmsuche
Pfad und schließlich durch den Benutzer PATH. Der von GCC verwendete Linker kann gedruckt werden mit
welche `ggc -print-prog-name=ld`. Diese Option ist nur auf dem 64-Bit-HP-UX verfügbar
GCC, dh konfiguriert mit hppa*64*-*-hpux*.
-mlong-anrufe
Generieren Sie Code, der lange Aufrufsequenzen verwendet. Damit ist sichergestellt, dass ein Anruf immer möglich ist
Linker generierte Stubs zu erreichen. Standardmäßig werden lange Anrufe nur generiert, wenn die
Entfernung von der Aufrufstelle zum Anfang der Funktions- oder Übersetzungseinheit, da
der Fall sein kann, überschreitet eine vordefinierte Grenze, die durch den verwendeten Zweigtyp festgelegt wird. Die
Limits für normale Anrufe sind 7,600,000 bzw. 240,000 Bytes für den PA 2.0
und PA 1.X-Architekturen. Geschwisterrufe sind immer auf 240,000 Byte begrenzt.
Entfernungen werden ab dem Beginn der Funktionen gemessen, wenn die
-fFunktions-Abschnitte Option, oder bei Verwendung der -mg und -Mno-portable Runtime Optionen
zusammen unter HP-UX mit dem SOM-Linker.
Es ist normalerweise nicht wünschenswert, diese Option zu verwenden, da sie die Leistung beeinträchtigt. Jedoch,
Dies kann in großen Anwendungen nützlich sein, insbesondere wenn eine teilweise Verknüpfung verwendet wird, um
die Anwendung erstellen.
Die Art der verwendeten langen Aufrufe hängt von den Fähigkeiten des Assemblers und Linkers ab.
und die Art des generierten Codes. Die Auswirkungen auf Systeme, die lange unterstützen
absolute Aufrufe und lange Bildsymbol-Differenz oder PC-relative Aufrufe sollten sein
relativ klein. Ein indirekter Aufruf wird jedoch auf 32-Bit-ELF-Systemen im Pic-Code verwendet
und es ist ziemlich lang.
-munix=unix-std
Compiler-Voreinstellungen generieren und eine Startdatei für den angegebenen UNIX-Standard auswählen.
Die Auswahl für unix-std sind 93, 95 und 98. 93 wird von allen HP-UX-Versionen unterstützt.
95 ist unter HP-UX 10.10 und höher verfügbar. 98 ist unter HP-UX 11.11 und höher verfügbar.
Die Standardwerte sind 93 für HP-UX 10.00, 95 für HP-UX 10.10 jedoch bis 11.00, und 98
für HP-UX 11.11 und höher.
-munix=93 bietet die gleichen Voreinstellungen wie GCC 3.3 und 3.4. -munix=95 bietet
zusätzliche Voreinstellungen für "XOPEN_UNIX" und "_XOPEN_SOURCE_EXTENDED" und die Startdatei
unix95.o. -munix=98 bietet zusätzliche Voreinstellungen für "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" und "_INCLUDE_XOPEN_SOURCE_500",
und die Startdatei unix98.o.
wichtig Beachten Sie, dass diese Option die Schnittstellen für verschiedene Bibliotheken ändert
Routinen. Es beeinflusst auch das Betriebsverhalten der C-Bibliothek. Daher, Extrem
Bei der Verwendung dieser Option ist Vorsicht geboten.
Bibliothekscode, der mit mehr als einem UNIX-Standard betrieben werden soll, muss testen,
Setzen Sie die Variable "__xpg4_extended_mask" entsprechend und stellen Sie sie wieder her. Die meisten GNU-Software
bietet diese Fähigkeit nicht.
-nolibdld
Unterdrücken Sie die Generierung von Linkoptionen, um libdld.sl zu durchsuchen, wenn die -statisch Option ist
unter HP-UX 10 und höher angegeben.
-statisch
Die HP-UX-Implementierung von setlocale in libc ist von libdld.sl abhängig. Dort
ist keine Archivversion von libdld.sl. Also, wenn die -statisch Option angegeben ist,
Um diese Abhängigkeit aufzulösen, sind spezielle Link-Optionen erforderlich.
Unter HP-UX 10 und höher fügt der GCC-Treiber die erforderlichen Optionen zum Verknüpfen hinzu
libdld.sl, wenn die -statisch Option angegeben ist. Dies führt dazu, dass die resultierende Binärdatei
dynamisch sein. Auf dem 64-Bit-Port generieren die Linker standardmäßig dynamische Binärdateien in
auf jeden Fall. Die -nolibdld Option kann verwendet werden, um das Hinzufügen des GCC-Treibers zu verhindern
diese Linkoptionen.
-fäden
Fügen Sie Unterstützung für Multithreading hinzu mit dem dce Faden Bibliothek unter HP-UX. Diese Option
setzt Flags sowohl für den Präprozessor als auch für den Linker.
IA-64 Optionen
Dies sind die -m Optionen für die Intel IA-64-Architektur definiert.
-mbig-endian
Generieren Sie Code für ein Big-Endian-Ziel. Dies ist die Standardeinstellung für HP-UX.
-mlittle-endian
Generieren Sie Code für ein Little-Endian-Ziel. Dies ist die Standardeinstellung für AIX5 und GNU/Linux.
-mgnu-wie
-mno-gnu-as
Generieren (oder nicht) von Code für den GNU-Assembler. Dies ist die Standardeinstellung.
-mgnu-ld
-mno-gnu-ld
Generieren (oder nicht) von Code für den GNU-Linker. Dies ist die Standardeinstellung.
-mno-pic
Generieren Sie Code, der kein globales Zeigerregister verwendet. Das Ergebnis ist nicht Position
unabhängiger Code und verletzt die IA-64 ABI.
-mvolatile-asm-stop
-mno-volatile-asm-stop
Generieren (oder nicht) eines Stoppbits unmittelbar vor und nach flüchtigen asm-Anweisungen.
-mregister-namen
-mno-register-namen
Generieren (oder nicht) in, loc und Registernamen für die gestapelten Register. Dies
kann die Assembler-Ausgabe lesbarer machen.
-mno-sdata
-msdaten
Deaktivieren (oder aktivieren) Sie Optimierungen, die den Abschnitt mit kleinen Daten verwenden. Das kann nützlich sein
zur Umgehung von Optimierungsfehlern.
-mconstant-gp
Generieren Sie Code, der einen einzelnen konstanten globalen Zeigerwert verwendet. Dies ist nützlich, wenn
Kernel-Code kompilieren.
-mauto-pic
Generieren Sie Code, der selbstverschiebbar ist. Dies impliziert -mconstant-gp. Das ist nützlich
beim Kompilieren des Firmware-Codes.
-minline-float-divide-min-latenz
Generieren Sie Code für Inline-Divisionen von Gleitkommawerten mit minimaler Latenz
Algorithmus.
-minline-float-divide-max-Durchsatz
Generieren Sie Code für Inline-Divisionen von Gleitkommawerten mit maximalem Durchsatz
Algorithmus.
-mno-inline-float-divide
Generieren Sie keinen Inline-Code für Divisionen von Gleitkommawerten.
-minline-int-divide-min-Latenz
Generieren Sie Code für Inline-Divisionen von ganzzahligen Werten unter Verwendung der minimalen Latenz
Algorithmus.
-minline-int-divide-max-Durchsatz
Generieren Sie Code für Inline-Divisionen von ganzzahligen Werten mit maximalem Durchsatz
Algorithmus.
-Mno-inline-in-Divide
Generieren Sie keinen Inline-Code für Divisionen von ganzzahligen Werten.
-minline-sqrt-min-Latenz
Generieren Sie Code für Inline-Quadratwurzeln mit dem Algorithmus der minimalen Latenz.
-minline-sqrt-max-Durchsatz
Generieren Sie Code für Inline-Quadratwurzeln mit dem Algorithmus für den maximalen Durchsatz.
-mno-inline-sqrt
Generieren Sie keinen Inline-Code für "sqrt".
-verwirrt-wahnsinnig
-mno-fusion-madd
Generiere (keinen) Code, der das fusionierte Multiplizieren/Addieren oder Multiplizieren/Subtrahieren verwendet
Anweisungen. Standardmäßig werden diese Anweisungen verwendet.
-mno-zwerg2-asm
-mdwarf2-asm
Generieren Sie keinen Assembler-Code für die DWARF 2-Zeilennummer-Debugging-Informationen (oder erstellen Sie sie nicht).
Dies kann nützlich sein, wenn Sie den GNU-Assembler nicht verwenden.
-mearly-stop-bits
-mno-frühe-stop-bits
Lassen Sie zu, dass Stoppbits früher als unmittelbar vor der Anweisung platziert werden, die
das Stoppbit ausgelöst. Dies kann die Unterrichtsplanung verbessern, ist dies jedoch nicht immer
tun Sie dies.
-mfixed-range=Registerbereich
Generieren Sie Code, der den angegebenen Registerbereich als feste Register behandelt. Ein festes Register
ist eine, die der Registerzuordner nicht verwenden kann. Dies ist nützlich beim Kompilieren des Kernels
Code. Ein Registerbereich wird als zwei durch einen Bindestrich getrennte Register angegeben. Mehrere
Registerbereiche können durch ein Komma getrennt angegeben werden.
-mtls-Größe=tls-Größe
Geben Sie die Bitgröße der unmittelbaren TLS-Offsets an. Gültige Werte sind 14, 22 und 64.
-mtune=CPU-Typ
Optimieren Sie die Befehlsplanung für eine bestimmte CPU. Gültige Werte sind Itanium,
Titan1, verschmolzen, Titan2 und mckinley.
-milp32
-mlp64
Generieren Sie Code für eine 32-Bit- oder 64-Bit-Umgebung. Die 32-Bit-Umgebung setzt int,
long und Zeiger auf 32 Bit. Die 64-Bit-Umgebung setzt int auf 32 Bit und lang und
Zeiger auf 64 Bit. Dies sind HP-UX-spezifische Flags.
-mno-sched-br-data-spec
-Med-BR-Daten-Spec
(De/Aktivieren) Sie die spekulative Datenplanung vor dem Neuladen. Dies führt zur Erzeugung von
„ld.a“-Anweisungen und die entsprechenden Prüfanweisungen („ld.c“ / „chk.a“). Die
Standard ist 'deaktivieren'.
-msched-ar-data-spec
-mno-sched-ar-data-spec
(Aktivieren/Deaktivieren) spekulatives Daten-Scheduling nach dem Neuladen. Dies führt zur Erzeugung von
„ld.a“-Anweisungen und die entsprechenden Prüfanweisungen („ld.c“ / „chk.a“). Die
Standard ist 'aktivieren'.
-mno-sched-control-spec
-msched-control-spec
(De/Aktivieren) Sie die Kontrolle der spekulativen Planung. Diese Funktion ist nur verfügbar während
Regionsplanung (dh vor dem erneuten Laden). Dies führt zur Generierung der "ld.s"
Anleitung und die dazugehörige Prüfanleitung "chk.s". Die Standardeinstellung ist
'deaktivieren'.
-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis)able spekulatives Scheduling der Anweisungen, die von den Daten abhängig sind
spekulative Ladungen vor dem Nachladen. Dies ist nur wirksam mit -Med-BR-Daten-Spec
aktiviert. Die Standardeinstellung ist 'aktivieren'.
-msched-ar-in-Datenspezifikation
-mno-sched-ar-in-Datenspezifikation
(En/Dis)able spekulatives Scheduling der Anweisungen, die von den Daten abhängig sind
Spekulative Ladungen nach dem Nachladen. Dies ist nur wirksam mit -msched-ar-data-spec
aktiviert. Die Standardeinstellung ist 'aktivieren'.
-msched-in-control-spez
-mno-sched-in-control-spec
(En/Dis)able spekulatives Scheduling der Anweisungen, die von der
spekulative Lasten kontrollieren. Dies ist nur wirksam mit -msched-control-spec aktiviert.
Die Standardeinstellung ist 'aktivieren'.
-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Wenn aktiviert, werden datenspekulative Anweisungen nur dann für den Zeitplan ausgewählt, wenn keine
andere Wahlmöglichkeiten im Moment. Das macht die Nutzung der Datenspekulation viel mehr
konservativ. Die Standardeinstellung ist 'deaktivieren'.
-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Wenn aktiviert, werden steuerungsspekulative Anweisungen nur dann für den Zeitplan ausgewählt, wenn es
im Moment keine andere Wahl. Dies macht den Einsatz der Kontrollspekulation viel
eher konservativ. Die Standardeinstellung ist 'deaktivieren'.
-mno-sched-count-spec-in-kritischer-Pfad
-msched-count-spec-in-kritischer-Pfad
Wenn aktiviert, werden spekulative Abhängigkeiten bei der Berechnung des . berücksichtigt
Anweisungen Prioritäten. Das macht die Verwendung der Spekulation ein bisschen mehr
konservativ. Die Standardeinstellung ist 'deaktivieren'.
-msched-spec-ldc
Verwenden Sie eine einfache Datenspekulationsprüfung. Diese Option ist standardmäßig aktiviert.
-msched-control-spec-ldc
Verwenden Sie einen einfachen Scheck, um die Spekulation zu kontrollieren. Diese Option ist standardmäßig aktiviert.
-msched-stop-bits-nach-jedem-Zyklus
Setzen Sie bei der Planung nach jedem Zyklus ein Stoppbit. Diese Option ist standardmäßig aktiviert.
-msched-fp-mem-deps-zero-cost
Gehen Sie davon aus, dass Gleitkommaspeicher und -ladevorgänge wahrscheinlich keinen Konflikt verursachen, wenn
in dieselbe Anweisungsgruppe eingeordnet. Diese Option ist standardmäßig deaktiviert.
-msel-sched-dont-check-control-spec
Generieren Sie Prüfungen für Kontrollspekulationen in der selektiven Planung. Diese Flagge ist
standardmäßig deaktiviert.
-msched-max-memory-insns=max-insns
Beschränken Sie die Anzahl der Speicher-Insns pro Befehlsgruppe, wodurch niedrigere Priorität erhält
nachfolgende Memory-Insns, die versuchen, in derselben Befehlsgruppe zu planen.
Häufig nützlich, um Cache-Bank-Konflikte zu vermeiden. Der Standardwert ist 1.
-msched-max-memory-insns-hard-limit
Macht das durch . angegebene Limit msched-max-memory-insns eine harte Grenze, die mehr verbietet
als diese Nummer in einer Anweisungsgruppe. Ansonsten ist die Grenze "weich", d.h
dass bei Erreichen des Limits speicherfreie Operationen bevorzugt werden, aber Speicher
Operationen können noch geplant werden.
LM32 Optionen
Diese -m Optionen sind für die LatticeMico32-Architektur definiert:
-mbarrel-shift-aktiviert
Aktivieren Sie die Barrel-Shift-Anweisungen.
-mdivide-aktiviert
Aktivieren Sie die Divisions- und Modulus-Anweisungen.
-mmultiply-aktiviert
Aktivieren Sie die Multiplikationsanweisungen.
-msign-extend-enabled
Aktivieren Sie die Anweisungen zur Zeichenerweiterung.
-muser-aktiviert
Aktivieren Sie benutzerdefinierte Anweisungen.
M32C Optionen
-mcpu=Name
Wählen Sie die CPU aus, für die Code generiert wird. Name kann einer von sein r8c für den R8C/Tiny
Serie, m16c für die Baureihe M16C (bis /60), m32cm für die M16C/80-Serie, oder m32c
für die M32C/80-Serie.
-msim
Gibt an, dass das Programm auf dem Simulator ausgeführt wird. Dies führt zu einem alternativen
einzubindende Laufzeitbibliothek, die z. B. Datei-I/O unterstützt. Du darfst nicht
Verwenden Sie diese Option, wenn Sie Programme erstellen, die auf echter Hardware laufen. du musst
Stellen Sie Ihre eigene Laufzeitbibliothek für alle benötigten I/O-Funktionen bereit.
-memregs=Anzahl
Gibt die Anzahl der speicherbasierten Pseudoregister an, die GCC während der Codegenerierung verwendet.
Diese Pseudoregister werden wie echte Register verwendet, daher gibt es einen Kompromiss zwischen
Die Fähigkeit von GCC, den Code in verfügbare Register einzupassen, und die Leistungseinbußen von
Speicher statt Register verwenden. Beachten Sie, dass alle Module in einem Programm
mit dem gleichen Wert für diese Option kompiliert. Aus diesem Grund dürfen Sie dies nicht verwenden
Option mit den Standard-Laufzeitbibliotheken von GCC.
M32R/D Optionen
Diese -m Optionen sind für Renesas M32R/D-Architekturen definiert:
-m32r2
Code für M32R/2 generieren.
-m32rx
Code für M32R/X generieren.
-m32r
Code für den M32R generieren. Dies ist die Standardeinstellung.
-mmodel=klein
Angenommen, alle Objekte befinden sich in den unteren 16 MB des Speichers (damit ihre Adressen
mit der Anweisung "ld24" geladen) und nehmen an, dass alle Unterprogramme mit der
"bl"-Anweisung. Dies ist die Standardeinstellung.
Mit dem Attribut "model" kann die Adressierbarkeit eines bestimmten Objekts eingestellt werden.
-mmodel=mittel
Angenommen, Objekte können sich irgendwo im 32-Bit-Adressraum befinden (der Compiler generiert
"seth/add3"-Anweisungen zum Laden ihrer Adressen) und nehmen an, dass alle Unterprogramme
erreichbar mit der Anweisung "bl".
-mmodel=groß
Angenommen, Objekte können sich irgendwo im 32-Bit-Adressraum befinden (der Compiler generiert
"seth/add3"-Anweisungen zum Laden ihrer Adressen) und nehmen an, dass Unterprogramme möglicherweise nicht
erreichbar mit der Anweisung "bl" (der Compiler generiert die viel langsameren
Befehlsfolge "seth/add3/jl").
-msdata=keine
Deaktivieren Sie die Verwendung des kleinen Datenbereichs. Variablen werden in eine von ".data", ".bss" oder . eingefügt
".rodata" (es sei denn, das Attribut "section" wurde angegeben). Dies ist die Standardeinstellung.
Der kleine Datenbereich besteht aus den Abschnitten ".sdata" und ".sbss". Objekte können sein
explizit in den kleinen Datenbereich mit dem Attribut "section" mit einer dieser Optionen einfügen
.
-msdata=sdata
Legen Sie kleine globale und statische Daten in den kleinen Datenbereich, aber generieren Sie keine speziellen
Code, um darauf zu verweisen.
-msdata=verwenden
Legen Sie kleine globale und statische Daten in den kleinen Datenbereich und generieren Sie spezielle
Anweisungen, um darauf zu verweisen.
-G num
Setzen Sie globale und statische Objekte kleiner oder gleich num Bytes in die kleinen Daten oder
BSS-Abschnitte anstelle der normalen Daten- oder BSS-Abschnitte. Der Standardwert von num is
8. Das -msdaten Option muss auf eine von . gesetzt werden Daten or - für diese Option zu haben
Wirkung.
Alle Module sollten mit dem gleichen kompiliert werden -G num Wert. Kompilieren mit verschiedenen
Werte von num kann funktionieren oder nicht; Wenn nicht, gibt der Linker einen Fehler aus
Nachricht---Es wird kein falscher Code generiert.
-mdebug
Lässt den M32R-spezifischen Code im Compiler einige Statistiken anzeigen, die hilfreich sein könnten
bei Debugging-Programmen.
-bösartige-Schleifen
Richten Sie alle Schleifen an einer 32-Byte-Grenze aus.
-mno-align-loops
Erzwingen Sie keine 32-Byte-Ausrichtung für Schleifen. Dies ist die Standardeinstellung.
-Missue-Rate=Anzahl
Problem Anzahl Anweisungen pro Zyklus. Anzahl kann nur 1 oder 2 sein.
-filialkosten=Anzahl
Anzahl kann nur 1 oder 2 sein. Wenn es 1 ist, werden Verzweigungen gegenüber bedingten bevorzugt
Code, wenn es 2 ist, dann gilt das Gegenteil.
-mflush-trap=Anzahl
Gibt die Trap-Nummer an, die zum Leeren des Caches verwendet werden soll. Der Standardwert ist 12. Gültig
Zahlen sind zwischen 0 und 15 einschließlich.
-mno-flush-trap
Gibt an, dass der Cache nicht mithilfe eines Traps geleert werden kann.
-mflush-func=Name
Gibt den Namen der Betriebssystemfunktion an, die aufgerufen werden soll, um den Cache zu leeren. Die
Standard ist _flush_cache, aber ein Funktionsaufruf wird nur verwendet, wenn kein Trap verfügbar ist.
-mno-Spülfunkt
Zeigt an, dass es keine Betriebssystemfunktion zum Leeren des Caches gibt.
M680x0 Optionen
Dies sind die -m Optionen für M680x0- und ColdFire-Prozessoren definiert. Die Standardeinstellungen
hängen davon ab, welche Architektur bei der Konfiguration des Compilers ausgewählt wurde; die Voreinstellungen
für die gebräuchlichsten Optionen sind unten aufgeführt.
-marsch=Bogen
Generieren Sie Code für eine bestimmte M680x0- oder ColdFire-Befehlssatzarchitektur.
Zulässige Werte von Bogen für M680x0-Architekturen sind: 68000, 68010, 68020, 68030,
68040, 68060 und cpu32. ColdFire-Architekturen werden nach Freescales
Die ISA-Klassifizierung und die zulässigen Werte sind: isaa, isaplus, isab und Isaac.
GCC definiert ein Makro "__mcfBogen__" wann immer es Code für ein ColdFire generiert
Ziel. Das Bogen in diesem Makro ist einer der -März oben genannten Argumente.
Bei gemeinsamer Verwendung -März und -munt Wählen Sie Code aus, der auf einer ähnlichen Familie läuft
Prozessoren, die jedoch für eine bestimmte Mikroarchitektur optimiert sind.
-mcpu=CPU
Generieren Sie Code für einen bestimmten M680x0- oder ColdFire-Prozessor. Das M680x0 CPUs sind:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 und cpu32. Das kalte Feuer CPUs
ergeben sich aus der folgenden Tabelle, die auch die CPUs in Familien einteilt:
Familie: -mcpu Argumente
51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51 mm 51qe 51qm
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485
-mcpu=CPU Überschreibungen -marsch=Bogen if Bogen ist kompatibel mit CPU. Andere Kombinationen von
-mcpu und -März werden abgelehnt.
GCC definiert das Makro "__mcf_cpu_Zentralprozessor" wenn ColdFire-Ziel CPU ist ausgewählt. Es auch
definiert "__mcf_familie_Familie", wobei der Wert von Familie ergibt sich aus der obigen Tabelle.
-mtune=Melodie
Optimieren Sie den Code für eine bestimmte Mikroarchitektur innerhalb der von . festgelegten Einschränkungen -März
und -mcpu. Die M680x0-Mikroarchitekturen sind: 68000, 68010, 68020, 68030, 68040,
68060 und cpu32. Die ColdFire-Mikroarchitekturen sind: cfv1, cfv2, cfv3, cfv4 und
cfv4e.
Sie können auch -mtune=68020-40 für Code, der auf 68020 relativ gut laufen muss,
68030 und 68040 Ziele. -mtune=68020-60 ist ähnlich, enthält aber 68060 Ziele als
Gut. Diese beiden Optionen wählen die gleichen Abstimmungsentscheidungen wie -m68020-40 und -m68020-60
beziehungsweise.
GCC definiert die Makros "__mcBogen" und "__mcBogen__" beim Tuning für 680x0 Architektur
Bogen. Es definiert auch "mcBogen" außer entweder -ansi oder ein Nicht-GNU -Std Option verwendet wird.
Wenn GCC auf eine Reihe von Architekturen abstimmt, wie von . ausgewählt -mtune=68020-40 or
-mtune=68020-60, definiert es die Makros für jede Architektur im Sortiment.
GCC definiert auch das Makro "__mfrühzeitig__" beim Tuning für ColdFire-Mikroarchitektur
frühzeitig, Wobei frühzeitig ist eines der oben genannten Argumente.
-m68000
-mc68000
Ausgabe für einen 68000 generieren. Dies ist die Standardeinstellung, wenn der Compiler konfiguriert ist für
68000-basierte Systeme. Es ist äquivalent zu -März=68000.
Verwenden Sie diese Option für Mikrocontroller mit einem 68000- oder EC000-Kern, einschließlich 68008,
68302, 68306, 68307, 68322, 68328 und 68356.
-m68010
Ausgabe für einen 68010 generieren. Dies ist die Standardeinstellung, wenn der Compiler konfiguriert ist für
68010-basierte Systeme. Es ist äquivalent zu -März=68010.
-m68020
-mc68020
Ausgabe für einen 68020 generieren. Dies ist die Standardeinstellung, wenn der Compiler konfiguriert ist für
68020-basierte Systeme. Es ist äquivalent zu -März=68020.
-m68030
Ausgabe für einen 68030 generieren. Dies ist die Standardeinstellung, wenn der Compiler konfiguriert ist für
68030-basierte Systeme. Es ist äquivalent zu -März=68030.
-m68040
Ausgabe für einen 68040 generieren. Dies ist die Standardeinstellung, wenn der Compiler konfiguriert ist für
68040-basierte Systeme. Es ist äquivalent zu -März=68040.
Diese Option verhindert die Verwendung von 68881/68882-Befehlen, die emuliert werden müssen von
Software auf dem 68040. Verwenden Sie diese Option, wenn Ihr 68040 keinen Code zum Emulieren hat
diese Anweisungen.
-m68060
Ausgabe für einen 68060 generieren. Dies ist die Standardeinstellung, wenn der Compiler konfiguriert ist für
68060-basierte Systeme. Es ist äquivalent zu -März=68060.
Diese Option verhindert die Verwendung der Anweisungen 68020 und 68881/68882, die
emuliert durch Software auf dem 68060. Verwenden Sie diese Option, wenn Ihr 68060 keinen Code hat
um diese Anweisungen zu emulieren.
-mcpu32
Ausgabe für eine CPU32 generieren. Dies ist die Standardeinstellung, wenn der Compiler konfiguriert ist für
CPU32-basierte Systeme. Es ist äquivalent zu -marsch=cpu32.
Verwenden Sie diese Option für Mikrocontroller mit einem CPU32- oder CPU32+-Kern, einschließlich 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 und 68360.
-m5200
Generieren Sie eine Ausgabe für eine 520X ColdFire-CPU. Dies ist die Standardeinstellung, wenn der Compiler
konfiguriert für 520X-basierte Systeme. Es ist äquivalent zu -mcpu=5206und ist jetzt
zugunsten dieser Option abgelehnt.
Verwenden Sie diese Option für Mikrocontroller mit einem 5200-Kern, einschließlich MCF5202, MCF5203,
MCF5204 und MCF5206.
-m5206e
Generieren Sie eine Ausgabe für eine 5206e ColdFire-CPU. Die Option ist jetzt veraltet zugunsten von
das Äquivalent -mcpu=5206e.
-m528x
Generieren Sie eine Ausgabe für ein Mitglied der ColdFire 528X-Familie. Die Option ist jetzt
zugunsten des Äquivalents verworfen -mcpu=528x.
-m5307
Generieren Sie eine Ausgabe für eine ColdFire 5307-CPU. Die Option wird jetzt zugunsten der . eingestellt
äquivalent -mcpu=5307.
-m5407
Generieren Sie eine Ausgabe für eine ColdFire 5407-CPU. Die Option wird jetzt zugunsten der . eingestellt
äquivalent -mcpu=5407.
-mcfv4e
Generieren Sie eine Ausgabe für eine CPU der ColdFire V4e-Familie (zB 547x/548x). Dies beinhaltet die Verwendung von
Hardware-Gleitkommabefehle. Die Option ist äquivalent zu -mcpu=547x, und ist
jetzt zugunsten dieser Option eingestellt.
-m68020-40
Generieren Sie eine Ausgabe für einen 68040, ohne die neuen Anweisungen zu verwenden. Dieses Ergebnis
in Code, der auf einem 68020/68881 oder einem 68030 oder einem relativ effizient ausgeführt werden kann
68040. Der generierte Code verwendet die 68881-Anweisungen, die auf dem emuliert werden
68040
Die Option ist äquivalent zu -März=68020 -mtune=68020-40.
-m68020-60
Generieren Sie eine Ausgabe für einen 68060, ohne die neuen Anweisungen zu verwenden. Dieses Ergebnis
in Code, der auf einem 68020/68881 oder einem 68030 oder einem relativ effizient ausgeführt werden kann
68040. Der generierte Code verwendet die 68881-Anweisungen, die auf dem emuliert werden
68060
Die Option ist äquivalent zu -März=68020 -mtune=68020-60.
-mhard-float
-m68881
Gleitkomma-Anweisungen generieren. Dies ist die Standardeinstellung für 68020 und höher, und
für ColdFire-Geräte mit FPU. Es definiert das Makro "__HAVE_68881__" auf
M680x0-Ziele und "__mcffpu__" auf ColdFire-Zielen.
-msoft-float
Generieren Sie keine Gleitkomma-Anweisungen; Verwenden Sie stattdessen Bibliotheksaufrufe. Dies ist das
Standard für 68000-, 68010- und 68832-Ziele. Es ist auch die Standardeinstellung für ColdFire
Geräte ohne FPU.
-mdiv
-mno-div
Generieren (nicht generieren) ColdFire-Hardwaredivisions- und Restbefehle. Wenn
-März wird verwendet ohne -mcpu, der Standardwert ist "on" für ColdFire-Architekturen und "off"
für M680x0-Architekturen. Andernfalls wird die Vorgabe von der Ziel-CPU übernommen (entweder
die Standard-CPU oder die von . angegebene -mcpu). Die Standardeinstellung ist beispielsweise "aus".
für -mcpu=5206 und "an" für -mcpu=5206e.
GCC definiert das Makro "__mcfhwdiv__", wenn diese Option aktiviert ist.
-mkurz
Betrachten Sie den Typ "int" als 16 Bit breit, wie "short int". Zusätzlich Parameter
auf dem Stack übergeben werden, werden auch auf Zielen, deren API
schreibt die Heraufstufung auf 32-Bit vor.
-mno-kurz
Betrachten Sie den Typ "int" nicht als 16 Bit breit. Dies ist die Standardeinstellung.
-mnobitfield
-mno-Bitfeld
Verwenden Sie nicht die Bitfeldbefehle. Die -m68000, -mcpu32 und -m5200 Optionen implizieren
-mnobitfield.
-mbitfeld
Verwenden Sie die Bitfeld-Anweisungen. Die -m68020 Option impliziert -mbitfeld. Dies ist
die Standardeinstellung, wenn Sie eine Konfiguration verwenden, die für einen 68020 entwickelt wurde.
-mrtd
Verwenden Sie eine andere Funktionsaufrufkonvention, bei der Funktionen, die eine feste
Die Anzahl der Argumente wird mit der Anweisung "rtd" zurückgegeben, die ihre Argumente ausgibt
bei der Rückkehr. Dies spart eine Anweisung im Anrufer, da dies nicht erforderlich ist
Pop die Argumente dort.
Diese Aufrufkonvention ist mit der normalerweise unter Unix verwendeten inkompatibel
kann es nicht verwenden, wenn Sie Bibliotheken aufrufen müssen, die mit dem Unix-Compiler kompiliert wurden.
Außerdem müssen Sie Funktionsprototypen für alle Funktionen bereitstellen, die Variablen annehmen
Anzahl von Argumenten (einschließlich "printf"); andernfalls wird falscher Code generiert für
ruft diese Funktionen auf.
Darüber hinaus führt der Aufruf einer Funktion mit zu vielen zu schwerwiegenden falschen Codes
Argumente. (Normalerweise werden zusätzliche Argumente harmlos ignoriert.)
Die Anweisung "rtd" wird von 68010, 68020, 68030, 68040, 68060 und CPU32 unterstützt
Prozessoren, aber nicht von den 68000 oder 5200.
-mno-rtd
Verwenden Sie nicht die von . ausgewählten Aufrufkonventionen -mrtd. Dies ist die Standardeinstellung.
-bösartig-int
-mno-align-int
Steuern Sie, ob GCC "int", "long", "long long", "float", "double" und "long" ausrichtet
double"-Variablen auf einer 32-Bit-Grenze (-bösartig-int) oder eine 16-Bit-Grenze
(-mno-align-int). Das Ausrichten von Variablen an 32-Bit-Grenzen erzeugt Code, der ausgeführt wird
auf Prozessoren mit 32-Bit-Bussen etwas schneller auf Kosten von mehr Speicher.
Warnung: wenn Sie das benutzen -bösartig-int Schalter, GCC richtet Strukturen aus, die die oben genannten enthalten
Typen unterscheiden sich von den meisten veröffentlichten Anwendungsbinärschnittstellenspezifikationen für
der m68k.
-mpcrel
Verwenden Sie den pc-relativen Adressierungsmodus des 68000 direkt, anstatt einen globalen
versetzter Tisch. Derzeit impliziert diese Option -fpic, erlaubt höchstens einen 16-Bit-Offset
für PC-relative Adressierung. -fPIC wird derzeit nicht unterstützt mit -mpcrel, obwohl
dies könnte für 68020 und höhere Prozessoren unterstützt werden.
-mno-strict-align
-mstrict-align
Gehen Sie nicht davon aus, dass nicht ausgerichtete Speicherreferenzen vom System verarbeitet werden.
-msep-Daten
Generieren Sie Code, der es ermöglicht, das Datensegment in einem anderen Speicherbereich zu platzieren
aus dem Textsegment. Dies ermöglicht die Ausführung an Ort und Stelle in einer Umgebung ohne
Verwaltung des virtuellen Speichers. Diese Option impliziert -fPIC.
-mno-sep-daten
Generieren Sie Code, der davon ausgeht, dass das Datensegment dem Textsegment folgt. Das ist
der Standard.
-Mitte-geteilte-Bibliothek
Generieren Sie Code, der gemeinsam genutzte Bibliotheken über die Bibliotheks-ID-Methode unterstützt. Dies erlaubt
für Execute-in-Place und Shared Libraries in einer Umgebung ohne virtuellen Speicher
Verwaltung. Diese Option impliziert -fPIC.
-mno-id-shared-library
Generieren Sie Code, der nicht davon ausgeht, dass ID-basierte gemeinsam genutzte Bibliotheken verwendet werden. Das ist
der Standard.
-mshared-library-id=n
Gibt die Identifikationsnummer der ID-basierten gemeinsam genutzten Bibliothek an, die kompiliert wird.
Die Angabe eines Werts von 0 erzeugt kompakteren Code; Angabe anderer Werte Kräfte
die Zuordnung dieser Nummer zur aktuellen Bibliothek, aber nicht mehr Raum- oder Zeit-
effizienter als das Weglassen dieser Option.
-mxgot
-mno-xgot
Generieren Sie beim Generieren von positionsunabhängigem Code für ColdFire Code, der funktioniert, wenn
das GOT hat mehr als 8192 Einträge. Dieser Code ist größer und langsamer als Code
ohne diese Option generiert. Bei M680x0-Prozessoren wird diese Option nicht benötigt; -fPIC
genügt.
GCC verwendet normalerweise einen einzelnen Befehl, um Werte aus dem GOT zu laden. Während dies ist
relativ effizient, es funktioniert nur, wenn die GOT kleiner als etwa 64k ist. Irgendetwas
größer führt dazu, dass der Linker einen Fehler meldet, wie zum Beispiel:
Umzug passend gekürzt: R_68K_GOT16O foobar
In diesem Fall sollten Sie Ihren Code mit neu kompilieren -mxgot. Dann sollte es funktionieren mit
sehr große GOTs. Code generiert mit -mxgot ist weniger effizient, da es
benötigt 4 Anweisungen, um den Wert eines globalen Symbols abzurufen.
Beachten Sie, dass einige Linker, einschließlich neuerer Versionen des GNU-Linkers,
mehrere GOTs und sortieren GOT-Einträge. Wenn Sie einen solchen Linker haben, sollten Sie nur
benutzen -mxgot beim Kompilieren einer einzelnen Objektdatei, die auf mehr als 8192 GOT zugreift
Einträge. Sehr wenige tun.
Diese Optionen haben keine Wirkung, es sei denn, GCC generiert positionsunabhängigen Code.
MCore Optionen
Dies sind die -m Optionen für die Motorola M*Core-Prozessoren definiert.
-mhardlit
-mno-hardlit
Inline-Konstanten in den Code-Stream, wenn dies in zwei oder weniger Anweisungen möglich ist.
-mdiv
-mno-div
Verwenden Sie die Divisionsanweisung. (Standardmäßig aktiviert).
-mrelax-sofort
-mno-relax-sofort
Erlauben Sie beliebig große Immediate in Bit-Operationen.
-mwide-bitfields
-mno-wide-bitfields
Behandeln Sie Bitfelder immer als "int"-Größe.
-m4Byte-Funktionen
-mno-4byte-Funktionen
Erzwingen Sie, dass alle Funktionen an einer 4-Byte-Grenze ausgerichtet werden.
-mcallgraph-Daten
-mno-callgraph-data
Callgraph-Informationen ausgeben.
-mslow-bytes
-mno-slow-bytes
Bevorzugen Sie den Wortzugriff beim Lesen von Bytemengen.
-mlittle-endian
-mbig-endian
Generieren Sie Code für ein Little-Endian-Ziel.
-m210
-m340
Generieren Sie Code für den 210-Prozessor.
-mno-lsim
Gehen Sie davon aus, dass Laufzeitunterstützung bereitgestellt wurde und lassen Sie die Simulatorbibliothek weg
(libsim.a) über die Linker-Befehlszeile.
-mstack-inkrement=Größe
Legen Sie den maximalen Betrag für eine einzelne Stapelinkrementierungsoperation fest. Große Werte können
Erhöhen Sie die Geschwindigkeit von Programmen, die Funktionen enthalten, die viel
Stackspace, können aber auch einen Segmentierungsfehler auslösen, wenn der Stack erweitert wird
zu viel. Der Standardwert ist 0x1000.
MdEP Optionen
-mabsdiff
Aktiviert den "abs"-Befehl, der die absolute Differenz zwischen zwei Registern ist.
-Mall-Opts
Aktiviert alle optionalen Befehle ---Mittelung, Multiplikation, Division, Bitoperationen,
führende Null, absolute Differenz, Min/Max, Clip und Sättigung.
-durchschnittlich
Aktiviert den "ave"-Befehl, der den Durchschnitt von zwei Registern berechnet.
-mbased=n
Größenvariablen n Bytes oder kleiner werden standardmäßig im Abschnitt ".based" platziert.
Basierende Variablen verwenden das $tp-Register als Basisregister, und es gibt eine Begrenzung von 128 Byte
zum Abschnitt ".based".
-mbitops
Aktiviert die Bitoperationsanweisungen ---Bittest ("btstm"), set ("bsetm"), clear
("bclrm"), invertieren ("bnotm") und test-and-set ("tas").
-mc=Name
Wählt aus, in welchem Abschnitt konstante Daten platziert werden. Name könnte sein winzig, in der Nähe von, oder auch weit.
-McLip
Aktiviert die Anweisung "clip". Beachten Sie, dass -McLip ist nicht nützlich, es sei denn, Sie auch
die -mminmax.
-mconfig=Name
Wählt eine der integrierten Kernkonfigurationen aus. Jeder MeP-Chip hat einen oder mehrere
Module darin; jedes Modul verfügt über eine Kern-CPU und eine Vielzahl von Coprozessoren, optional
Anleitungen und Peripheriegeräte. Das Tool "MeP-Integrator", das nicht Bestandteil von GCC ist, bietet
diese Konfigurationen über diese Option; Die Verwendung dieser Option ist die gleiche wie die Verwendung von all
die entsprechenden Befehlszeilenoptionen. Die Standardkonfiguration ist Standard.
-mcop
Aktiviert die Coprozessor-Anweisungen. Standardmäßig ist dies ein 32-Bit-Coprozessor. Notiz
dass der Coprozessor normalerweise über die -mconfig= .
-mcop32
Aktiviert die Anweisungen des 32-Bit-Coprozessors.
-mcop64
Aktiviert die Anweisungen des 64-Bit-Coprozessors.
-mivc2
Aktiviert die IVC2-Planung. IVC2 ist ein 64-Bit-VLIW-Coprozessor.
-mdc
Bewirkt, dass konstante Variablen im Abschnitt ".near" platziert werden.
-mdiv
Aktiviert die Anweisungen "div" und "divu".
-meb
Big-Endian-Code generieren.
-mel
Generieren Sie Little-Endian-Code.
-mio-flüchtig
Teilt dem Compiler mit, dass jede Variable, die mit dem Attribut "io" gekennzeichnet ist,
als volatil angesehen.
-ml Bewirkt, dass Variablen standardmäßig dem Abschnitt ".far" zugewiesen werden.
-mleadz
Aktiviert die Anweisung "leadz" (führende Null).
-mm Bewirkt, dass Variablen standardmäßig dem Abschnitt ".near" zugewiesen werden.
-mminmax
Aktiviert die Anweisungen "min" und "max".
-mmult
Aktiviert die Multiplikations- und Multiplikations-Akkumulations-Anweisungen.
-mno-opts
Deaktiviert alle optionalen Anweisungen, die durch . aktiviert wurden -Mall-Opts.
-mwiederholen
Aktiviert die Befehle "repeat" und "erepeat", die für Looping mit geringem Overhead verwendet werden.
-Frau Bewirkt, dass alle Variablen standardmäßig den Abschnitt ".tiny" verwenden. Beachten Sie, dass es a
65536-Byte-Grenze für diesen Abschnitt. Zugriffe auf diese Variablen verwenden die %gp-Basis
registrieren.
-msatur
Aktiviert die Sättigungsanweisungen. Beachten Sie, dass der Compiler dies derzeit nicht tut
diese selbst generieren, diese Option ist jedoch aus Gründen der Kompatibilität mit anderen Tools enthalten.
wie "als".
-msdram
Verknüpfen Sie die SDRAM-basierte Laufzeit anstelle der standardmäßigen ROM-basierten Laufzeit.
-msim
Verknüpfen Sie die Laufzeitbibliotheken des Simulators.
-msimnovec
Verknüpfen Sie die Simulator-Laufzeitbibliotheken, ausgenommen die integrierte Unterstützung für Zurücksetzen und
Ausnahmevektoren und -tabellen.
-mtf
Bewirkt, dass alle Funktionen standardmäßig auf den Abschnitt ".far" zurückgesetzt werden. Ohne diese Option Funktionen
Standardmäßig wird der Abschnitt ".near" verwendet.
-mtiny=n
Variablen, die n Bytes oder kleiner werden dem Abschnitt ".tiny" zugewiesen. Diese
Variablen verwenden das $gp-Basisregister. Der Standardwert für diese Option ist 4, aber beachten Sie, dass
Der Abschnitt ".tiny" ist auf 65536 Byte beschränkt.
MicroBlaze Optionen
-msoft-float
Verwenden Sie die Softwareemulation für Gleitkomma (Standard).
-mhard-float
Verwenden Sie Hardware-Gleitkommaanweisungen.
-mmemcpy
Blockbewegungen nicht optimieren, sondern "memcpy" verwenden.
-mno-clearbss
Diese Option ist veraltet. Verwenden -fno-null-initialisiert-in-bss stattdessen.
-mcpu=CPU-Typ
Verwenden Sie die Funktionen und den Zeitplancode für die angegebene CPU. Unterstützte Werte sind in der
Format vX.YY.Z, Wobei X ist eine Hauptversion, YY ist die Nebenversion, und Z is
Kompatibilitätscode. Beispielwerte sind v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.
-mxl-soft-mul
Software-Multiplikationsemulation verwenden (Standard).
-mxl-soft-div
Verwenden Sie die Softwareemulation für Divisionen (Standard).
-mxl-Barrel-Shift
Verwenden Sie den Hardware-Barrel-Shifter.
-mxl-muster-vergleichen
Verwenden Sie die Anweisungen zum Mustervergleich.
-mklein-teilt
Verwenden Sie die Tabellen-Lookup-Optimierung für kleine vorzeichenbehaftete Integer-Divisionen.
-mxl-stack-check
Diese Option ist veraltet. Verwenden -fstack-check stattdessen.
-mxl-gp-opt
Verwenden Sie GP-relative ".sdata"/".sbss"-Abschnitte.
-mxl-multiplizieren-hoch
Verwenden Sie Multiply High-Anweisungen für den hohen Teil von 32x32 multiplizieren.
-mxl-float-convert
Verwenden Sie Hardware-Gleitkomma-Konvertierungsanweisungen.
-mxl-float-sqrt
Verwenden Sie den Hardware-Fließkomma-Quadratwurzelbefehl.
-mbig-endian
Generieren Sie Code für ein Big-Endian-Ziel.
-mlittle-endian
Generieren Sie Code für ein Little-Endian-Ziel.
-mxl-nachbestellen
Verwenden Sie Neuordnungsanweisungen (Swap und Byte umgekehrtes Laden/Speichern).
-mxl-modus-App-Modell
Anwendungsmodell auswählen App-Modell. Gültige Modelle sind
ausführbar
normale ausführbare Datei (Standard), verwendet Startcode crt0.o.
xmdstub
zur Verwendung mit Xilinx Microprocessor Debugger (XMD)-basierter Software intrusives Debugging
Agent namens xmdstub. Dies verwendet Startdatei crt1.o und setzt die Startadresse von
das Programm auf 0x800.
bootstrap
für Anwendungen, die mit einem Bootloader geladen werden. Dieses Modell verwendet Startdatei
crt2.o die keinen Prozessor-Reset-Vektor-Handler enthält. Das ist geeignet
um die Kontrolle bei einem Prozessor-Reset auf den Bootloader zu übertragen, anstatt den
Anwendung.
Novoren
für Anwendungen, die keinen der MicroBlaze-Vektoren benötigen. Diese Option
kann für Anwendungen nützlich sein, die innerhalb einer Überwachungsanwendung ausgeführt werden. Dieses Model
verwendet crt3.o als Startdatei.
Option -xl-modus-App-Modell ist ein veralteter Alias für -mxl-modus-App-Modell.
MIPS Optionen
-EB Big-Endian-Code generieren.
-DER Generieren Sie Little-Endian-Code. Dies ist die Standardeinstellung für mips*el-*-* Konfigurationen.
-marsch=Bogen
Generieren Sie Code, der weiter ausgeführt wird Bogen, der der Name eines generischen MIPS ISA sein kann, oder der
Name eines bestimmten Prozessors. Die ISA-Namen sind: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips32r3, mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5
und mips64r6. Die Prozessornamen sind: 4kc, 4km, 4kp, 4ksc, 4kec, 4km, 4behalten, 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,
longson2e, longson2f, longson3a, m4k, m14k, m14kc, m14ke, m14kec, Okteon, Okteon+,
Octeon2, Octeon3, 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 und xlpdem „Vermischten Geschmack“. Seine
besonderer Wert von-abi wählt die am besten kompatible Architektur für das ausgewählte ABI
(das ist, mips1 für 32-Bit-ABIs und mips3 für 64-Bit-ABIs).
Die native Linux/GNU-Toolchain unterstützt auch den Wert nativen, die die besten auswählt
Architekturoption für den Hostprozessor. -marsch=einheimisch hat keine Auswirkung, wenn GCC dies tut
den Prozessor nicht erkennen.
In Prozessornamen ein Finale 000 kann als abgekürzt werden k (zum Beispiel, -marsch=r2k).
Präfixe sind optional und vr darf geschrieben werden r.
Namen des Formulars nf2_1 beziehen sich auf Prozessoren mit FPUs, die mit der halben Taktrate des
Kern, Namen der Form nf1_1 beziehen sich auf Prozessoren mit FPUs, die mit der gleichen Rate getaktet sind
als Kern und Namen der Form nf3_2 beziehen sich auf Prozessoren mit FPUs, die ein Verhältnis getaktet haben
von 3:2 in Bezug auf den Kern. Aus Kompatibilitätsgründen, nf wird akzeptiert als
synonym für nf2_1 während nx und bfx werden als Synonyme für . akzeptiert nf1_1.
GCC definiert zwei Makros basierend auf dem Wert dieser Option. Die erste ist "_MIPS_ARCH",
was den Namen der Zielarchitektur als String angibt. Die zweite hat die Form
"_MIPS_ARCH_foo", Wobei foo ist der großgeschriebene Wert von "_MIPS_ARCH". Zum Beispiel,
-marsch=r2000 setzt "_MIPS_ARCH" auf "r2000" und definiert das Makro "_MIPS_ARCH_R2000".
Beachten Sie, dass das Makro "_MIPS_ARCH" die oben angegebenen Prozessornamen verwendet. In anderen
Wörter, es hat das vollständige Präfix und wird nicht abgekürzt 000 as k. Im Falle des von-
abi, benennt das Makro die aufgelöste Architektur (entweder "mips1" oder "mips3"). Es nennt
die Standardarchitektur, wenn nein -März Option gegeben ist.
-mtune=Bogen
Optimieren für Bogen. Unter anderem steuert diese Option die Art und Weise, wie Anweisungen sind
geplant, und die wahrgenommenen Kosten der arithmetischen Operationen. Die Liste der Bogen Werte
ist das gleiche wie für -März.
Wenn diese Option nicht verwendet wird, optimiert GCC für den durch . angegebenen Prozessor -März. Durch
Verwendung von -März und -munt zusammen ist es möglich, Code zu generieren, der auf einem
Prozessorfamilie, sondern optimieren Sie den Code für ein bestimmtes Mitglied dieser Familie.
-munt definiert die Makros "_MIPS_TUNE" und "_MIPS_TUNE_foo", die gleich arbeiten
Weg wie die -März die oben beschriebenen.
-Mips1
Gleichwertig -marsch=mips1.
-Mips2
Gleichwertig -marsch=mips2.
-Mips3
Gleichwertig -marsch=mips3.
-Mips4
Gleichwertig -marsch=mips4.
-Mips32
Gleichwertig -marsch=mips32.
-mips32r3
Gleichwertig -march=mips32r3.
-mips32r5
Gleichwertig -march=mips32r5.
-mips32r6
Gleichwertig -march=mips32r6.
-Mips64
Gleichwertig -marsch=mips64.
-mips64r2
Gleichwertig -march=mips64r2.
-mips64r3
Gleichwertig -march=mips64r3.
-mips64r5
Gleichwertig -march=mips64r5.
-mips64r6
Gleichwertig -march=mips64r6.
-Mips16
-mno-mips16
Generieren (nicht generieren) MIPS16-Code. Wenn GCC auf MIPS32 oder MIPS64 abzielt
Architektur verwendet es die MIPS16e ASE.
Die MIPS16-Codegenerierung kann auch funktionsbezogen gesteuert werden über
"mips16"- und "nomips16"-Attribute.
-mflip-mips16
Generieren Sie MIPS16-Code für abwechselnde Funktionen. Diese Option ist für die Regression vorgesehen
Testen von gemischter MIPS16/Nicht-MIPS16-Codegenerierung und ist nicht für gewöhnliche
beim Kompilieren von Benutzercode verwenden.
-minterlink-komprimiert
-mno-interlink-komprimiert
Erfordern (nicht erfordern), dass Code, der die standardmäßige (unkomprimierte) MIPS-ISA verwendet,
kompatibel mit MIPS16- und microMIPS-Code und umgekehrt.
Code, der die Standard-ISA-Codierung verwendet, kann beispielsweise nicht direkt zu MIPS16 oder springen
microMIPS-Code; es muss entweder einen Aufruf oder einen indirekten Sprung verwenden. -minterlink-komprimiert
deaktiviert daher direkte Sprünge, es sei denn, GCC weiß, dass das Ziel des Sprungs nicht ist
komprimiert.
-minterlink-mips16
-mno-interlink-mips16
Aliasse von -minterlink-komprimiert und -mno-interlink-komprimiert. Diese Optionen
älter als die microMIPS ASE und werden aus Gründen der Abwärtskompatibilität beibehalten.
-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Generieren Sie Code für die angegebene ABI.
Beachten Sie, dass EABI eine 32-Bit- und eine 64-Bit-Variante hat. GCC generiert normalerweise 64-Bit
Code, wenn Sie eine 64-Bit-Architektur auswählen, aber Sie können verwenden -mgp32 um 32-Bit-Code zu erhalten
stattdessen.
Informationen zum O64 ABI finden Sie unterhttp://gcc.gnu.org/projects/mipso64-abi.html>.
GCC unterstützt eine Variante des o32 ABI, bei der Gleitkommaregister eher 64 sind
als 32 Bit breit. Sie können diese Kombination mit auswählen -mabi=32 -mfp64. Dieses ABI
verlässt sich auf die Anweisungen "mthc1" und "mfhc1" und wird daher nur unterstützt für
MIPS32R2-, MIPS32R3- und MIPS32R5-Prozessoren.
Die Registerzuweisungen für Argumente und Rückgabewerte bleiben gleich, aber jeweils
Skalarwert wird in einem einzigen 64-Bit-Register anstatt in einem Paar von 32-Bit-
registriert. Zum Beispiel werden skalare Gleitkommawerte zurückgegeben in $f0 nur, nicht a
$f0/$f1 Paar. Der Satz der aufrufgespeicherten Register bleibt auch insofern gleich, als die gerade
nummerierte Double-Precision-Register werden gespeichert.
Zwei weitere Varianten des o32 ABI werden unterstützt, um einen Übergang von
32-Bit- bis 64-Bit-Register. Dies sind FPXX (-mfpxx) und FP64A (-mfp64
-mno-ungerade-spreg). Die FPXX-Erweiterung schreibt vor, dass der gesamte Code korrekt ausgeführt werden muss
bei Ausführung mit 32-Bit- oder 64-Bit-Registern. Der Code kann mit beiden verknüpft werden
FP32 oder FP64, aber nicht beides. Die FP64A-Erweiterung ähnelt der FP64-Erweiterung, aber
verbietet die Verwendung von ungeradzahligen Registern mit einfacher Genauigkeit. Dies kann verwendet werden in
in Verbindung mit dem "FRE"-Modus von FPUs in MIPS32R5-Prozessoren und ermöglicht sowohl FP32
und FP64A-Code zu verknüpfen und im selben Prozess auszuführen, ohne die FPU-Modi zu ändern.
-mabicalls
-mno-abicals
Generieren (nicht generieren) von Code, der für dynamische Objekte im SVR4-Stil geeignet ist.
-mabicalls ist die Standardeinstellung für SVR4-basierte Systeme.
-mshared
-mno-geteilt
Generieren (nicht generieren) von Code, der vollständig positionsunabhängig ist und der
daher in gemeinsam genutzte Bibliotheken eingebunden werden. Diese Option betrifft nur -mabicalls.
Alle -mabicalls Code war traditionell positionsunabhängig, unabhängig von Optionen
Gefällt mir -fPIC und -fpic. Als Erweiterung erlaubt die GNU-Toolchain jedoch ausführbare Dateien
absolute Zugriffe für lokal bindende Symbole zu verwenden. Es kann auch kürzere GP verwenden
Initialisierungssequenzen und generieren direkte Aufrufe lokal definierter Funktionen. Dies
Modus wird ausgewählt durch -mno-geteilt.
-mno-geteilt hängt von binutils 2.16 oder höher ab und generiert Objekte, die nur sein können
durch den GNU-Linker verlinkt. Die Option hat jedoch keinen Einfluss auf den ABI des Finales
ausführbar; es betrifft nur die ABI von verschiebbaren Objekten. Verwenden von -mno-geteilt
macht ausführbare Dateien im Allgemeinen kleiner und schneller.
-mshared ist die Vorgabe.
-mplt
-mno-plt
Angenommen (nicht angenommen), dass die statischen und dynamischen Linker PLTs unterstützen und kopieren
Umzüge. Diese Option betrifft nur -mno-geteilt -mabicalls. Für das n64 ABI ist dies
Option hat keine Wirkung ohne -msym32.
Sie können -mplt die Standardeinstellung durch Konfigurieren von GCC mit --mit-mips-plt. Der Standard
is -mno-plt Andernfalls.
-mxgot
-mno-xgot
Heben Sie die üblichen Beschränkungen der Größe der globalen Offset-Tabelle auf (nicht aufheben).
GCC verwendet normalerweise einen einzelnen Befehl, um Werte aus dem GOT zu laden. Während dies ist
relativ effizient, es funktioniert nur, wenn die GOT kleiner als etwa 64k ist. Irgendetwas
größer führt dazu, dass der Linker einen Fehler meldet, wie zum Beispiel:
Umzug passend gekürzt: R_MIPS_GOT16 foobar
In diesem Fall sollten Sie Ihren Code mit neu kompilieren -mxgot. Das funktioniert mit sehr
große GOTs, obwohl der Code auch weniger effizient ist, da er drei benötigt
Anweisungen zum Abrufen des Werts eines globalen Symbols.
Beachten Sie, dass einige Linker mehrere GOTs erstellen können. Wenn Sie einen solchen Linker haben,
sollte nur brauchen -mxgot wenn eine einzelne Objektdatei auf mehr als 64k zugreift
im Wert von GOT-Einträgen. Sehr wenige tun.
Diese Optionen haben keine Wirkung, es sei denn, GCC generiert positionsunabhängigen Code.
-mgp32
Angenommen, Universalregister sind 32 Bit breit.
-mgp64
Angenommen, Universalregister sind 64 Bit breit.
-mfp32
Angenommen, Gleitkommaregister sind 32 Bit breit.
-mfp64
Angenommen, Gleitkommaregister sind 64 Bit breit.
-mfpxx
Nehmen Sie nicht die Breite von Gleitkommaregistern an.
-mhard-float
Verwenden Sie Gleitkomma-Koprozessoranweisungen.
-msoft-float
Verwenden Sie keine Gleitkomma-Koprozessoranweisungen. Gleitkommazahlen implementieren
Berechnungen stattdessen mit Bibliotheksaufrufen.
-mno-float
Gleichwertig -msoft-float, versichert aber zusätzlich, dass das zu kompilierende Programm
führt keine Gleitkommaoperationen aus. Diese Option wird derzeit unterstützt
nur bei einigen Bare-Metal-MIPS-Konfigurationen, bei denen ein spezieller Satz von
Bibliotheken, denen jegliche Gleitkomma-Unterstützung fehlt (einschließlich beispielsweise der Gleitkomma-
Punkt "printf"-Formate). Wenn Code mit kompiliert wurde -mno-float enthält versehentlich
Gleitkommaoperationen, ist es wahrscheinlich, dass ein Link-Time- oder Run-Time-Fehler erleidet.
-msingle-float
Angenommen, der Gleitkomma-Coprozessor unterstützt nur Operationen mit einfacher Genauigkeit.
-mdouble-float
Angenommen, der Gleitkomma-Koprozessor unterstützt Operationen mit doppelter Genauigkeit. Dies
ist die Vorgabe.
-modd-spreg
-mno-ungerade-spreg
Aktivieren Sie die Verwendung von ungeradzahligen Gleitkommaregistern mit einfacher Genauigkeit für den o32
ABI. Dies ist die Standardeinstellung für Prozessoren, von denen bekannt ist, dass sie diese Register unterstützen.
Bei Verwendung des o32 FPXX ABI, -mno-ungerade-spreg ist standardmäßig eingestellt.
-mabs=2008
-mabs=vermächtnis
Diese Optionen steuern die Behandlung der speziellen Not-a-Number (NaN) IEEE 754
Gleitkommadaten mit der "abs.fmt" und "neg.fmt" Maschinenanweisungen.
Standardmäßig oder wann -mabs=vermächtnis verwendet wird, ist die Legacy-Behandlung ausgewählt. In diesem
Falls diese Anweisungen als arithmetisch angesehen und bei korrekter Bedienung vermieden werden
ist erforderlich und der Eingabeoperand könnte ein NaN sein. Eine längere Abfolge von Anweisungen
die das Vorzeichenbit des Gleitkomma-Datums manuell manipulieren, wird stattdessen verwendet, es sei denn
-nur-endlich-mathematik Option wurde auch angegeben.
Die -mabs=2008 Option wählt die IEEE 754-2008-Behandlung. In diesem Fall diese
Anweisungen gelten als nicht-arithmetisch und funktionieren daher insgesamt richtig
Fälle, einschließlich insbesondere, wenn der Eingabeoperand ein NaN ist. Diese Anleitung
werden daher immer für die jeweiligen Operationen verwendet.
-mnan=2008
-mnan=Vermächtnis
Diese Optionen steuern die Kodierung der speziellen Not-a-Number (NaN) IEEE 754
Gleitkommadaten.
Die -mnan=Vermächtnis Option wählt die Legacy-Codierung aus. In diesem Fall ruhige NaNs (qNaNs)
werden dadurch gekennzeichnet, dass das erste Bit ihres nachgestellten Signifikandenfeldes 0 ist, wohingegen
Signalisierungs-NaNs (sNaNs) werden durch das erste Bit ihres nachgestellten Signifikanten bezeichnet
Feld ist 1.
Die -mnan=2008 Option wählt die IEEE 754-2008-Codierung aus. In diesem Fall sind qNaNs
gekennzeichnet durch das erste Bit ihres nachgestellten Signifikandenfeldes 1, während sNaNs
werden dadurch gekennzeichnet, dass das erste Bit ihres nachgestellten Signifikandenfelds 0 ist.
Die Standardeinstellung ist -mnan=Vermächtnis es sei denn, GCC wurde mit konfiguriert --mit-nan=2008.
-mlsc
-mno-llsc
Verwenden (nicht verwenden) ll, sc und synchronisieren Anweisungen zur Implementierung des eingebauten Atomspeichers
Funktionen. Wenn keine Option angegeben ist, verwendet GCC die Anweisungen, wenn das Ziel
Architektur unterstützt sie.
-mlsc ist sinnvoll, wenn die Laufzeitumgebung die Anweisungen emulieren kann und -mno-llsc
kann beim Kompilieren für Nicht-Standard-ISAs nützlich sein. Sie können eine der beiden Optionen auswählen
Standard durch Konfigurieren von GCC mit --mit-llsc und --ohne-llsc beziehungsweise.
--mit-llsc ist die Standardeinstellung für einige Konfigurationen; siehe Installationsdokumentation
.
-mdsp
-mno-dsp
Verwenden (nicht verwenden) Revision 1 der MIPS DSP ASE.
Diese Option definiert das Präprozessormakro "__mips_dsp". Es definiert auch
"__mips_dsp_rev" auf 1.
-mdspr2
-mno-dspr2
Verwenden (nicht verwenden) Revision 2 der MIPS DSP ASE.
Diese Option definiert die Präprozessormakros "__mips_dsp" und "__mips_dspr2". Es
definiert auch "__mips_dsp_rev" auf 2.
-msmartmips
-mno-smartmips
Verwenden (nicht verwenden) Sie die MIPS SmartMIPS ASE.
-beschädigt-single
-mno-gepaart-single
Verwenden (nicht verwenden) paarweise einzelne Gleitkommabefehle.
Diese Option erfordert, dass die Hardware-Gleitkommaunterstützung aktiviert ist.
-mdmx
-mno-mdmx
Verwenden Sie (nicht verwenden) die Anweisungen zur MIPS Digital Media Extension. Diese Option kann nur sein
Wird beim Generieren von 64-Bit-Code verwendet und erfordert Hardware-Gleitkomma-Unterstützung
aktiviert.
-mips3d
-mno-mips3d
Verwenden Sie (nicht verwenden) die MIPS-3D ASE. Die Option -mips3d impliziert -beschädigt-single.
-mmicromips
-mno-micromips
Generieren (nicht generieren) microMIPS-Code.
Die MicroMIPS-Codegenerierung kann auch funktionsbezogen gesteuert werden über
"micromips"- und "nomicromips"-Attribute.
-MMT
-mno-mt
Verwenden (nicht verwenden) MT-Multithreading-Anweisungen.
-mmcu
-mno-mcu
Verwenden Sie (nicht verwenden) die MIPS MCU ASE-Anweisungen.
-meva
-mno-eva
Verwenden Sie (nicht verwenden) die Anweisungen zur erweiterten virtuellen MIPS-Adressierung.
-mvirt
-mno-virt
Verwenden Sie (nicht verwenden) die anwendungsspezifischen Anweisungen für die MIPS-Virtualisierung.
-mxpa
-mno-xpa
Verwenden (nicht verwenden) Sie die Anweisungen für MIPS eXtended Physical Address (XPA).
-mlong64
Erzwingen Sie, dass "lange" Typen 64 Bit breit sind. Sehen -mlong32 zur Erläuterung der Vorgabe
und die Art und Weise, wie die Zeigergröße bestimmt wird.
-mlong32
Erzwingen Sie, dass "long", "int" und Zeigertypen 32 Bit breit sind.
Die Standardgröße von "int", "long" und Pointern hängt vom ABI ab. All die
unterstützte ABIs verwenden 32-Bit-"int"s. Die n64-ABI verwendet 64-Bit "lange" s, ebenso wie die 64-Bit
EABI; die anderen verwenden 32-Bit "lange" s. Zeiger haben die gleiche Größe wie "lange" oder die
gleiche Größe wie Integer-Register, je nachdem, welcher Wert kleiner ist.
-msym32
-mno-sym32
Angenommen (nicht angenommen), dass alle Symbole 32-Bit-Werte haben, unabhängig von der ausgewählten
ABI. Diese Option ist nützlich in Kombination mit -mabi=64 und -mno-abicals weil es
ermöglicht es GCC, kürzere und schnellere Verweise auf symbolische Adressen zu generieren.
-G num
Setzen Sie Definitionen von extern sichtbaren Daten in einen kleinen Datenabschnitt, wenn diese Daten no sind
größer als num Bytes. GCC kann dann effizientere Zugriffe auf die Daten generieren; sehen
-mgpopt .
Der Standard -G Die Option hängt von der Konfiguration ab.
-mlocal-sdata
-mno-local-sdata
Verlängern (nicht verlängern) die -G Verhalten auch gegenüber lokalen Daten, z. B. gegenüber statischen Variablen
in C. -mlocal-sdata ist die Standardeinstellung für alle Konfigurationen.
Wenn sich der Linker beschwert, dass eine Anwendung zu viele kleine Daten verwendet, könnten Sie
möchte versuchen, die weniger leistungskritischen Teile mit neu aufzubauen -mno-local-sdata. Sie
Vielleicht möchten Sie auch große Bibliotheken damit erstellen -mno-local-sdata, damit die Bibliotheken
mehr Platz für das Hauptprogramm lassen.
-mextern-sdata
-Mno-extern-sdata
Nehmen Sie an (nicht annehmen), dass sich extern definierte Daten in einem kleinen Datenabschnitt befinden, wenn die
Größe dieser Daten liegt innerhalb der -G Grenze. -mextern-sdata ist die Standardeinstellung für alle
Konfigurationen.
Wenn Sie ein Modul kompilieren Weg mit -mextern-sdata -G num -mgpopt und Weg Referenzen a
Variable Var das ist nicht größer als num Bytes, müssen Sie sicherstellen, dass Var ist plaziert
in einem kleinen Datenbereich. Wenn Var von einem anderen Modul definiert wird, müssen Sie entweder kompilieren
dieses Modul mit einem ausreichend hohen -G das Attribut "Abschnitt" festlegen oder anhängen Var's
Definition. Wenn Var üblich ist, müssen Sie die Anwendung mit einem ausreichend hohen -G
Einstellung.
Der einfachste Weg, diese Einschränkungen zu erfüllen, besteht darin, jedes Modul zu kompilieren und zu verknüpfen
mit der gleichen -G Möglichkeit. Möglicherweise möchten Sie jedoch eine Bibliothek erstellen, die
mehrere verschiedene kleine Datenlimits. Sie können dies tun, indem Sie die Bibliothek mit kompilieren
am höchsten unterstützt -G einstellen und zusätzlich verwenden -Mno-extern-sdata zu stoppen
Bibliothek davon ab, Annahmen über extern definierte Daten zu treffen.
-mgpopt
-Mno-gpopt
Verwenden (nicht verwenden) GP-relative Zugriffe für Symbole, von denen bekannt ist, dass sie in kleinen Daten enthalten sind
Sektion; sehen -G, -mlocal-sdata und -mextern-sdata. -mgpopt ist die Standardeinstellung für alle
Konfigurationen.
-Mno-gpopt ist nützlich für Fälle, in denen das $gp-Register möglicherweise nicht den Wert von enthält
"_gp". Zum Beispiel, wenn der Code Teil einer Bibliothek ist, die in einem Boot verwendet werden könnte
monitor übergeben Programme, die Boot-Monitor-Routinen aufrufen, einen unbekannten Wert in $gp. (In
In solchen Situationen wird der Bootmonitor selbst normalerweise mit kompiliert - G0.)
-Mno-gpopt impliziert -mno-local-sdata und -Mno-extern-sdata.
-eingebettete-Daten
-mno-eingebettete-Daten
Weisen Sie Variablen nach Möglichkeit zuerst dem schreibgeschützten Datenbereich zu, dann als nächstes im
kleiner Datenabschnitt wenn möglich, sonst in Daten. Dies ergibt einen etwas langsameren Code
als die Standardeinstellung, verringert jedoch den für die Ausführung erforderlichen Arbeitsspeicher und kann daher
für einige eingebettete Systeme bevorzugt werden.
-muninit-const-in-rodata
-mno-unit-const-in-rodata
Fügen Sie nicht initialisierte "const"-Variablen in den schreibgeschützten Datenabschnitt ein. Diese Option ist
nur sinnvoll in Verbindung mit -eingebettete-Daten.
-mcode-lesbar=Einstellung
Geben Sie an, ob GCC Code generieren darf, der aus ausführbaren Abschnitten liest. Es gibt
drei mögliche Einstellungen:
-mcode-lesbar=ja
Anweisungen können frei auf ausführbare Abschnitte zugreifen. Dies ist die Standardeinstellung.
-mcode-lesbar=pcrel
MIPS16 PC-relative Ladebefehle können auf ausführbare Abschnitte zugreifen, aber andere
Anweisungen dürfen dies nicht tun. Diese Option ist bei 4KSc- und 4KSd-Prozessoren nützlich
wenn die Code-TLBs das Read-Inhibit-Bit gesetzt haben. Es ist auch auf Prozessoren nützlich
die so konfiguriert werden können, dass sie eine duale Befehls-/Daten-SRAM-Schnittstelle haben und die,
wie beim M4K, leiten PC-bezogene Lasten automatisch in den Befehls-RAM um.
-mcode-lesbar=nein
Anweisungen dürfen nicht auf ausführbare Abschnitte zugreifen. Diese Option kann nützlich sein bei
Ziele, die für eine duale Befehls-/Daten-SRAM-Schnittstelle konfiguriert sind, aber
die (im Gegensatz zum M4K) nicht automatisch PC-bezogene Lasten auf die
Befehls-RAM.
-msplit-Adressen
-mno-split-adressen
Aktivieren (deaktivieren) Sie die Verwendung der Assembler-Verlagerungsoperatoren "%hi()" und "%lo()". Dies
Option wurde ersetzt durch -mexplicit-relocs wird aber für rückwärts beibehalten
Kompatibilität.
-mexplicit-relocs
-mno-explicit-relocs
Verwenden Sie (nicht verwenden) Assembler-Verlagerungsoperatoren, wenn Sie mit symbolischen Adressen arbeiten.
Die Alternative, ausgewählt von -mno-explicit-relocs, ist stattdessen die Verwendung von Assembler-Makros.
-mexplicit-relocs ist die Standardeinstellung, wenn GCC so konfiguriert wurde, dass ein Assembler verwendet wird, der
unterstützt Umzugsunternehmen.
-mcheck-null-division
-mno-check-null-division
Trap (nicht Trap) bei ganzzahliger Division durch Null.
Die Standardeinstellung ist -mcheck-null-division.
-mdivide-fallen
-mdivide-breaks
MIPS-Systeme prüfen auf Division durch Null, indem sie entweder eine bedingte Falle oder a . erzeugen
Anweisung brechen. Die Verwendung von Traps führt zu kleinerem Code, wird jedoch nur auf MIPS unterstützt
II und später. Außerdem haben einige Versionen des Linux-Kernels einen Fehler, der Trap verhindert
vom Erzeugen des richtigen Signals ("SIGFPE"). Verwenden -mdivide-fallen bedingt zulassen
Fallen auf Architekturen, die sie unterstützen und -mdivide-breaks die Verwendung von erzwingen
geht kaputt.
Die Standardeinstellung ist normalerweise -mdivide-fallen, aber dies kann zur Konfigurationszeit überschrieben werden
Verwendung von --with-divide=Unterbrechungen. Prüfungen auf Division durch Null können mit . vollständig deaktiviert werden
-mno-check-null-division.
-mmemcpy
-Mno-memcpy
Erzwingen (nicht erzwingen) die Verwendung von "memcpy" für nicht-triviale Blockbewegungen. Die Standardeinstellung ist
-Mno-memcpy, wodurch GCC die meisten Kopien mit konstanter Größe inline einbinden kann.
-mlong-anrufe
-mno-lange-Anrufe
Deaktivieren (nicht deaktivieren) der Verwendung der Anweisung "jal". Aufruf von Funktionen mit "jal"
ist effizienter, erfordert jedoch, dass sich Anrufer und Angerufener in denselben 256 Megabyte befinden
Segment.
Diese Option hat keine Auswirkung auf den abicals-Code. Die Standardeinstellung ist -mno-lange-Anrufe.
-mmad
-mno-verrückt
Aktivieren (deaktivieren) Sie die Verwendung der Anweisungen "mad", "madu" und "mul", wie von den
R4650 ISA.
-mimadd
-mno-imadd
Aktivieren (deaktivieren) Sie die Verwendung der Integer-Befehle "madd" und "msub". Die Standardeinstellung ist
-mimadd auf Architekturen, die "madd" und "msub" unterstützen, mit Ausnahme des 74k
Architektur, bei der festgestellt wurde, dass sie langsameren Code generiert.
-verwirrt-wahnsinnig
-mno-fusion-madd
Aktivieren (deaktivieren) Sie die Verwendung der Gleitkomma-Multiply-Accumulate-Anweisungen, wenn sie
stehen zur Verfügung. Die Standardeinstellung ist -verwirrt-wahnsinnig.
Wenn auf der R8000-CPU Multiply-Accumulate-Befehle verwendet werden, wird die Zwischenstufe
Produkt wird mit unendlicher Genauigkeit berechnet und unterliegt nicht der FCSR Flush to
Null-Bit. Dies kann unter Umständen unerwünscht sein. Auf anderen Prozessoren ist die
Ergebnis ist numerisch identisch mit der äquivalenten Berechnung mit separater Multiplikation,
Addieren, Subtrahieren und Negieren von Anweisungen.
-nocpp
Weisen Sie den MIPS-Assembler an, seinen Präprozessor nicht über Benutzer-Assemblerdateien auszuführen (mit a
.s Suffix) beim Zusammenbauen.
-mfix-24k
-mno-fix-24k
Umgehen Sie die Errata 24K E48 (verlorene Daten in Geschäften während des Auffüllens). Die Problemumgehungen
werden vom Assembler und nicht von GCC implementiert.
-mfix-r4000
-mno-fix-r4000
Beheben Sie bestimmte R4000-CPU-Errata:
- Ein Doppelwort oder eine variable Verschiebung kann bei der Ausführung zu einem falschen Ergebnis führen
unmittelbar nach Beginn einer ganzzahligen Division.
- Ein Doppelwort oder eine variable Verschiebung kann zu einem falschen Ergebnis führen, wenn es ausgeführt wird, während
eine ganzzahlige Multiplikation läuft.
- Eine ganzzahlige Division kann zu einem falschen Ergebnis führen, wenn sie in einem Verzögerungsschlitz von a . gestartet wird
genommen Ast oder ein Sprung.
-mfix-r4400
-mno-fix-r4400
Beheben Sie bestimmte R4400-CPU-Errata:
- Ein Doppelwort oder eine variable Verschiebung kann bei der Ausführung zu einem falschen Ergebnis führen
unmittelbar nach Beginn einer ganzzahligen Division.
-mfix-r10000
-mno-fix-r10000
Umgehen Sie bestimmte R10000-Errata:
- "ll"/"sc"-Sequenzen verhalten sich bei Revisionen vor 3.0 möglicherweise nicht atomar. Sie können
Deadlock bei Revisionen 2.6 und früher.
Diese Option kann nur verwendet werden, wenn die Zielarchitektur Branch-likely unterstützt
Anweisungen. -mfix-r10000 ist die Standardeinstellung, wenn -marsch=r10000 wird genutzt; -mno-fix-r10000
ist ansonsten die Standardeinstellung.
-mfix-rm7000
-mno-fix-rm7000
Umgehen Sie die RM7000-Errata "dmult"/"dmultu". Die Workarounds werden implementiert von
der Assembler und nicht von GCC.
-mfix-vr4120
-Mno-fix-vr4120
Umgehen Sie bestimmte VR4120-Errata:
- "dmultu" liefert nicht immer das richtige Ergebnis.
- "div" und "ddiv" liefern nicht immer das richtige Ergebnis, wenn einer der Operanden
ist negativ.
Die Workarounds für die Division Errata basieren auf speziellen Funktionen in libgcc.a. Bei
vorhanden, werden diese Funktionen nur von den "mips64vr*-elf"-Konfigurationen bereitgestellt.
Andere VR4120-Errata erfordern das Einfügen einer NOP zwischen bestimmte Paare von
Anweisungen. Diese Errata werden vom Assembler verarbeitet, nicht von GCC selbst.
-mfix-vr4130
Umgehen Sie die VR4130 "mflo"/"mfhi" Errata. Die Workarounds werden von der
Assembler statt von GCC, obwohl GCC die Verwendung von "mflo" und "mfhi" vermeidet, wenn die
Stattdessen sind die VR4130-Anweisungen "macc", "macchi", "dmacc" und "dmacchi" verfügbar.
-Mfix-SB1
-mno-fix-sb1
Umgehen Sie bestimmte Errata des SB-1-CPU-Kerns. (Dieses Flag funktioniert derzeit rund um das SB-1
Revision 2 "F1" und "F2" Gleitkomma-Errata.)
-mr10k-cache-barriere=Einstellung
Geben Sie an, ob GCC Cache-Barrieren einfügen soll, um die Nebenwirkungen von . zu vermeiden
Spekulationen über R10K-Prozessoren.
Wie viele Prozessoren versucht der R10K, das Ergebnis einer bedingten . vorherzusagen
und führt spekulativ Befehle aus dem "genommenen" Zweig aus. Es später
bricht diese Anweisungen ab, wenn das vorhergesagte Ergebnis falsch ist. Beim R10K hingegen
selbst abgebrochene Anweisungen können Nebenwirkungen haben.
Dieses Problem betrifft nur Kernel-Speicher und, je nach System, Kernel-Ladevorgänge.
Als Beispiel kann ein spekulativ ausgeführter Speicher den Zielspeicher in den Cache laden
und markieren Sie die Cache-Zeile als schmutzig, auch wenn der Speicher selbst später abgebrochen wird. Wenn ein DMA
-Operation schreibt in denselben Speicherbereich, bevor die "schmutzige" Zeile geleert wird
zwischengespeicherte Daten überschreiben die DMA-ed-Daten. Eine vollständige Beschreibung finden Sie im R10K-Prozessorhandbuch
Beschreibung, einschließlich anderer potenzieller Probleme.
Eine Problemumgehung besteht darin, vor jedem Speicherzugriff, der
spekulativ ausgeführt werden und dies kann Nebenwirkungen haben, selbst wenn es abgebrochen wird.
-mr10k-cache-barriere=Einstellung steuert die Implementierung dieser Problemumgehung durch GCC. Es
geht davon aus, dass abgebrochene Zugriffe auf ein beliebiges Byte in den folgenden Regionen keine Seite haben
Effekte:
1. der vom Stapelrahmen der aktuellen Funktion belegte Speicher;
2. der von einem eingehenden Stapelargument belegte Speicher;
3. der von einem Objekt mit einer verbindungszeitkonstanten Adresse belegte Speicher.
Es liegt in der Verantwortung des Kernels sicherzustellen, dass spekulative Zugriffe auf diese Regionen
sind in der Tat sicher.
Wenn das Eingabeprogramm eine Funktionsdeklaration enthält wie:
leer foo (leer);
dann muss die Implementierung von "foo" die Ausführung von "j foo" und "jal foo" ermöglichen
spekulativ. GCC beachtet diese Einschränkung für Funktionen, die es selbst kompiliert. Es
erwartet, dass Nicht-GCC-Funktionen (wie handgeschriebener Assemblercode) dasselbe tun.
Die Option hat drei Formen:
-mr10k-cache-barrier=Ladespeicher
Fügen Sie eine Cache-Barriere vor einem Laden oder Speichern ein, der spekulativ ausgeführt werden könnte
und das kann Nebenwirkungen haben, selbst wenn es abgebrochen wird.
-mr10k-cache-barrier=speichern
Fügen Sie eine Cache-Barriere vor einem Speicher ein, der spekulativ ausgeführt werden könnte, und
das kann Nebenwirkungen haben, selbst wenn es abgebrochen wird.
-mr10k-cache-barrier=keine
Deaktivieren Sie das Einfügen von Cache-Barrieren. Dies ist die Standardeinstellung.
-mflush-func=Funkt
-mno-Spülfunkt
Gibt die Funktion an, die aufgerufen werden soll, um die I- und D-Caches zu leeren oder solche nicht aufzurufen
Funktion. Wenn die Funktion aufgerufen wird, muss sie dieselben Argumente annehmen wie die gemeinsame
"_flush_func", d. h. die Adresse des Speicherbereichs, für den der Cache gespeichert wird
Flushed, die Größe des Speicherbereichs und die Zahl 3 (um beide Caches zu leeren). Die
Der Standardwert hängt vom Ziel-GCC ab, für das GCC konfiguriert wurde, ist jedoch in der Regel entweder
"_flush_func" oder "__cpu_flush".
filialkosten=num
Legen Sie die Kosten für Filialen auf ungefähr fest num "einfache" Anleitung. Diese Kosten sind nur a
heuristisch und es kann nicht garantiert werden, dass über mehrere Releases hinweg konsistente Ergebnisse erzielt werden. Eine Null
cost wählt redundant den Standard aus, der auf dem -munt Einstellung.
-niederlassungswahrscheinlich
-mno-Filiale-wahrscheinlich
Aktivieren oder deaktivieren Sie die Verwendung von Branch Likely-Anweisungen, unabhängig von der Standardeinstellung für die
ausgewählte Architektur. Standardmäßig können Anweisungen mit wahrscheinlicher Verzweigung generiert werden, wenn
sie werden von der ausgewählten Architektur unterstützt. Eine Ausnahme gilt für MIPS32 und
MIPS64-Architekturen und Prozessoren, die diese Architekturen implementieren; für diejenigen,
Verzweigungswahrscheinliche Anweisungen werden standardmäßig nicht generiert, da MIPS32 und
MIPS64-Architekturen lehnen ihre Verwendung ausdrücklich ab.
-mfp-Ausnahmen
-mno-fp-Ausnahmen
Gibt an, ob FP-Ausnahmen aktiviert sind. Dies beeinflusst, wie FP-Anweisungen sind
für einige Prozessoren geplant. Standardmäßig sind FP-Ausnahmen aktiviert.
Zum Beispiel auf dem SB-1, wenn FP-Ausnahmen deaktiviert sind und wir 64-Bit ausgeben
Code, dann können wir beide FP-Pipes verwenden. Ansonsten können wir nur ein FP-Rohr verwenden.
-mvr4130-ausrichten
-mno-vr4130-ausrichten
Die VR4130-Pipeline ist bidirektional superskalar, kann aber nur zwei Befehle ausgeben
zusammen, wenn der erste 8-Byte-ausgerichtet ist. Wenn diese Option aktiviert ist, richtet sich GCC aus
Befehlspaare, von denen er denkt, dass sie parallel ausgeführt werden sollten.
Diese Option wirkt sich nur bei der Optimierung für den VR4130 aus. Es macht normalerweise Code
schneller, aber auf Kosten der Vergrößerung. Es ist standardmäßig aktiviert bei
Optimierungsstufe -O3.
-msynci
-mno-synci
Aktivieren (deaktivieren) Sie die Generierung von "synci"-Anweisungen auf Architekturen, die dies unterstützen.
Die "synci"-Anweisungen (falls aktiviert) werden generiert, wenn "__builtin___clear_cache"
zusammengestellt.
Diese Option ist standardmäßig auf -mno-synci, aber die Standardeinstellung kann durch Konfigurieren überschrieben werden
GCC mit --mit-synci.
Beim Kompilieren von Code für Einprozessorsysteme ist es im Allgemeinen sicher, "synci" zu verwenden.
Auf vielen Multi-Core-Systemen (SMP) macht es die Anweisung jedoch nicht ungültig.
Caches auf allen Kernen und kann zu undefiniertem Verhalten führen.
-mrelax-pic-calls
-mno-relax-pic-calls
Versuchen Sie, PIC-Aufrufe, die normalerweise über Register $25 abgesetzt werden, in Direktaufrufe umzuwandeln.
Dies ist nur möglich, wenn der Linker das Ziel zur Link-Zeit auflösen kann und wenn
das Ziel befindet sich in Reichweite für einen Direktruf.
-mrelax-pic-calls ist die Standardeinstellung, wenn GCC für die Verwendung eines Assemblers konfiguriert wurde und a
Linker, der die Assembly-Direktive ".reloc" unterstützt und -mexplicit-relocs in
Wirkung. Mit -mno-explicit-relocs, kann diese Optimierung durch die
Assembler und Linker allein ohne Hilfe des Compilers.
-mmcount-ra-adresse
-mno-mcount-ra-adresse
Code ausgeben (nicht ausgeben), der es "_mcount" ermöglicht, die Rückgabe der aufrufenden Funktion zu ändern
die Anschrift. Wenn diese Option aktiviert ist, erweitert diese Option die übliche "_mcount"-Oberfläche um eine neue
ra-Adresse Parameter, der den Typ "intptr_t *" hat und im Register $12 übergeben wird.
"_mcount" kann dann die Rücksendeadresse ändern, indem Sie beide der folgenden Schritte ausführen:
* Rückgabe der neuen Adresse in Register $31.
* Speichern der neuen Adresse in "*ra-Adresse"Wenn ra-Adresse ist nicht null.
Die Standardeinstellung ist -mno-mcount-ra-adresse.
Mmix Optionen
Diese Optionen sind für den MMIX definiert:
-mlibfuncs
-mno-libfuncs
Geben Sie an, dass intrinsische Bibliotheksfunktionen kompiliert werden, und übergeben Sie alle Werte in
Register, egal wie groß.
-Mepsilon
-mno-epsilon
Generieren Sie Gleitkomma-Vergleichsanweisungen, die in Bezug auf "rE" vergleichen
Epsilon-Register.
-Mabi = mmixware
-mabi=gnu
Generieren Sie Code, der Funktionsparameter und Rückgabewerte übergibt, die (im aufgerufenen
Funktion) werden als Register $0 und höher angesehen, im Gegensatz zu GNU ABI, das global . verwendet
registriert $231 und mehr.
-mzero-erweitern
-mno-zero-extend
Verwenden Sie beim Lesen von Daten aus dem Speicher mit einer Größe von weniger als 64 Bit (nicht verwenden)
Erweitern von Ladebefehlen standardmäßig anstelle von vorzeichenerweiternden.
-mknuthdiv
-mno-knuthdiv
Lassen Sie das Ergebnis einer Division, die einen Rest ergibt, das gleiche Vorzeichen wie der Divisor haben.
Mit der Standardeinstellung -mno-knuthdiv, das Vorzeichen des Restes folgt dem Vorzeichen des
Dividende. Beide Methoden sind rechnerisch gültig, letztere fast ausschließlich
benutzt.
-mtoplevel-symbole
-mno-toplevel-symbole
Voranstellen (nicht voranstellen) a : auf alle globalen Symbole, damit der Assemblercode verwendet werden kann
mit der Montagerichtlinie "PREFIX".
-melfe
Generieren Sie eine ausführbare Datei im ELF-Format anstelle des Standardformats mmo Format verwendet von
mmix Simulator.
-filiale-vorhersage
-mno-branch-predict
Verwenden (nicht verwenden) die Anweisungen für wahrscheinliche Verzweigungen, wenn statische Verzweigungsvorhersage
weist auf eine wahrscheinliche Verzweigung hin.
-mbase-Adressen
-mno-base-adressen
Generieren (nicht generieren) von Code, der verwendet Base Adressen. Verwenden einer Basisadresse
generiert automatisch eine Anfrage (wird vom Assembler und dem Linker verarbeitet) für a
Konstante, die in einem globalen Register eingerichtet werden soll. Das Register wird für eine oder mehrere Basen verwendet
Adressanforderungen im Bereich von 0 bis 255 aus dem im Register gehaltenen Wert. Die
führt im Allgemeinen zu einem kurzen und schnellen Code, aber die Anzahl der verschiedenen Datenelemente, die
angesprochen werden kann, ist begrenzt. Dies bedeutet, dass ein Programm, das viele statische Daten verwendet
kann erfordern -mno-base-adressen.
-msingle-exit
-mno-Single-Exit
Erzwingen (nicht erzwingen) von generiertem Code, dass er in jeder Funktion einen einzigen Austrittspunkt hat.
MN10300 Optionen
Diese -m Optionen sind für Matsushita MN10300 Architekturen definiert:
-Mult-Bug
Generieren Sie Code, um Fehler in den Multiplikationsanweisungen für die MN10300-Prozessoren zu vermeiden.
Dies ist der Standardwert.
-mno-multi-bug
Generieren Sie keinen Code, um Fehler in den Multiplikationsanweisungen für den MN10300 . zu vermeiden
Prozessoren.
-mam33
Generieren Sie Code mit den für den AM33-Prozessor spezifischen Funktionen.
-mno-am33
Generieren Sie keinen Code mit speziellen Funktionen des AM33-Prozessors. Dies ist das
default.
-mam33-2
Generieren Sie Code mit den für den AM33/2.0-Prozessor spezifischen Funktionen.
-mam34
Generieren Sie Code mit den für den AM34-Prozessor spezifischen Funktionen.
-mtune=CPU-Typ
Verwenden Sie beim Planen von Anweisungen die Timing-Eigenschaften des angegebenen CPU-Typs.
Der Zielprozessortyp wird dadurch nicht geändert. Der CPU-Typ muss einer der folgenden sein:
mn10300, am33, am33-2 or am34.
-mreturn-pointer-on-d0
Wenn Sie eine Funktion generieren, die einen Zeiger zurückgibt, geben Sie den Zeiger sowohl in "a0" als auch in . zurück
"d0". Andernfalls wird der Zeiger nur in "a0" zurückgegeben und versucht, solche aufzurufen
Funktionen ohne Prototyp führen zu Fehlern. Beachten Sie, dass diese Option aktiviert ist von
Ursprünglich; verwenden -mno-Rückgabezeiger-auf-d0 um es zu deaktivieren.
-mno-crt0
Verknüpfen Sie nicht in der C-Laufzeit-Initialisierungsobjektdatei.
-Entspann dich
Geben Sie dem Linker an, dass er einen Relaxationsoptimierungsdurchlauf an durchführen soll
Verzweigungen, Aufrufe und absolute Speicheradressen kürzen. Diese Option hat nur einen Effekt
bei Verwendung in der Befehlszeile für den letzten Linkschritt.
Diese Option macht das symbolische Debuggen unmöglich.
-mliw
Lassen Sie den Compiler generieren lang Anweisung Word Anweisungen, wenn das Ziel das ist
AM33 oder später. Dies ist die Standardeinstellung. Diese Option definiert das Präprozessor-Makro
"__LIW__".
-mnoliw
Lassen Sie den Compiler nicht generieren lang Anweisung Word Anweisungen. Diese Option
definiert das Präprozessormakro "__NO_LIW__".
-msetlb
Lassen Sie den Compiler die generieren SETLB und Lcc Anweisungen, wenn das Ziel das ist
AM33 oder später. Dies ist die Standardeinstellung. Diese Option definiert das Präprozessor-Makro
"__SETLB__".
-mnosetlb
Lassen Sie den Compiler nicht generieren SETLB or Lcc Anweisungen. Diese Option definiert
das Präprozessor-Makro "__NO_SETLB__".
Moxie Optionen
-meb
Big-Endian-Code generieren. Dies ist die Standardeinstellung für Moxie-*-* Konfigurationen.
-mel
Generieren Sie Little-Endian-Code.
-mmul.x
Generieren Sie mul.x- und umul.x-Anweisungen. Dies ist die Standardeinstellung für Moxiebox-*-*
Konfigurationen.
-mno-crt0
Verknüpfen Sie nicht in der C-Laufzeit-Initialisierungsobjektdatei.
MSP430 Optionen
Diese Optionen sind für den MSP430 definiert:
-masm-hex
Erzwingen Sie, dass die Assemblyausgabe immer Hex-Konstanten verwendet. Normalerweise sind solche Konstanten vorzeichenbehaftet
Dezimalstellen, aber diese Option ist für Testsuite- und/oder ästhetische Zwecke verfügbar.
-mmcu=
Wählen Sie die Ziel-MCU aus. Dies wird verwendet, um ein C-Präprozessorsymbol basierend auf zu erstellen
der MCU-Name, in Großbuchstaben umgewandelt und mit vor- und nachgestelltem __. Dies wiederum
wird von der verwendet msp430.h Header-Datei zur Auswahl eines MCU-spezifischen zusätzlichen Headers
Datei.
Die Option legt auch die zu verwendende ISA fest. Wenn der MCU-Name nur bekannt ist
unterstützt die 430 ISA, dann wird diese ausgewählt, andernfalls wird die 430X ISA ausgewählt. EIN
generischer MCU-Name von msp430 kann auch zur Auswahl des 430 ISA verwendet werden. Ähnlich die
Generika msp430x MCU-Name wählt den 430X ISA aus.
Außerdem wird der Linker-Befehlszeile ein MCU-spezifisches Linker-Skript hinzugefügt. Die
Der Name des Skripts ist der Name der MCU mit .ld angehängt. So spezifizieren -mmcu=xxx on
gcc Befehlszeile definiert das C-Präprozessorsymbol "__XXX__" und bewirkt, dass der Linker
nach einem Skript namens . suchen xxx.ld.
Diese Option wird auch an den Assembler weitergegeben.
-mcpu=
Gibt die zu verwendende ISA an. Akzeptierte Werte sind msp430, msp430x und msp430xv2. Dies
Option ist veraltet. Die -mmcu= Option sollte verwendet werden, um die ISA auszuwählen.
-msim
Link zu den Simulator-Laufzeitbibliotheken und dem Linker-Skript. Überschreibt alle Skripte, die
würde von der ausgewählt werden -mmcu= .
-mgroß
Verwenden Sie die Adressierung mit großem Modell (20-Bit-Zeiger, 32-Bit "size_t").
-mklein
Verwenden Sie Small-Model-Adressierung (16-Bit-Zeiger, 16-Bit "size_t").
-Entspann dich
Diese Option wird an den Assembler und Linker übergeben und ermöglicht dem Linker die Ausführung
bestimmte Optimierungen, die bis zum endgültigen Link nicht durchgeführt werden können.
mhwmult=
Beschreibt den vom Ziel mehrfach unterstützten Hardwaretyp. Akzeptierte Werte sind
keine für keine Hardware multiplizieren, 16bit für das ursprüngliche 16-Bit-nur Multiply unterstützt
von frühen MCUs. 32bit für die 16/32-Bit-Multiplikation, die von späteren MCUs unterstützt wird und f5serie
für die 16/32-Bit-Multiplikation, die von MCUs der F5-Serie unterstützt wird. Ein Wert von Auto kann auch
gegeben. Dies weist GCC an, die Hardware-Multiplikationsunterstützung basierend auf dem MCU-Namen abzuleiten
von der -mmcu Möglichkeit. Wenn nein -mmcu Option ist dann angegeben 32bit Hardware
Mehrfachunterstützung wird vorausgesetzt. Auto ist die Standardeinstellung.
Hardware-Multiplikationen werden normalerweise durch Aufrufen einer Bibliotheksroutine durchgeführt. Das spart
Leerzeichen im generierten Code. Beim Kompilieren von -O3 oder höher jedoch die Hardware
multiplikator wird inline aufgerufen. Dies sorgt für größeren, aber schnelleren Code.
Die Hardware-Multiply-Routinen deaktivieren Interrupts während der Ausführung und stellen die
vorherigen Unterbrechungszustand, wenn sie beendet sind. Dadurch können sie sicher im Innenbereich verwendet werden
Interrupt-Handler sowie im normalen Code.
-minrt
Ermöglichen Sie die Verwendung einer minimalen Laufzeitumgebung - keine statischen Initialisierer oder
Konstrukteure. Dies ist für Geräte mit eingeschränktem Speicher vorgesehen. Der Compiler enthält
spezielle Symbole in einigen Objekten, die dem Linker und der Laufzeit mitteilen, welche Codefragmente
erforderlich sind.
NDS32 Optionen
Diese Optionen sind für NDS32-Implementierungen definiert:
-mbig-endian
Generieren Sie Code im Big-Endian-Modus.
-mlittle-endian
Generieren Sie Code im Little-Endian-Modus.
-mreduced-regs
Verwenden Sie Register mit reduziertem Satz für die Registerzuordnung.
-mfull-regs
Verwenden Sie Full-Set-Register für die Registerzuordnung.
-mcmov
Generieren Sie bedingte Bewegungsanweisungen.
-mno-cmov
Generieren Sie keine bedingten Bewegungsanweisungen.
-mperf-ext
Generieren Sie Anweisungen zur Leistungserweiterung.
-mno-perf-ext
Generieren Sie keine Anweisungen zur Leistungserweiterung.
-mv3push
Generieren Sie v3 push25/pop25-Anweisungen.
-mno-v3push
Generieren Sie keine v3 push25/pop25-Anweisungen.
-m16-bit
Generieren Sie 16-Bit-Anweisungen.
-mno-16-bit
Generieren Sie keine 16-Bit-Anweisungen.
-misr-Vektorgröße=num
Geben Sie die Größe jedes Interrupt-Vektors an, die 4 oder 16 betragen muss.
-mcache-block-size=num
Geben Sie die Größe jedes Cache-Blocks an, die eine Potenz von 2 zwischen 4 und 512 sein muss.
-marsch=Bogen
Geben Sie den Namen der Zielarchitektur an.
-mcmodel=Code-Modell
Setzen Sie das Codemodell auf eines von
klein
Alle Datensegmente und schreibgeschützten Datensegmente müssen sich innerhalb eines Adressierungsraums von 512 KB befinden.
Das Textsegment muss sich innerhalb von 16 MB Adressraum befinden.
mittlere
Das Datensegment muss innerhalb von 512 KB sein, während das schreibgeschützte Datensegment sein kann
innerhalb von 4 GB Adressraum. Das Textsegment sollte noch innerhalb von 16 MB . sein
Adressraum an.
grosse
Alle Text- und Datensegmente können sich innerhalb von 4 GB Adressraum befinden.
-mctor-dtor
Konstruktor/Destruktor-Funktion aktivieren.
-Entspann dich
Leiten Sie den Linker, um Anweisungen zu entspannen.
Kinder II Optionen
Dies sind die Optionen, die für den Altera Nios II-Prozessor definiert sind.
-G num
Setzen Sie globale und statische Objekte kleiner oder gleich num Bytes in die kleinen Daten oder
BSS-Abschnitte anstelle der normalen Daten- oder BSS-Abschnitte. Der Standardwert von num is
8.
-mgpopt=zu erhalten
-mgpopt
-Mno-gpopt
GP-relative Zugriffe generieren (nicht generieren). Folgende zu erhalten Namen sind
anerkannt:
keine
Generieren Sie keine GP-relativen Zugriffe.
aus einer regionalen
Generieren Sie GP-relative Zugriffe für kleine Datenobjekte, die nicht extern sind oder
schwach. Verwenden Sie auch die GP-relative Adressierung für Objekte, die explizit
über ein "section"-Attribut in einem kleinen Datenbereich platziert.
globale
Wie für aus einer regionalen, sondern auch GP-relative Zugriffe für kleine Datenobjekte generieren, die
äußerlich oder schwach sind. Wenn Sie diese Option verwenden, müssen Sie sicherstellen, dass alle Teile von
Ihr Programm (einschließlich Bibliotheken) werden mit denselben kompiliert -G Einstellung.
die Datenerfassung
Generieren Sie GP-relative Zugriffe für alle Datenobjekte im Programm. Wenn du benutzt
Bei dieser Option müssen die gesamten Daten- und BSS-Segmente Ihres Programms in 64 KB passen
Speicher und Sie müssen ein geeignetes Linker-Skript verwenden, um sie innerhalb des
adressierbarer Bereich des globalen Zeigers.
alle Generieren Sie GP-relative Adressen für Funktionszeiger sowie Datenzeiger. Wenn
Wenn Sie diese Option verwenden, müssen die gesamten Text-, Daten- und BSS-Segmente Ihres Programms
passen in 64 KB Arbeitsspeicher und Sie müssen ein geeignetes Linker-Skript verwenden, um zuzuordnen
sie innerhalb des adressierbaren Bereichs des globalen Zeigers.
-mgpopt entspricht -mgpopt=lokal und -Mno-gpopt entspricht -mgpopt=keine.
Die Standardeinstellung ist -mgpopt ausser wenn -fpic or -fPIC wird angegeben, um Positions-
unabhängiger Code. Beachten Sie, dass die Nios II ABI keine GP-relativen Zugriffe von zulässt
gemeinsam genutzte Bibliotheken.
Möglicherweise müssen Sie angeben -Mno-gpopt explizit beim Erstellen von Programmen, die enthalten
große Mengen kleiner Daten, einschließlich großer GOT-Datenabschnitte. In diesem Fall ist die
Der 16-Bit-Offset für die GP-relative Adressierung ist möglicherweise nicht groß genug, um den Zugriff auf
den gesamten kleinen Datenbereich.
-mel
-meb
Generieren Sie Little-Endian- (Standard) bzw. Big-Endian-Code (experimentell).
-mBypass-Cache
-mno-Bypass-Cache
Erzwingen Sie, dass alle Lade- und Speicheranweisungen immer den Cache umgehen, indem Sie I/O-Varianten von verwenden
die Anleitungen. Standardmäßig wird der Cache nicht umgangen.
-mno-cache-flüchtig
-mcache-flüchtig
Der flüchtige Speicherzugriff umgeht den Cache mit den I/O-Varianten von Load und Store
Anweisungen. Standardmäßig wird der Cache nicht umgangen.
-mno-fast-sw-div
-mfast-sw-div
Verwenden Sie keine tabellenbasierte schnelle Division für kleine Zahlen. Standardmäßig wird das Fasten verwendet
teilen bei -O3 und darüber.
-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-MHW-Mulx
-mno-hw-div
-MHW-div
Aktivieren oder deaktivieren Sie die Ausgabe der Befehlsfamilien "mul", "mulx" und "div" durch die
Compiler. Standardmäßig wird "mul" ausgegeben und nicht "div" und "mulx".
-mbenutzerdefinierte-Inn=N
-mno-benutzerdefiniert-Inn
. -mbenutzerdefinierte-Inn=N Option ermöglicht die Verwendung einer benutzerdefinierten Anweisung mit Codierung N wann
Generieren von Code, der verwendet Inn. Beispielsweise, -mcustom-fadds=253 erzeugt benutzerdefinierte
Anweisung 253 für Gleitkomma-Additionsoperationen mit einfacher Genauigkeit anstelle der
Standardverhalten bei der Verwendung eines Bibliotheksaufrufs.
Die folgenden Werte von Inn sind unterstützt. Sofern nicht anders angegeben, Gleitkomma
Operationen werden voraussichtlich mit normaler IEEE 754-Semantik implementiert und
entsprechen direkt den C-Operatoren oder den entsprechenden integrierten GCC-Funktionen.
Gleitkomma mit einfacher Genauigkeit:
Moden, fsubs, fdivs, fmuls
Binäre arithmetische Operationen.
Fnegs
Unäre Negation.
fabelhaft
Unärer absoluter Wert.
fcmpeqs, fcmpges, fcmpgts, fcmples, fcmmplts, fcmpnes
Vergleichsoperationen.
fmin, fmax
Gleitkomma-Minimum und -Maximum. Diese Anweisungen werden nur generiert, wenn
-nur-endlich-mathematik angegeben.
fsqrts
Unäre Quadratwurzeloperation.
fkos, fsins, ftans, Fatans, fexps, Flogs
Trigonometrische und exponentielle Gleitkommafunktionen. Diese Anleitung ist
nur erzeugt, wenn -funsafe-mathematik-optimierungen ist ebenfalls angegeben.
Gleitkomma mit doppelter Genauigkeit:
fadd, fsubd, fdivd, voll
Binäre arithmetische Operationen.
fnegd
Unäre Negation.
fabelhaft
Unärer absoluter Wert.
fcmpeqd, fcmpged, fcmpgtd, erfüllt, fcmltd, fcmpned
Vergleichsoperationen.
finden, fmaxd
Minimum und Maximum mit doppelter Genauigkeit. Diese Anweisungen werden nur generiert, wenn
-nur-endlich-mathematik angegeben.
fsqrtd
Unäre Quadratwurzeloperation.
fcosd, ffind, ftund, Fett und, fexpd, prügeln
Trigonometrische und Exponentialfunktionen mit doppelter Genauigkeit. Diese Anleitung ist
nur erzeugt, wenn -funsafe-mathematik-optimierungen ist ebenfalls angegeben.
Conversions:
faxd
Umwandlung von einfacher Genauigkeit in doppelte Genauigkeit.
ftruncds
Umwandlung von doppelter Genauigkeit in einfache Genauigkeit.
fixi, festsu, Fixdi, fixdu
Konvertierung von Gleitkomma- in vorzeichenbehaftete oder vorzeichenlose Integer-Typen, mit
Kürzung gegen Null.
rund
Konvertierung von Gleitkommazahlen mit einfacher Genauigkeit in Ganzzahlen mit Vorzeichen, Runden auf
nächste ganze Zahl und bindet von Null weg. Dies entspricht dem
"__builtin_lroundf" Funktion wenn -fno-math-fehlernr wird eingesetzt.
Schwimmer, Schwimmer, schwebend, schwebend
Konvertierung von vorzeichenbehafteten oder vorzeichenlosen Integer-Typen in Gleitkomma-Typen.
Außerdem sind alle folgenden Transferbefehle für die internen Register X und Y
muss angegeben werden, um einen der Gleitkommabefehle mit doppelter Genauigkeit zu verwenden.
Benutzerdefinierte Anweisungen, die zwei Quelloperanden mit doppelter Genauigkeit verwenden, erwarten den ersten
Operand im 64-Bit-Register X. Der andere Operand (oder nur Operand eines unären
Operation) wird der benutzerdefinierten arithmetischen Anweisung mit der niedrigsten Bedeutung gegeben
Hälfte im Quellregister src1 und die wichtigste Hälfte in src2. Ein Brauch
Anweisung, die ein Ergebnis mit doppelter Genauigkeit zurückgibt, gibt das höchstwertige 32 . zurück
Bits im Zielregister und die andere Hälfte im 32-Bit-Register Y. GCC
generiert automatisch die notwendigen Codesequenzen um Register X zu schreiben und/oder zu lesen
Register Y, wenn Gleitkommabefehle mit doppelter Genauigkeit verwendet werden.
fwx
Schreiben src1 in die niederwertigste Hälfte von X und src2 in die bedeutendsten
Hälfte von X.
frech
Schreiben src1 in Y.
frdxhi, frdxlo
Lesen Sie die höchst- oder niedrigste (jeweils) signifikante Hälfte von X und speichern Sie sie in dest.
frdy
Lies den Wert von Y und speichere ihn in dest.
Beachten Sie, dass Sie mehr lokale Kontrolle über die Generierung von Nios II Custom erhalten können
Anweisungen mit dem Befehl "target("custom-insn=N")" und "target("no-custom-insn")"
Funktionsattribute oder Pragmas.
-mcustom-fpu-cfg=Name
Diese Option aktiviert einen vordefinierten, benannten Satz benutzerdefinierter Befehlscodierungen (siehe
-mbenutzerdefinierte-Inn Oben). Derzeit sind die folgenden Sets definiert:
-mcustom-fpu-cfg=60-1 ist äquivalent zu: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -fsingle-precision-constant
-mcustom-fpu-cfg=60-2 ist äquivalent zu: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -mcustom-fdivs=255 -fsingle-precision-constant
-mcustom-fpu-cfg=72-3 ist äquivalent zu: -mcustom-floatus=243 -mcustom-fixsi=244
-mcustom-floatis=245 -mcustom-fcmpgts=246 -mcustom-fcmples=249 -mcustom-fcmpeqs=250
-mcustom-fcmpnes=251 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254
-mcustom-fdivs=255 -fsingle-precision-constant
Individuelle Anweisungszuweisungen von Einzelpersonen -mbenutzerdefinierte-Inn= Optionen überschreiben
die gegeben von -mcustom-fpu-cfg=, unabhängig von der Reihenfolge der Optionen auf dem
Befehlszeile.
Beachten Sie, dass Sie mehr lokale Kontrolle über die Auswahl einer FPU-Konfiguration erhalten, indem Sie
mit "target("custom-fpu-cfg=Name")" Funktionsattribut oder Pragma.
Diese zusätzlichen -m Optionen sind für das Altera Nios II ELF (Bare-Metal) Target verfügbar:
-mhal
Verbindung mit HAL BSP. Dadurch wird die Verknüpfung mit dem von GCC bereitgestellten C-Runtime-Start unterdrückt
und Beendigungscode und wird normalerweise in Verbindung mit -msys-crt0= spezifizieren
die Position des alternativen Startcodes, der von HAL BSP bereitgestellt wird.
-mkleinc
Link mit einer eingeschränkten Version der C-Bibliothek, -lkleinc, anstatt Newlib.
-msys-crt0=Startdatei
Startdatei ist der Dateiname der Startdatei (crt0), die beim Verknüpfen verwendet werden soll. Diese Option
ist nur sinnvoll in Verbindung mit -mhal.
-msys-lib=systemlib
systemlib ist der Bibliotheksname der Bibliothek, die Systemaufrufe auf niedriger Ebene bereitstellt
von der C-Bibliothek benötigt, zB "read" und "write". Diese Option wird normalerweise verwendet, um
Link mit einer Bibliothek, die von einem HAL-BSP bereitgestellt wird.
Nvidia PTX Optionen
Diese Optionen sind für Nvidia PTX definiert:
-m32
-m64
Generieren Sie Code für 32-Bit- oder 64-Bit-ABI.
-mmainkernel
Link in Code für einen __main-Kernel. Dies ist für Stand-alone statt zum Ausladen
Ausführung.
PDP-11 Optionen
Diese Optionen sind für den PDP-11 definiert:
-mfpu
Verwenden Sie Hardware-FPP-Gleitkomma. Dies ist die Standardeinstellung. (FIS-Gleitkomma auf dem
PDP-11/40 wird nicht unterstützt.)
-msoft-float
Verwenden Sie keine Hardware-Gleitkommazahlen.
-mac0
Geben Sie Gleitkomma-Ergebnisse in ac0 zurück (fr0 in der Unix-Assembler-Syntax).
-mno-ac0
Gleitkomma-Ergebnisse im Speicher zurückgeben. Dies ist die Standardeinstellung.
-m40
Generieren Sie Code für eine PDP-11/40.
-m45
Generieren Sie Code für eine PDP-11/45. Dies ist die Standardeinstellung.
-m10
Generieren Sie Code für eine PDP-11/10.
-mbcopy-eingebaut
Verwenden Sie Inline-"movmemhi"-Muster zum Kopieren des Speichers. Dies ist die Standardeinstellung.
-mbcopy
Verwenden Sie keine Inline-"movmemhi"-Muster zum Kopieren des Speichers.
-minze16
-mno-int32
Verwenden Sie 16-Bit "int". Dies ist die Standardeinstellung.
-minze32
-mno-int16
Verwenden Sie 32-Bit "int".
-mfloat64
-mno-float32
Verwenden Sie 64-Bit-Float. Dies ist die Standardeinstellung.
-mfloat32
-mno-float64
Verwenden Sie 32-Bit-"Float".
-mabschi
Verwenden Sie das Muster "abshi2". Dies ist die Standardeinstellung.
-Mno-abshi
Verwenden Sie kein "abshi2"-Muster.
-Filiale-teuer
Stellen Sie sich vor, Filialen seien teuer. Dies ist zum Experimentieren mit der Codegenerierung
nur.
-Filiale-billig
Geben Sie nicht vor, dass Filialen teuer sind. Dies ist die Standardeinstellung.
-Munix-asm
Verwenden Sie die Unix-Assembler-Syntax. Dies ist die Standardeinstellung bei Konfiguration für pdp11-*-bsd.
-mdec-asm
Verwenden Sie die DEC-Assembler-Syntax. Dies ist die Standardeinstellung, wenn sie für ein beliebiges PDP-11-Ziel konfiguriert ist
ausgenommen pdp11-*-bsd.
picoChip Optionen
Diese -m Optionen sind für PicoChip-Implementierungen definiert:
-mae=ae_typ
Legen Sie den Befehlssatz, den Registersatz und die Befehlsplanungsparameter für das Array fest
Elementtyp ae_typ. Unterstützte Werte für ae_typ sind JEDEM, MUL und MAC.
-mae=JEDER wählt einen vollständig generischen AE-Typ aus. Mit dieser Option generierter Code wird ausgeführt
auf einem der anderen AE-Typen. Der Code ist nicht so effizient, wie er wäre, wenn er kompiliert wäre
für einen bestimmten AE-Typ und einige Betriebsarten (z. B. Multiplikation) funktionieren nicht
richtig auf alle Arten von AE.
-mae=MUL wählt einen MUL-AE-Typ aus. Dies ist der nützlichste AE-Typ für kompilierten Code.
und ist die Standardeinstellung.
-mae=MAC wählt einen MAC AE im DSP-Stil aus. Code, der mit dieser Option kompiliert wurde, kann leiden unter
schlechte Leistung der Byte-(Char-)Manipulation, da der DSP AE nicht bereitstellt
Hardware-Unterstützung für Byte-Laden/Speichern.
-msymbol-als-Adresse
Aktivieren Sie den Compiler, um einen Symbolnamen direkt als Adresse in einem Laden/Speichern zu verwenden
Befehl, ohne ihn zuerst in ein Register zu laden. Typischerweise ist die Verwendung dieser
Option generiert größere Programme, die schneller laufen, als wenn die Option nicht verwendet wird.
Die Ergebnisse variieren jedoch von Programm zu Programm, daher wird es als Benutzeroption belassen,
anstatt dauerhaft aktiviert zu sein.
-mno-ineffiziente-Warnungen
Deaktiviert Warnungen zur Generierung von ineffizientem Code. Diese Warnungen können sein
wird beispielsweise beim Kompilieren von Code generiert, der Speicheroperationen auf Byte-Ebene durchführt
auf dem MAC AE-Typ. Der MAC AE bietet keine Hardwareunterstützung für Speicher auf Byte-Ebene
Operationen, also müssen alle Byte-Laden/Speichern aus Wort-Laden/Speichern synthetisiert werden
Operationen. Dies ist ineffizient und eine Warnung wird generiert, um darauf hinzuweisen, dass Sie
sollte den Code neu schreiben, um Byte-Operationen zu vermeiden oder auf einen AE-Typ mit dem
notwendige Hardwareunterstützung. Diese Option deaktiviert diese Warnungen.
PowerPC Optionen
Diese sind aufgelistet unter
RL78 Optionen
-msim
Links in zusätzlichen Zielbibliotheken, um den Betrieb innerhalb eines Simulators zu unterstützen.
-mmul=keine
-mmul=g13
-mmul = rl78
Gibt den Typ der zu verwendenden Hardware-Multiplikationsunterstützung an. Die Standardeinstellung ist
keine, das Software-Multiplikationsfunktionen verwendet. Die g13 Option ist für die
Hardware multiplizieren/dividieren Sie nur Peripheriegeräte auf den RL78/G13-Targets. Die rl78 Option ist
für die im RL78-Softwarehandbuch definierte Standard-Hardware-Multiplikation.
-m64bit-doubles
-m32bit-doubles
Stellen Sie den Datentyp "doppelt" auf 64 Bit (-m64bit-doubles) oder 32 Bit (-m32bit-doubles)
in Größe. Die Standardeinstellung ist -m32bit-doubles.
IBM RS / 6000 und PowerPC Optionen
Diese -m Optionen sind für IBM RS/6000 und PowerPC definiert:
-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
Sie verwenden diese Optionen, um anzugeben, welche Anweisungen auf dem Prozessor verfügbar sind, den Sie
benutzen. Der Standardwert dieser Optionen wird bei der Konfiguration von GCC festgelegt.
Angabe der -mcpu=CPU_Typ überschreibt die Angabe dieser Optionen. Wir
empfehlen Sie die Verwendung -mcpu=CPU_Typ Option anstelle der oben aufgeführten Optionen.
Angeben -mpowerpc-gpopt ermöglicht GCC die Nutzung der optionalen PowerPC-Architektur
Anweisungen in der Gruppe "Allgemein", einschließlich Gleitkomma-Quadratwurzel.
Angeben -mpowerpc-gfxopt ermöglicht GCC die Nutzung der optionalen PowerPC-Architektur
Anweisungen in der Gruppe Grafik, einschließlich Gleitkommaauswahl.
Die -mmfcrf Option ermöglicht es GCC, die Verschiebung aus dem Bedingungsregisterfeld zu generieren
Anweisung, die auf dem POWER4-Prozessor und anderen Prozessoren implementiert ist, die die
PowerPC V2.01-Architektur. Die -mpopcntb Option ermöglicht es GCC, den Popcount zu generieren
und FP-Reziproke-Schätzbefehl mit doppelter Genauigkeit, implementiert auf dem POWER5
Prozessor und andere Prozessoren, die die PowerPC V2.02-Architektur unterstützen. Die
-mpopcntd Option ermöglicht es GCC, die Popcount-Anweisung zu generieren, die auf dem
POWER7-Prozessor und andere Prozessoren, die die PowerPC V2.06-Architektur unterstützen.
Die -mfprnd Option ermöglicht es GCC, die FP-Runde-zu-Integer-Anweisungen zu generieren
implementiert auf dem POWER5+-Prozessor und anderen Prozessoren, die den PowerPC unterstützen
V2.03-Architektur. Die -mcmpb Option ermöglicht es GCC, die Vergleichsbytes zu generieren
Anweisung, die auf dem POWER6-Prozessor und anderen Prozessoren implementiert ist, die die
PowerPC V2.05-Architektur. Die -mmfpgpr Option ermöglicht es GCC, den FP-Zug zu generieren
zu/von Allzweck-Registerbefehlen, die auf dem POWER6X-Prozessor implementiert sind und
andere Prozessoren, die die erweiterte PowerPC V2.05-Architektur unterstützen. Die -mhard-dfp
Option ermöglicht es GCC, die dezimalen Gleitkomma-Anweisungen zu generieren, die auf implementiert sind
einige POWER-Prozessoren.
Die -mpowerpc64 Option ermöglicht es GCC, die zusätzlichen 64-Bit-Anweisungen zu generieren, die
in der vollständigen PowerPC64-Architektur zu finden sind und GPRs als 64-Bit-Doppelwort behandeln
Mengen. GCC ist standardmäßig auf -mno-powerpc64.
-mcpu=CPU_Typ
Legen Sie die Parameter für Architekturtyp, Registerverwendung und Befehlsplanung fest für
Maschinentyp CPU_Typ. Unterstützte Werte für CPU_Typ sind 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, Leistung5+, power6,
Leistung6x, power7, power8, PowerPC, powerpc64, powerpc64le und rs64.
-mcpu=powerpc, -mcpu=powerpc64 und -mcpu=powerpc64le spezifizieren reinen 32-bit PowerPC
(entweder Endian), 64-Bit-Big-Endian-PowerPC und 64-Bit-Little-Endian-PowerPC
Architektur-Maschinentypen, wobei ein geeignetes, generisches Prozessormodell angenommen wird für
Terminplanungszwecke.
Die anderen Optionen geben einen bestimmten Prozessor an. Code generiert unter diesen Optionen
läuft am besten auf diesem Prozessor und möglicherweise überhaupt nicht auf anderen.
Die -mcpu Optionen aktivieren oder deaktivieren automatisch die folgenden Optionen:
-maltivec -mfprnd -mhard-float -mmfcrf -vielfach -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-move -Mpower8-Fusion
-mpower8-Vektor -mquad-Speicher -mquad-speicher-atomar
Die speziellen Optionen, die für eine bestimmte CPU festgelegt werden, variieren zwischen den Compiler-Versionen,
je nachdem, welche Einstellung den optimalen Code für diese CPU zu erzeugen scheint; es nicht
spiegeln notwendigerweise die Fähigkeiten der tatsächlichen Hardware wider. Wenn Sie eine
einzelne Option auf einen bestimmten Wert, können Sie ihn nach dem -mcpu Option,
Gefällt mir -mcpu=970 -mno-altivec.
Unter AIX ist die -maltivec und -mpowerpc64 Optionen werden nicht vom . aktiviert oder deaktiviert -mcpu
Option derzeit, da AIX diese Optionen nicht vollständig unterstützt. Du darfst
Aktivieren oder deaktivieren Sie sie immer noch einzeln, wenn Sie sicher sind, dass es in Ihrem funktioniert
Umwelt.
-mtune=CPU_Typ
Legen Sie die Befehlsplanungsparameter für den Maschinentyp fest CPU_Typ, aber nicht einstellen
der Architekturtyp oder die Registernutzung, sowie -mcpu=CPU_Typ tut. Die gleichen Werte für
CPU_Typ werden verwendet für -munt wie für -mcpu. Wenn beide angegeben sind, wird der generierte Code
verwendet die Architektur und die Register von -mcpu, aber die Scheduling-Parameter von
-munt.
-mcmodel=klein
Generieren Sie PowerPC64-Code für das kleine Modell: Das Inhaltsverzeichnis ist auf 64k begrenzt.
-mcmodel=mittel
Generieren Sie PowerPC64-Code für das mittlere Modell: Das Inhaltsverzeichnis und andere statische Daten sind möglicherweise verfügbar
auf eine Gesamtgröße von 4G.
-mcmodel=groß
Generieren Sie PowerPC64-Code für das große Modell: Das TOC kann bis zu 4G groß sein. Sonstiges
Daten und Code sind nur durch den 64-Bit-Adressraum begrenzt.
-maltivec
-mno-altivec
Generieren Sie Code, der AltiVec-Anweisungen verwendet (nicht verwendet), und aktivieren Sie auch die Verwendung
integrierter Funktionen, die einen direkteren Zugriff auf den AltiVec-Befehlssatz ermöglichen.
Möglicherweise müssen Sie auch einstellen -mabi=altivec zum Anpassen des aktuellen ABI mit AltiVec ABI
Verbesserungen.
Wann -maltivec verwendet wird, anstatt -maltivec=le or -maltivec=sein, die Elementreihenfolge
für Altivec-Intrinsics wie "vec_splat", "vec_extract" und "vec_insert" match
Reihenfolge der Array-Elemente entsprechend der Endianness des Ziels. Das heißt, Element
null identifiziert das Element ganz links in einem Vektorregister, wenn ein Big-Endian anvisiert wird
Plattform und identifiziert das Element ganz rechts in einem Vektorregister beim Targeting von a
Little-Endian-Plattform.
-maltivec=sein
Generieren Sie Altivec-Anweisungen mit der Big-Endian-Elementreihenfolge, unabhängig davon, ob
das Ziel ist Big- oder Little-Endian. Dies ist die Standardeinstellung beim Targeting eines Big-Endian
Plattform.
Die Elementreihenfolge wird verwendet, um Elementnummern in Altivec-Intrinsics zu interpretieren, wie z
"vec_splat", "vec_extract" und "vec_insert". Standardmäßig stimmen diese mit Array-Elementen überein
Reihenfolge entsprechend der Endianness für das Ziel.
-maltivec=le
Generieren Sie Altivec-Anweisungen mit der Little-Endian-Elementreihenfolge, unabhängig davon, ob
das Ziel ist Big- oder Little-Endian. Dies ist die Standardeinstellung, wenn Sie ein wenig
Endian-Plattform. Diese Option wird derzeit ignoriert, wenn ein Big-Endian als Ziel verwendet wird
Plattform.
Die Elementreihenfolge wird verwendet, um Elementnummern in Altivec-Intrinsics zu interpretieren, wie z
"vec_splat", "vec_extract" und "vec_insert". Standardmäßig stimmen diese mit Array-Elementen überein
Reihenfolge entsprechend der Endianness für das Ziel.
-mvrsave
-mno-vrsave
Generieren Sie VRSAVE-Anweisungen, wenn Sie AltiVec-Code generieren.
-mgen-cell-microcode
Generieren Sie Zellen-Mikrocode-Anweisungen.
-mwarn-cell-Mikrocode
Warnen, wenn ein Cell-Mikrocode-Befehl ausgegeben wird. Ein Beispiel für einen Cell-Mikrocode
Anweisung ist eine variable Verschiebung.
-msecure-plt
Generieren Sie Code, der es ermöglicht ld und ld.so um ausführbare Dateien und gemeinsam genutzte Bibliotheken zu erstellen mit
nicht ausführbare Abschnitte ".plt" und ".got". Dies ist eine PowerPC 32-Bit SYSV ABI-Option.
-mbss-plt
Generieren Sie Code, der einen BSS-Abschnitt ".plt" verwendet, der ld.so ausfüllt und erfordert ".plt"
und ".got"-Abschnitte, die sowohl beschreibbar als auch ausführbar sind. Dies ist ein PowerPC 32-Bit
SYSV-ABI-Option.
-misel
-mno-isel
Dieser Schalter aktiviert oder deaktiviert die Erzeugung von ISEL-Befehlen.
-misel=ja Nein
Dieser Schalter ist veraltet. Verwenden -misel und -mno-isel stattdessen.
-msp
-mno-sp
Dieser Schalter aktiviert oder deaktiviert die Generierung von SPE simd-Befehlen.
-beschädigt
-mno-gepaart
Dieser Schalter aktiviert oder deaktiviert die Generierung von PAIRED simd-Anweisungen.
-mspe=ja Nein
Diese Option ist veraltet. Verwenden -msp und -mno-sp stattdessen.
-mvsx
-mno-vsx
Generieren Sie Code, der Vektor-/Skalarbefehle (VSX) verwendet (nicht verwendet) und auch
ermöglichen die Verwendung integrierter Funktionen, die einen direkteren Zugriff auf den VSX ermöglichen
Befehlssatz.
-mcrypto
-mno-crypto
Aktivieren (deaktivieren) der integrierten Funktionen, die einen direkten Zugriff auf die
kryptografische Anweisungen, die in Version 2.07 von PowerPC ISA hinzugefügt wurden.
-mdirect-move
-mno-direct-move
Generieren Sie Code, der die Anweisungen zum Verschieben von Daten zwischen den
Allzweckregister und die Vektor-/Skalar-(VSX)-Register, die hinzugefügt wurden
Version 2.07 des PowerPC-ISA.
-Mpower8-Fusion
-mno-power8-fusion
Generieren Sie Code, der einige Integer-Operationen benachbart hält (nicht behält), so dass die
Befehle können auf power8 und späteren Prozessoren miteinander verschmolzen werden.
-mpower8-Vektor
-mno-power8-vektor
Generieren Sie Code, der die zuvor verwendeten Vektor- und Skalaranweisungen verwendet (nicht verwendet).
in Version 2.07 des PowerPC ISA hinzugefügt. Aktivieren Sie auch die Verwendung integrierter Funktionen
die einen direkteren Zugriff auf die Vektoranweisungen ermöglichen.
-mquad-Speicher
-mno-Quad-Speicher
Generieren Sie Code, der die nicht-atomaren Quad-Wort-Speicherbefehle verwendet (nicht verwendet).
Die -mquad-Speicher Option erfordert die Verwendung des 64-Bit-Modus.
-mquad-speicher-atomar
-mno-quad-speicher-atomar
Generieren Sie Code, der die atomaren Quad-Wort-Speicherbefehle verwendet (nicht verwendet). Die
-mquad-speicher-atomar Option erfordert die Verwendung des 64-Bit-Modus.
-mupper-regs-df
-mno-upper-regs-df
Generieren Sie Code, der die skalaren Anweisungen mit doppelter Genauigkeit verwendet (nicht verwendet), die
Ziel aller 64 Register im Vektor-/Skalar-Gleitkommaregistersatz, die
in Version 2.06 des PowerPC ISA hinzugefügt. -mupper-regs-df ist standardmäßig eingeschaltet, wenn
Sie verwenden einen der -mcpu=power7, -mcpu=power8, oder auch -mvsx Optionen.
-mupper-regs-sf
-mno-upper-regs-sf
Generieren Sie Code, der die skalaren Anweisungen mit einfacher Genauigkeit verwendet (nicht verwendet), die
Ziel aller 64 Register im Vektor-/Skalar-Gleitkommaregistersatz, die
in Version 2.07 des PowerPC ISA hinzugefügt. -mupper-regs-sf ist standardmäßig eingeschaltet, wenn
du verwendest eines von beiden -mcpu=power8 or -mpower8-Vektor Optionen.
-mupper-regs
-mno-obere-regs
Generieren Sie Code, der die skalaren Anweisungen verwendet (nicht verwendet), die auf alle 64 . abzielen
Register im Vektor-/Skalar-Gleitkommaregistersatz, je nach Modell von
Die Maschine.
Besitzt das -mno-obere-regs Option verwendet wird, schaltet sie beide aus -mupper-regs-sf und
-mupper-regs-df Optionen.
-mfloat-gprs=ja/einzeln/doppelt/nein
-mfloat-gprs
Dieser Schalter aktiviert oder deaktiviert die Generierung von Gleitkommaoperationen auf dem
Allzweckregister für Architekturen, die dies unterstützen.
Das Argument ja or Single ermöglicht die Verwendung von Gleitkommazahlen mit einfacher Genauigkeit
Operationen.
Das Argument doppelt ermöglicht die Verwendung von Gleitkommazahlen mit einfacher und doppelter Genauigkeit
Operationen.
Das Argument nicht deaktiviert Gleitkommaoperationen in den Universalregistern.
Diese Option ist derzeit nur beim MPC854x verfügbar.
-m32
-m64
Generieren Sie Code für 32-Bit- oder 64-Bit-Umgebungen von Darwin- und SVR4-Zielen (einschließlich
GNU/Linux). Die 32-Bit-Umgebung setzt int, long und pointer auf 32 Bit und
generiert Code, der auf jeder PowerPC-Variante ausgeführt wird. Die 64-Bit-Umgebung setzt int auf
32 Bit und lang und Zeiger auf 64 Bit und generiert Code für PowerPC64, wie für
-mpowerpc64.
-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-minimal-toc
Ändern Sie die Generierung des TOC (Table Of Contents), das für jeden erstellt wird
ausführbare Datei. Die -mfull-toc Option ist standardmäßig ausgewählt. In diesem Fall ist GCC
ordnet mindestens einen Inhaltsverzeichniseintrag für jede eindeutige nicht-automatische Variablenreferenz in . zu
Ihr Programm. GCC platziert auch Gleitkommakonstanten im Inhaltsverzeichnis. Allerdings nur
16,384 Einträge sind im Inhaltsverzeichnis verfügbar.
Wenn Sie eine Linker-Fehlermeldung erhalten, die besagt, dass Sie das verfügbare übergelaufen haben
TOC-Speicherplatz, Sie können die Menge des TOC-Speicherplatzes reduzieren, der mit dem -mno-fp-in-toc und
-mno-sum-in-toc Optionen. -mno-fp-in-toc verhindert, dass GCC Gleitkommazahlen setzt
Konstanten im Inhaltsverzeichnis und -mno-sum-in-toc zwingt GCC, Code zu generieren, um die zu berechnen
Summe einer Adresse und einer Konstanten zur Laufzeit, anstatt diese Summe in das Inhaltsverzeichnis aufzunehmen.
Sie können eine oder beide dieser Optionen angeben. Jeder bewirkt, dass GCC sehr
etwas langsamerer und größerer Code auf Kosten des TOC-Speichers.
Wenn der Speicherplatz im Inhaltsverzeichnis immer noch knapp wird, auch wenn Sie beide Optionen angeben,
angeben -minimal-toc stattdessen. Diese Option bewirkt, dass GCC nur einen TOC-Eintrag für
jede Datei. Wenn Sie diese Option angeben, erzeugt GCC Code, der langsamer und größer ist
die jedoch extrem wenig TOC-Speicherplatz benötigt. Möglicherweise möchten Sie diese Option nur verwenden auf
Dateien, die weniger häufig ausgeführten Code enthalten.
-maix64
-maix32
Aktivieren Sie 64-Bit-AIX-ABI und Aufrufkonvention: 64-Bit-Zeiger, 64-Bit-Typ "lang" und
die zu ihrer Unterstützung erforderliche Infrastruktur. Angabe -maix64 impliziert -mpowerpc64,
während -maix32 deaktiviert die 64-Bit-ABI und impliziert -mno-powerpc64. GCC ist standardmäßig auf
-maix32.
-mxl-kompat
-mno-xl-kompat
Produzieren Sie Code, der bei der Verwendung von AIX besser der IBM XL-Compiler-Semantik entspricht.
kompatibles ABI. Übergeben Sie Gleitkomma-Argumente an prototypische Funktionen jenseits der
Registrieren Sie den Sicherungsbereich (RSA) auf dem Stack zusätzlich zu den Argument-FPRs. Geh nicht davon aus
das höchstwertige Double in einem 128-Bit langen Double-Wert wird richtig gerundet, wenn
Werte vergleichen und in Double umwandeln. Verwenden Sie XL-Symbolnamen für lange Doppel
Routinen unterstützen.
Die AIX-Aufrufkonvention wurde erweitert, aber ursprünglich nicht dokumentiert, um eine
undurchsichtiger K&R C-Fall des Aufrufs einer Funktion, die die Adresse ihrer Argumente mit . nimmt
weniger Argumente als angegeben. IBM XL-Compiler greifen auf Gleitkommaargumente zu, die
passen nicht in die RSA vom Stack, wenn ein Unterprogramm ohne kompiliert wird
Optimierung. Weil das Speichern von Gleitkomma-Argumenten immer auf dem Stack ist
ineffizient und selten benötigt, diese Option ist standardmäßig nicht aktiviert und ist nur
erforderlich, wenn Subroutinen aufgerufen werden, die von IBM XL-Compilern ohne Optimierung kompiliert wurden.
-mpe
Unterstützung IBM RS / 6000 SP Parallel Arbeitsumfeld (SPORT). Verknüpfen Sie eine Anwendung, die für die Verwendung geschrieben wurde
Nachrichtenübergabe mit speziellem Startcode, damit die Anwendung ausgeführt werden kann. Die
System muss PE am Standardstandort installiert haben (/usr/lpp/ppe.poe/), oder der
Spezifikation Datei muss mit dem überschrieben werden -spezifikationen= Option zur Angabe der entsprechenden
Verzeichnisspeicherort. Die parallele Umgebung unterstützt keine Threads, daher ist die -mpe
Option und die -pGewinde Optionen sind nicht kompatibel.
-bösartig-natürlich
-bösartige-Macht
Unter AIX, 32-Bit-Darwin und 64-Bit-PowerPC GNU/Linux ist die Option -bösartig-natürlich
überschreibt die ABI-definierte Ausrichtung größerer Typen, wie Gleitkomma-Doubles,
an ihrer natürlichen größenbasierten Grenze. Die Option -bösartige-Macht weist GCC an,
Befolgen Sie die von ABI festgelegten Ausrichtungsregeln. GCC verwendet standardmäßig die Standardausrichtung
im ABI definiert.
Bei 64-Bit-Darwin ist die natürliche Ausrichtung die Standardeinstellung, und -bösartige-Macht ist nicht
unterstützt.
-msoft-float
-mhard-float
Generieren Sie Code, der den Gleitkommaregistersatz nicht verwendet (verwendet). Software
Gleitkomma-Emulation wird bereitgestellt, wenn Sie die -msoft-float Option, und bestehen Sie die
Option auf GCC beim Verlinken.
-msingle-float
-mdouble-float
Generieren Sie Code für Gleitkommaoperationen mit einfacher oder doppelter Genauigkeit.
-mdouble-float impliziert -msingle-float.
-msimple-fpu
Generieren Sie keine "sqrt"- und "div"-Anweisungen für Hardware-Gleitkommaeinheiten.
-mfpu=Name
Geben Sie den Typ der Gleitkommaeinheit an. Gültige Werte für Name sind sp_lite (gleichwertig
-msingle-float -msimple-fpu), dp_lite (gleichwertig -mdouble-float -msimple-fpu),
sp_voll (gleichwertig -msingle-float), Und dp_voll (gleichwertig -mdouble-float).
-mxilinx-fpu
Führen Sie Optimierungen für die Gleitkommaeinheit auf Xilinx PPC 405/440 durch.
-vielfach
-mno-Vielfaches
Generieren Sie Code, der die Mehrwort-Ladebefehle und die
speichern Sie Anweisungen aus mehreren Wörtern. Diese Anweisungen werden standardmäßig generiert auf
POWER-Systeme und nicht auf PowerPC-Systemen erzeugt. Verwende nicht -vielfach auf wenig-
endian PowerPC-Systeme, da diese Anweisungen nicht funktionieren, wenn der Prozessor eingeschaltet ist
Little-Endian-Modus. Ausnahmen sind PPC740 und PPC750, die diese zulassen
Anweisungen im Little-Endian-Modus.
-mstring
-mno-string
Generieren Sie Code, der die Anweisungen zum Laden der Zeichenfolge und den Speicher verwendet (nicht verwendet).
String-Wort-Befehle, um mehrere Register zu speichern und kleine Blockbewegungen auszuführen. Diese
Anweisungen werden standardmäßig auf POWER-Systemen und nicht auf PowerPC generiert
Systeme. Verwende nicht -mstring auf Little-Endian-PowerPC-Systemen, da diese
Anweisungen funktionieren nicht, wenn sich der Prozessor im Little-Endian-Modus befindet. Die Ausnahmen
sind PPC740 und PPC750, die diese Befehle im Little-Endian-Modus ermöglichen.
-Mupdate
-mno-update
Generieren Sie Code, der die Lade- oder Speicheranweisungen verwendet (nicht verwendet), die die
Basisregister an die Adresse des berechneten Speicherplatzes. Diese Anleitung
werden standardmäßig generiert. Wenn du benutzt -mno-update, da ist ein kleines Fenster zwischen den
Zeitpunkt, zu dem der Stack-Pointer aktualisiert wird und die Adresse des vorherigen Frames ist
gespeichert, was bedeutet, dass Code, der den Stack-Frame über Interrupts oder Signale durchläuft, möglicherweise
erhalten beschädigte Daten.
-mavoid-indexierte-Adressen
-mno-vermeiden-indizierte-Adressen
Generieren Sie Code, der versucht, die Verwendung von indiziertem Laden oder Speichern zu vermeiden (nicht zu vermeiden).
Anweisungen. Diese Anweisungen können bei Power6-Prozessoren zu Leistungseinbußen führen
in bestimmten Situationen, z. B. beim Durchschreiten großer Arrays, die einen 16 M
Grenze. Diese Option ist beim Targeting von Power6 standardmäßig aktiviert und deaktiviert
Andernfalls.
-verwirrt-wahnsinnig
-mno-fusion-madd
Generieren Sie Code, der die Gleitkommamultiplikation und -akkumulation verwendet (nicht verwendet).
Anweisungen. Diese Anweisungen werden standardmäßig generiert, wenn Hardware-Gleitkomma
wird genutzt. Die maschinenabhängige -verwirrt-wahnsinnig Option ist jetzt der Maschine zugeordnet-
unabhängig -ffp-vertrag=schnell Option und -mno-fusion-madd ist zugeordnet zu
-ffp-vertrag=aus.
-mmulhw
-mno-mulhw
Generieren Sie Code, der das Halbwort Multiplizieren und Multiplizieren-Akkumulieren verwendet (nicht verwendet).
Anweisungen zu den Prozessoren IBM 405, 440, 464 und 476. Diese Anleitung ist
beim Targeting auf diese Prozessoren standardmäßig generiert.
-mdlmzb
-mno-dlmzb
Generieren Sie Code, der die String-Suche verwendet (nicht verwendet). dlmzb Anleitung zur IBM
405-, 440-, 464- und 476-Prozessoren. Diese Anweisung wird standardmäßig generiert, wenn
auf diese Prozessoren abzielen.
-mno-bit-align
-mbit-ausrichten
Auf System V.4 und eingebetteten PowerPC-Systemen erzwingen (erzwingen) keine Strukturen und Vereinigungen
die Bitfelder enthalten, die auf den Basistyp des Bitfelds ausgerichtet werden sollen.
Zum Beispiel, standardmäßig eine Struktur, die nichts als 8 "vorzeichenlose" Bitfelder von . enthält
Länge 1 ist an einer 4-Byte-Grenze ausgerichtet und hat eine Größe von 4 Byte. Durch die Nutzung
-mno-bit-align, ist die Struktur an einer 1-Byte-Grenze ausgerichtet und 1 Byte groß.
-mno-strict-align
-mstrict-align
Auf System V.4 und eingebetteten PowerPC-Systemen gehen (tun) sie nicht davon aus, dass nicht ausgerichteter Speicher
Referenzen werden vom System verarbeitet.
-mverschiebbar
-mno-verschiebbar
Generieren Sie Code, der es ermöglicht (nicht zulässt), dass eine statische ausführbare Datei in ein Verzeichnis verschoben wird
unterschiedliche Adresse zur Laufzeit. Ein einfacher eingebetteter PowerPC-Systemlader sollte
Verschieben Sie den gesamten Inhalt von ".got2" und 4-Byte-Speicherorten, die in ".fixup" aufgeführt sind
Abschnitt, eine Tabelle mit 32-Bit-Adressen, die von dieser Option generiert werden. Damit das funktioniert, alle
miteinander verknüpfte Objekte müssen mit kompiliert werden -mverschiebbar or -Mrelocatable-Lib.
-mverschiebbar Code richtet den Stapel an einer 8-Byte-Grenze aus.
-Mrelocatable-Lib
-mno-verschiebbare-lib
Like -mverschiebbar, -Mrelocatable-Lib generiert einen ".fixup"-Abschnitt, um statisches zuzulassen
ausführbare Dateien werden zur Laufzeit verschoben, aber -Mrelocatable-Lib verwendet nicht die
kleinere Stapelausrichtung von -mverschiebbar. Objekte kompiliert mit -Mrelocatable-Lib Mai
mit Objekten verknüpft werden, die mit einer beliebigen Kombination der -mverschiebbar Optionen.
-mno-toc
-mtoc
Auf System V.4 und eingebetteten PowerPC-Systemen gehen (tun) Sie nicht davon aus, dass Register 2 enthält
ein Zeiger auf einen globalen Bereich, der auf die im Programm verwendeten Adressen zeigt.
-kleine
-mlittle-endian
Auf System V.4 und eingebetteten PowerPC-Systemen kompilieren Sie Code für den Prozessor in wenig
Endian-Modus. Die -mlittle-endian Option ist die gleiche wie -kleine.
-mbig
-mbig-endian
Kompilieren Sie auf System V.4 und eingebetteten PowerPC-Systemen Code für den Prozessor in großen
Endian-Modus. Die -mbig-endian Option ist die gleiche wie -mbig.
-mdynamic-no-pic
Kompilieren Sie den Code auf Darwin- und Mac OS X-Systemen so, dass er nicht verschoben werden kann, aber das
seine externen Referenzen sind verschiebbar. Der resultierende Code ist geeignet für
Anwendungen, aber keine Shared Libraries.
-msingle-pic-base
Behandeln Sie das Register, das für die PIC-Adressierung verwendet wird, als schreibgeschützt, anstatt es in die Datei zu laden
Prolog für jede Funktion. Für die Initialisierung ist das Laufzeitsystem zuständig
registrieren Sie sich mit einem geeigneten Wert, bevor die Ausführung beginnt.
-mprioitize-restricted-insns=Prioritätsliste
Diese Option steuert die Priorität, die dem eingeschränkten Versandslot zugewiesen wird
Anweisungen während des zweiten Planungsdurchgangs. Das Argument Prioritätsliste nimmt den Wert an
0, 1, oder auch 2 um keine, höchste oder zweithöchste (jeweils) Priorität zuzuweisen
Anweisungen mit eingeschränktem Versandschlitz.
-msched-kostspielig-dep=Abhängigkeitstyp
Diese Option steuert, welche Abhängigkeiten vom Ziel während . als kostspielig angesehen werden
Unterrichtsplanung. Das Argument Abhängigkeitstyp nimmt eine der folgenden
Werte:
nicht Keine Abhängigkeit ist teuer.
alle Alle Abhängigkeiten sind teuer.
true_store_to_load
Eine echte Abhängigkeit von Laden zu Laden ist teuer.
store_to_load
Jede Abhängigkeit von Laden zu Laden ist kostspielig.
Anzahl
Jede Abhängigkeit, für die die Latenz größer oder gleich ist Anzahl ist teuer.
-Minsert-gesteuerte Nops =Schema
Diese Option steuert, welches NOP-Einfügungsschema während der zweiten Planung verwendet wird
passieren. Das Argument Schema nimmt einen der folgenden Werte an:
nicht Fügen Sie keine NOPs ein.
Unterlage Füllen Sie jede Dispatch-Gruppe, die freie Ausgabe-Slots hat, mit NOPs gemäß den
Gruppierung des Planers.
regroup_exact
Fügen Sie NOPs ein, um kostspielige abhängige Insns in separate Gruppen zu zwingen. Genau einfügen
so viele NOPs wie nötig, um ein Gasthaus in eine neue Gruppe zu zwingen, so die Schätzung
Prozessorgruppierung.
Anzahl
Fügen Sie NOPs ein, um kostspielige abhängige Insns in separate Gruppen zu zwingen. Einfügung Anzahl
NOPs, um ein Insn zu einer neuen Gruppe zu erzwingen.
-mcall-sysv
Auf System V.4 und eingebetteten PowerPC-Systemen kompilieren Sie Code unter Verwendung von Aufrufkonventionen, die
Halten Sie sich an den Entwurf des System V Application Binary Interface vom März 1995, PowerPC
Prozessorergänzung. Dies ist die Standardeinstellung, es sei denn, Sie haben GCC mit . konfiguriert
powerpc-*-eabiaix.
-mcall-sysv-eabi
-mcall-eabi
Geben Sie beides an -mcall-sysv und -meabi Optionen.
-mcall-sysv-noeabi
Geben Sie beides an -mcall-sysv und -mno-eabi Optionen.
-mcall-aixdesc
Kompilieren Sie auf System V.4 und eingebetteten PowerPC-Systemen Code für das AIX-Betriebssystem.
-mcall-linux
Kompilieren Sie auf System V.4 und eingebetteten PowerPC-Systemen Code für das Linux-basierte GNU
System funktionieren.
-mcall-freebsd
Kompilieren Sie auf System V.4 und eingebetteten PowerPC-Systemen Code für den FreeBSD-Betrieb
System funktionieren.
-mcall-netbsd
Kompilieren Sie auf System V.4 und eingebetteten PowerPC-Systemen Code für den NetBSD-Betrieb
System funktionieren.
-mcall-openbsd
Kompilieren Sie auf System V.4 und eingebetteten PowerPC-Systemen Code für den OpenBSD-Betrieb
System funktionieren.
-maix-struct-return
Gibt alle Strukturen im Speicher zurück (wie von AIX ABI angegeben).
-msvr4-struct-return
Rückgabestrukturen kleiner als 8 Byte in Registern (wie von der SVR4 ABI spezifiziert).
-mabi=Abi-Typ
Erweitern Sie die aktuelle ABI mit einer bestimmten Erweiterung oder entfernen Sie eine solche Erweiterung. Gültig
Werte sind altivec, keine-altivec, spe, keine spez, ibmlongdouble, ieeeelongdouble, elfv1,
elfv2.
-mabi=spez
Erweitern Sie das aktuelle ABI mit SPE ABI-Erweiterungen. Dies ändert nichts an der Standard-ABI,
stattdessen werden die SPE ABI-Erweiterungen zur aktuellen ABI hinzugefügt.
-mabi=no-spec
Deaktivieren Sie Book-E SPE ABI-Erweiterungen für die aktuelle ABI.
-mabi=ibmlongdouble
Ändern Sie die aktuelle ABI, um IBM Extended-Precision Long Double zu verwenden. Dies ist ein PowerPC
32-Bit-SYSV-ABI-Option.
-mabi=ieeelongdouble
Ändern Sie die aktuelle ABI, um IEEE Extended-Precision Long Double zu verwenden. Dies ist ein PowerPC
32-Bit-Linux-ABI-Option.
-mabi=elfv1
Ändern Sie die aktuelle ABI, um die ELFv1-ABI zu verwenden. Dies ist die Standard-ABI für Big-Endian
PowerPC 64-Bit-Linux. Das Überschreiben der Standard-ABI erfordert spezielle Systemunterstützung und
wird wahrscheinlich auf spektakuläre Weise scheitern.
-mabi=elfv2
Ändern Sie die aktuelle ABI, um die ELFv2-ABI zu verwenden. Dies ist die Standard-ABI für kleine
Endian PowerPC 64-Bit-Linux. Das Überschreiben der Standard-ABI erfordert ein spezielles System
Unterstützung und wird wahrscheinlich auf spektakuläre Weise scheitern.
-mprototyp
-mno-Prototyp
Auf System V.4 und eingebetteten PowerPC-Systemen wird davon ausgegangen, dass alle Aufrufe von Variablenargumenten
Funktionen sind ordnungsgemäß prototypisiert. Andernfalls muss der Compiler eine Anweisung einfügen
vor jedem nicht prototypisierten Aufruf zum Setzen oder Löschen von Bit 6 des Condition-Code-Registers
("CR") um anzugeben, ob Gleitkommawerte im Gleitkomma übergeben werden
registriert, falls die Funktion variable Argumente verwendet. Mit -mprototyp, nur Anrufe
zu prototypisierten Variablenargumentfunktionen das Bit setzen oder löschen.
-msim
Nehmen Sie auf eingebetteten PowerPC-Systemen an, dass das Startmodul aufgerufen wird sim-crt0.o und
dass die Standard-C-Bibliotheken libsim.a und libc.a. Dies ist die Standardeinstellung für
powerpc-*-eabisim Konfigurationen.
-mmvme
Nehmen Sie auf eingebetteten PowerPC-Systemen an, dass das Startmodul aufgerufen wird crt0.o und der
Standard-C-Bibliotheken sind libmvme.a und libc.a.
-verrückt
Nehmen Sie auf eingebetteten PowerPC-Systemen an, dass das Startmodul aufgerufen wird crt0.o und der
Standard-C-Bibliotheken sind libads.a und libc.a.
-mgelbes Messer
Nehmen Sie auf eingebetteten PowerPC-Systemen an, dass das Startmodul aufgerufen wird crt0.o und der
Standard-C-Bibliotheken sind libyk.a und libc.a.
-mvxworks
Geben Sie auf System V.4 und eingebetteten PowerPC-Systemen an, dass Sie für a . kompilieren
VxWorks-System.
-Mitglied
Setzen Sie auf eingebetteten PowerPC-Systemen das Bit "PPC_EMB" im ELF-Flags-Header, um anzuzeigen
zur Verbesserung der Gesundheitsgerechtigkeit Eabi verlängerte Umzüge verwendet werden.
-meabi
-mno-eabi
Auf System V.4 und eingebetteten PowerPC-Systemen halten sich (nicht) an die Embedded
Applications Binary Interface (EABI), eine Reihe von Modifikationen des Systems
V.4 Spezifikationen. Auswahl -meabi bedeutet, dass der Stack auf ein 8-Byte ausgerichtet ist
border wird eine Funktion "__eabi" von "main" aufgerufen, um die EABI-Umgebung einzurichten,
und der -msdaten Option kann sowohl "r2" als auch "r13" verwenden, um auf zwei separate kleine Daten zu verweisen
Bereiche. Auswahl -mno-eabi bedeutet, dass der Stack an einer 16-Byte-Grenze ausgerichtet ist, nein
Die EABI-Initialisierungsfunktion wird von "main" aufgerufen und die -msdaten Option verwendet nur
"r13", um auf einen einzelnen kleinen Datenbereich zu zeigen. Die -meabi Option ist standardmäßig aktiviert, wenn Sie
konfiguriertes GCC mit einem der powerpc*-*-eabi* Optionen.
-msdata=eabi
Setzen Sie auf System V.4 und eingebetteten PowerPC-Systemen kleine initialisierte "const" global und
statische Daten im Abschnitt ".sdata2", auf die das Register "r2" zeigt. klein legen
initialisierte nicht-"const" globale und statische Daten im ".sdata"-Abschnitt, d.h
auf das Register "r13" zeigt. Legen Sie kleine nicht initialisierte globale und statische Daten in die
Abschnitt ".sbss", der neben dem Abschnitt ".sdata" liegt. Die -msdata=eabi zu erhalten
ist unvereinbar mit dem -mverschiebbar Option. Die -msdata=eabi Option setzt auch die
-Mitglied .
-msdata=sysv
Geben Sie auf System V.4 und eingebetteten PowerPC-Systemen kleine globale und statische Daten in die
Abschnitt ".sdata", auf den das Register "r13" zeigt. Setzen Sie kleine nicht initialisierte
globale und statische Daten im Abschnitt ".sbss", der neben ".sdata" liegt
Sektion. Die -msdata=sysv Option ist nicht kompatibel mit -mverschiebbar .
-msdata=Standard
-msdaten
Auf System V.4 und eingebetteten PowerPC-Systemen, wenn -meabi verwendet wird, Code gleich kompilieren
as -msdata=eabi, andernfalls kompilieren Sie Code wie -msdata=sysv.
-msdata=Daten
Fügen Sie auf System V.4 und eingebetteten PowerPC-Systemen kleine globale Daten in die Datei ".sdata" ein.
Sektion. Fügen Sie kleine nicht initialisierte globale Daten in den Abschnitt ".sbss" ein. Verwende nicht
Register "r13", um kleine Daten zu adressieren. Dies ist das Standardverhalten, es sei denn
mehr -msdaten Optionen verwendet werden.
-msdata=keine
-mno-sdata
Legen Sie auf eingebetteten PowerPC-Systemen alle initialisierten globalen und statischen Daten in die Datei ".data"
Abschnitt und alle nicht initialisierten Daten im Abschnitt ".bss".
-mblock-move-inline-limit=num
Inline alle Blockbewegungen (wie Aufrufe von "memcpy" oder Strukturkopien) weniger als oder
gleich num Bytes. Der Mindestwert für num ist 32 Byte auf 32-Bit-Zielen und 64
Byte auf 64-Bit-Zielen. Der Standardwert ist zielspezifisch.
-G num
Setzen Sie auf eingebetteten PowerPC-Systemen globale und statische Elemente kleiner oder gleich num
Bytes in die kleinen Daten- oder BSS-Abschnitte anstelle des normalen Daten- oder BSS-Abschnitts.
Standardmäßig num ist 8. Die -G num switch wird auch an den Linker übergeben. Alle Module
sollte mit dem gleichen kompiliert werden -G num Wert.
-mregnamen
-mno-regnames
Auf System V.4 und eingebetteten PowerPC-Systemen geben (nicht) Registernamen im
Ausgabe in Assemblersprache mit symbolischen Formen.
-mlongcall
-mno-langruf
Gehen Sie standardmäßig davon aus, dass alle Anrufe weit entfernt sind, so dass ein längerer und teurer
Aufrufreihenfolge erforderlich. Dies ist für Anrufe mit mehr als 32 Megabyte erforderlich
(33,554,432 Byte) vom aktuellen Standort. Ein kurzer Anruf wird generiert, wenn die
Compiler weiß, dass der Aufruf nicht so weit weg sein kann. Diese Einstellung kann überschrieben werden durch
das Funktionsattribut "shortcall" oder durch "#pragma langer Anruf(0)".
Einige Linker sind in der Lage, Aufrufe außerhalb der Reichweite zu erkennen und Glue-Code zu generieren
die Fliege. Auf diesen Systemen sind lange Aufrufe unnötig und erzeugen langsameren Code. Wie
dieser Schrift kann der AIX-Linker dies tun, ebenso wie der GNU-Linker für PowerPC/64. Es
Es ist geplant, diese Funktion auch dem GNU-Linker für 32-Bit-PowerPC-Systeme hinzuzufügen.
Auf Darwin/PPC-Systemen generiert "#pragma longcall" "jbsr callee, L42" plus a Filiale
Insel (Klebecode). Die beiden Zieladressen repräsentieren den Angerufenen und die Filiale
Insel. Der Darwin/PPC-Linker bevorzugt die erste Adresse und generiert einen "bl callee"
wenn der PPC-Befehl "bl" den Angerufenen direkt erreicht; andernfalls der Linker
erzeugt "bl L42", um die Zweiginsel anzurufen. Die Zweiginsel wird an das angehängt
Hauptteil der aufrufenden Funktion; es berechnet die vollständige 32-Bit-Adresse des Angerufenen und
springt darauf.
Auf Mach-O (Darwin)-Systemen leitet diese Option die Compiler-Emission zum Kleber für
jeden direkten Aufruf, und der Darwin-Linker entscheidet, ob er verwendet oder verworfen wird.
In Zukunft kann GCC alle Longcall-Spezifikationen ignorieren, wenn der Linker bekannt ist
Kleber erzeugen.
-mtls-marker
-mno-tls-marker
Markieren (nicht markieren) Aufrufe von "__tls_get_addr" mit einer Verschiebung, die die Funktion angibt
Streit. Die Verlagerung ermöglicht es dem Linker, den Funktionsaufruf zuverlässig mit
Anweisungen zum Einrichten von Argumenten für die TLS-Optimierung, die es GCC wiederum ermöglicht, besser zu werden
die Reihenfolge einplanen.
-pGewinde
Fügt Unterstützung für Multithreading mit dem pthreads Bücherei. Diese Option setzt Flags für
sowohl der Präprozessor als auch der Linker.
-mrecip
-mno-rezept
Diese Option ermöglicht die Verwendung der reziproken Schätzung und der reziproken Quadratwurzelschätzung
Anweisungen mit zusätzlichen Newton-Raphson-Schritten zur Erhöhung der Präzision anstelle von
Durchführen einer Division oder Quadratwurzel und Division für Gleitkommaargumente. Du solltest benutzen
-ffast-mathe Option bei Verwendung -mrecip (oder zumindest -funsafe-mathematik-optimierungen,
-nur-endlich-mathematik, -Reziproke-Mathematik und -fno-trapping-mathe). Beachten Sie, dass während der
Der Durchsatz der Sequenz ist in der Regel höher als der Durchsatz der Nicht-
reziproke Anweisung, die Genauigkeit der Sequenz kann um bis zu 2 ulp . verringert werden
(dh der Kehrwert von 1.0 entspricht 0.99999994) für reziproke Quadratwurzeln.
-mrecip=wählen
Diese Option steuert, welche gegenseitigen Schätzungsanweisungen verwendet werden können. wählen ist eine
durch Kommas getrennte Liste von Optionen, denen ein "!" um die Option umzukehren:
alle Aktivieren Sie alle Schätzungsanweisungen.
Standard
Aktivieren Sie die Standardanweisungen, äquivalent zu -mrecip.
keine
Deaktivieren Sie alle Schätzungsanweisungen, äquivalent zu -mno-rezept.
div Aktivieren Sie die reziproken Approximationsanweisungen für Einfach und Doppel
Präzision.
div
Aktivieren Sie die Anweisungen zur reziproken Approximation mit einfacher Genauigkeit.
divid
Aktivieren Sie die Anweisungen zur reziproken Approximation mit doppelter Genauigkeit.
rsqrt
Aktivieren Sie die Anweisungen zur reziproken Quadratwurzel-Approximation sowohl für einzelne als auch für
Doppelte Genauigkeit.
rsqrtf
Aktivieren Sie die Anweisungen zur reziproken Quadratwurzel-Approximation mit einfacher Genauigkeit.
rsqrtd
Aktivieren Sie die Anweisungen zur reziproken Quadratwurzel-Approximation mit doppelter Genauigkeit.
Also zum Beispiel -mrecip=alle,!rsqrtd ermöglicht alle reziproken Schätzungen
Anweisungen, mit Ausnahme der Anweisungen "FRSQRTE", "XSRSQRTEDP" und "XVRSQRTEDP"
die die reziproken Quadratwurzelberechnungen mit doppelter Genauigkeit handhaben.
-mrecip-Präzision
-mno-recip-precision
Gehen Sie davon aus (nicht davon auszugehen), dass die gegenseitigen Schätzungsanweisungen höhere
Präzisionsschätzungen als vom PowerPC ABI vorgeschrieben. Auswahl -mcpu=power6,
-mcpu=power7 or -mcpu=power8 wählt automatisch aus -mrecip-Präzision. Der Doppelgänger-
Anweisungen zur Präzisions-Quadratwurzel-Schätzung werden nicht standardmäßig bei niedrigen
Präzisionsmaschinen, da sie keine Schätzung liefern, die nach drei . konvergiert
Schritte.
-mveclibabi=tippe
Gibt den ABI-Typ an, der zum Vektorisieren von systeminternen Elementen mithilfe einer externen Bibliothek verwendet werden soll.
Der einzige derzeit unterstützte Typ ist Masse, die die Verwendung von IBMs Mathematical
Acceleration Subsystem (MASS)-Bibliotheken zur Vektorisierung intrinsischer Elemente mit externen
Bibliotheken. GCC sendet derzeit Anrufe an "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" und
"tanhf4" beim Generieren von Code für power7. Beide -ftree-vektorisieren und
-funsafe-mathematik-optimierungen muss auch aktiviert sein. Die MASS-Bibliotheken müssen
zur Linkzeit angegeben.
-mfriz
-mno-friz
Generieren (nicht generieren) die Anweisung "friz", wenn die -funsafe-mathematik-optimierungen
Option wird verwendet, um das Runden von Gleitkommawerten auf 64-Bit-Ganzzahlen zu optimieren und
zurück zum Gleitkomma. Die Anweisung "friz" gibt nicht denselben Wert zurück, wenn die
Gleitkommazahl ist zu groß, um in eine ganze Zahl zu passen.
-mZeiger-auf-verschachtelte-Funktionen
-mno-pointer-to-nested-functions
Generieren (nicht generieren) Code zum Laden des statischen Kettenregisters ("r11"), wenn
Aufruf über einen Zeiger auf AIX- und 64-Bit-Linux-Systemen, bei denen ein Funktionszeiger
zeigt auf einen 3-Wort-Deskriptor, der die Funktionsadresse und den zu ladenden TOC-Wert angibt
Register "r2" und statischer Kettenwert, der in Register "r11" geladen werden soll. Die
-mZeiger-auf-verschachtelte-Funktionen ist standardmäßig aktiviert. Sie können nicht durch Zeiger auf aufrufen
verschachtelte Funktionen oder Zeiger auf Funktionen, die in anderen Sprachen kompiliert wurden, die die
statische Kette, wenn Sie verwenden -mno-pointer-to-nested-functions.
-msave-toc-indirekt
-mno-save-toc-indirekt
Generieren (nicht generieren) Code, um den Inhaltsverzeichniswert am reservierten Stack-Speicherort zu speichern
im Funktionsprolog, wenn die Funktion über einen Zeiger auf AIX und 64-Bit aufruft
Linux-Systeme. Wenn der TOC-Wert nicht im Prolog gespeichert wird, wird er kurz davor gespeichert
der Aufruf über den Zeiger. Die -mno-save-toc-indirekt Option ist die Standardeinstellung.
-mcompat-align-parm
-mno-compat-align-parm
Generieren (nicht generieren) Code, um Strukturparameter mit maximaler Ausrichtung zu übergeben
von 64 Bit, für die Kompatibilität mit älteren Versionen von GCC.
Ältere Versionen von GCC (vor 4.9.0) haben einen Strukturparameter fälschlicherweise nicht ausgerichtet
an einer 128-Bit-Grenze, wenn diese Struktur ein Element enthielt, das 128-Bit erforderte
Ausrichtung. Dies wird in neueren Versionen von GCC korrigiert. Diese Option kann verwendet werden
um Code zu generieren, der mit Funktionen kompatibel ist, die mit älteren Versionen von kompiliert wurden
GCC.
Die -mno-compat-align-parm Option ist die Standardeinstellung.
RX Optionen
Diese Befehlszeilenoptionen sind für RX-Ziele definiert:
-m64bit-doubles
-m32bit-doubles
Stellen Sie den Datentyp "doppelt" auf 64 Bit (-m64bit-doubles) oder 32 Bit (-m32bit-doubles)
in Größe. Die Standardeinstellung ist -m32bit-doubles. Note RX-Gleitkomma-Hardware funktioniert nur
auf 32-Bit-Werten, weshalb der Standardwert ist -m32bit-doubles.
-fpu
-nofpu
Aktiviert (-fpu) oder deaktiviert (-nofpu) die Verwendung von RX-Gleitkomma-Hardware. Die
Standard ist für die RX600-Serie aktiviert und für die RX200-Serie deaktiviert.
Gleitkommabefehle werden nur für 32-Bit-Gleitkommawerte generiert,
die FPU-Hardware wird jedoch nicht für Doubles verwendet, wenn die -m64bit-doubles Option ist
benutzt.
Note Besitzt das -fpu Option ist dann aktiviert -funsafe-mathematik-optimierungen ist auch aktiviert
automatisch. Dies liegt daran, dass die RX FPU-Anweisungen selbst unsicher sind.
-mcpu=Name
Wählt den Typ der RX-CPU aus, die als Ziel verwendet werden soll. Derzeit werden drei Typen unterstützt, die
Generika RX600 und RX200 Serienhardware und die spezifischen RX610 ZENTRALPROZESSOR. Die Standardeinstellung ist
RX600.
Der einzige Unterschied zwischen RX600 und RX610 ist, dass das RX610 unterstützt nicht die
Anweisung "MVTIPL".
Die RX200 Serie hat keine Hardware-Gleitkommaeinheit und so -nofpu aktiviert
standardmäßig, wenn dieser Typ ausgewählt ist.
-mbig-endian-data
-mlittle-Endian-Daten
Speichern Sie Daten (aber keinen Code) im Big-Endian-Format. Die Standardeinstellung ist
-mlittle-Endian-Daten, dh um Daten im Little-Endian-Format zu speichern.
-msmall-data-limit=N
Gibt die maximale Größe in Bytes von globalen und statischen Variablen an, die platziert werden können
in den kleinen Datenbereich. Die Verwendung des kleinen Datenbereichs kann zu kleineren und schnelleren
Code, aber die Größe des Bereichs ist begrenzt und es liegt am Programmierer, dies sicherzustellen
der Bereich läuft nicht über. Auch wenn der kleine Datenbereich verwendet wird einer der RX's
registers (normalerweise "r13") ist für die Verwendung reserviert, die auf diesen Bereich zeigt, also ist es nicht
mehr zur Verwendung durch den Compiler verfügbar. Dies kann zu langsameren und/oder größeren
Code, wenn Variablen auf den Stack geschoben werden, anstatt in diesem Register gehalten zu werden.
Beachten Sie, dass allgemeine Variablen (Variablen, die nicht initialisiert wurden) und Konstanten
nicht in den kleinen Datenbereich platziert, da sie anderen Abschnitten im
ausführbare Ausgabe.
Der Standardwert ist Null, wodurch diese Funktion deaktiviert wird. Beachten Sie, dass diese Funktion nicht
standardmäßig aktiviert mit höheren Optimierungsstufen (-O2 usw) wegen der
potenziell nachteilige Auswirkungen der Reservierung eines Registers. Es liegt am Programmierer
zu experimentieren und herauszufinden, ob diese Funktion für ihr Programm von Vorteil ist. Sehen
die Beschreibung der -mpid Option für eine Beschreibung, wie das eigentliche Register zu
halten wird der kleine Datenbereichszeiger gewählt.
-msim
-mno-sim
Verwenden Sie die Simulatorlaufzeit. Standardmäßig wird die Board-spezifische Laufzeit von libgloss verwendet.
-mas100-Syntax
-mno-as100-Syntax
Verwenden Sie beim Generieren von Assembler-Ausgaben eine Syntax, die mit Renesas AS100 . kompatibel ist
Monteur. Diese Syntax kann auch vom GAS-Assembler verarbeitet werden, hat aber einige
Einschränkungen, sodass es nicht standardmäßig generiert wird.
-mmax-konstante-Größe=N
Gibt die maximale Größe in Bytes einer Konstanten an, die als Operand in verwendet werden kann
eine RX-Anweisung. Obwohl der RX-Befehlssatz Konstanten von bis zu 4 . zulässt
Bytes in der Länge, die in Anweisungen verwendet werden sollen, ein längerer Wert entspricht einem längeren
Anweisung. Daher kann es unter Umständen von Vorteil sein, die Größe von
Konstanten, die in Anweisungen verwendet werden. Zu große Konstanten sind stattdessen
in einen konstanten Pool gelegt und über Registerindirektion referenziert.
Der Wert N kann zwischen 0 und 4 liegen. Ein Wert von 0 (Standard) oder 4 bedeutet, dass
Konstanten jeder Größe sind erlaubt.
-Entspann dich
Aktivieren Sie die Linker-Relaxation. Linker-Relaxation ist ein Prozess, bei dem der Linker versucht,
um die Größe eines Programms zu reduzieren, indem kürzere Versionen verschiedener Anweisungen gefunden werden.
Standardmäßig deaktiviert
-mint-register=N
Geben Sie die Anzahl der Register an, die für schnelle Interrupt-Handler-Funktionen reserviert werden sollen. Die
Wert N kann zwischen 0 und 4 liegen. Ein Wert von 1 bedeutet, dass das Register "r13" reserviert ist
für die ausschließliche Verwendung von schnellen Interrupt-Handlern. Ein Wert von 2 Reserven "r13" und
"r12". Ein Wert von 3 Reserven "r13", "r12" und "r11" und ein Wert von 4 Reserven "r13"
durch "r10". Der Standardwert 0 reserviert keine Register.
-msave-acc-in-unterbricht
Gibt an, dass Interrupt-Handler-Funktionen das Akkumulatorregister beibehalten sollen.
Dies ist nur erforderlich, wenn normaler Code zum Beispiel das Akkumulatorregister verwenden könnte
weil es 64-Bit-Multiplikationen durchführt. Standardmäßig wird der Akkumulator ignoriert
da dies die Interrupt-Handler schneller macht.
-mpid
-mno-pid
Ermöglicht die Generierung von positionsunabhängigen Daten. Wenn aktiviert jeder Zugriff auf
konstante Daten erfolgen über einen Offset von einer in einem Register gehaltenen Basisadresse. Dies
ermöglicht die Positionsbestimmung von konstanten Daten zur Laufzeit, ohne dass dies erforderlich ist
die ausführbare Datei verschoben werden, was für eingebettete Anwendungen mit engen
Speicherbeschränkungen. Daten, die geändert werden können, sind von dieser Option nicht betroffen.
Beachten Sie, dass die Verwendung dieser Funktion ein Register, normalerweise "r13", für die konstanten Daten reserviert
Basisadresse. Dies kann zu langsamerem und/oder größerem Code führen, insbesondere bei komplizierten
Funktionen.
Das tatsächlich gewählte Register zum Halten der konstanten Datenbankadresse hängt davon ab, ob
-msmall-data-limit und / oder der -Minze-Register Befehlszeilenoptionen sind aktiviert.
Beginnend mit Register "r13" und abwärts werden zuerst Register zugewiesen
um die Anforderungen von zu erfüllen -Minze-Register und dann -mpid und schlussendlich
-msmall-data-limit. Somit ist es möglich, dass das kleine Datenbereichsregister "r8" ist.
wenn beides -Minze-Register=4 und -mpid werden in der Kommandozeile angegeben.
Standardmäßig ist diese Funktion nicht aktiviert. Die Standardeinstellung kann über die -mno-pid
Befehlszeilenoption.
-mno-warn-mehrere-schnelle-Interrupts
-mwarn-mehrere-schnelle-Interrupts
Verhindert, dass GCC eine Warnmeldung ausgibt, wenn es mehr als einen schnellen Interrupt findet
-Handler beim Kompilieren einer Datei. Standardmäßig wird für jedes Extra eine Warnung ausgegeben
schneller Interrupt-Handler gefunden, da der RX nur einen solchen Interrupt unterstützt.
Hinweis: Die generische GCC-Befehlszeilenoption -fixiert-reg hat besondere Bedeutung für den RX
port bei Verwendung mit dem Funktionsattribut "interrupt". Dieses Attribut zeigt a
Funktion zur Verarbeitung schneller Interrupts. GCC stellt sicher, dass nur die Register verwendet werden
"r10", "r11", "r12" und/oder "r13" und nur unter der Voraussetzung, dass der normale Gebrauch des
entsprechende Register wurden über die -fixiert-reg or -Minze-Register
Befehlszeilenoptionen.
S / 390 und zSerie Optionen
Dies sind die -m Optionen, die für die S/390- und zSeries-Architektur definiert sind.
-mhard-float
-msoft-float
Verwenden (nicht verwenden) die Hardware-Gleitkommabefehle und -register für Gleitkomma-
Punktoperationen. Wann -msoft-float angegeben, Funktionen in libgcc.a sind gewöhnt an
Gleitkommaoperationen ausführen. Wann -mhard-float angegeben ist, wird der Compiler
erzeugt IEEE-Gleitkommabefehle. Dies ist die Standardeinstellung.
-mhard-dfp
-mno-hard-dfp
Verwenden (nicht verwenden) die Hardware-Dezimal-Gleitkomma-Anweisungen für Dezimal-
Gleitkomma-Operationen. Wann -mno-hard-dfp angegeben, Funktionen in libgcc.a sind
verwendet, um Dezimal-Gleitkomma-Operationen durchzuführen. Wann -mhard-dfp angegeben ist, die
Compiler generiert Dezimal-Gleitkomma-Hardware-Anweisungen. Dies ist die Standardeinstellung
für -marsch=z9-ec oder höher.
-mlong-double-64
-mlong-double-128
Diese Schalter steuern die Größe des Typs "Long Double". Eine Größe von 64 Bit macht die
Typ "long double" entspricht dem Typ "double". Dies ist die Standardeinstellung.
-mbackchain
-mno-backchain
Speichern (nicht speichern) der Adresse des Frames des Aufrufers als Backchain-Zeiger in die
Stack-Frame des Angerufenen. Möglicherweise ist eine Backchain erforderlich, um das Debuggen mit Tools zu ermöglichen, die
die Informationen zum DWARF 2-Aufrufrahmen nicht verstehen. Wann -mno-gepackter-Stapel in
Effekt, der Backchain-Zeiger wird am unteren Rand des Stapelrahmens gespeichert; Wenn
-mpacked-stack in Kraft ist, wird die Backchain in das oberste Wort des gelegt
96/160 Byte Registerspeicherbereich.
Im Allgemeinen Code kompiliert mit -mbackchain ist aufrufkompatibel mit Code, der mit kompiliert wurde
-mmo-Rückenkette; Die Verwendung der Backchain für Debugging-Zwecke erfordert jedoch normalerweise
mit dem die ganze Binärdatei aufgebaut ist -mbackchain. Beachten Sie, dass die Kombination von
-mbackchain, -mpacked-stack und -mhard-float wird nicht unterstützt. Um eine zu bauen
Linux-Kernel verwenden -msoft-float.
Standardmäßig wird die Backchain nicht beibehalten.
-mpacked-stack
-mno-gepackter-Stapel
Verwenden (nicht verwenden) Sie das gepackte Stapellayout. Wann -mno-gepackter-Stapel angegeben ist, die
Compiler verwendet die alle Felder des 96/160-Byte-Registerspeicherbereichs nur für ihre
Standardzweck; ungenutzte Felder beanspruchen immer noch Stapelplatz. Wann -mpacked-stack is
angegeben, werden die Register-Save-Slots am oberen Rand des Register-Saves dicht gepackt
Bereich; ungenutzter Platz wird für andere Zwecke wiederverwendet, was eine effizientere Nutzung ermöglicht
der zur Verfügung stehende Stapelplatz. Wenn jedoch -mbackchain ist auch in Kraft, die oberste
Wort des Speicherbereichs wird immer verwendet, um die Backchain und die Rücksendeadresse zu speichern
register wird immer zwei Worte unterhalb der Backchain gespeichert.
Solange die Stack-Frame-Backchain nicht verwendet wird, wird Code generiert mit -mpacked-stack
ist anrufkompatibel mit Code generiert mit -mno-gepackter-Stapel. Beachten Sie, dass einige Nicht-FSF
Versionen von GCC 2.95 für S/390 oder zSeries generierten Code, der den Stack-Frame verwendet
Backchain zur Laufzeit, nicht nur für Debugging-Zwecke. Ein solcher Code ist kein Anruf-
kompatibel mit Code kompiliert mit -mpacked-stack. Beachten Sie auch, dass die Kombination von
-mbackchain, -mpacked-stack und -mhard-float wird nicht unterstützt. Um eine zu bauen
Linux-Kernel verwenden -msoft-float.
Standardmäßig wird das gepackte Stapellayout nicht verwendet.
-msmall-exec
-mno-kleine-exec
Generieren (oder nicht generieren) von Code mit der Anweisung "bras", um eine Unterroutine auszuführen
Anrufe. Dies funktioniert nur zuverlässig, wenn die Gesamtgröße der ausführbaren Datei 64 KB nicht überschreitet.
Standardmäßig wird stattdessen die Anweisung "basr" verwendet, die dies nicht hat
Einschränkung.
-m64
-m31
Wann -m31 angegeben ist, generieren Sie Code, der GNU/Linux für S/390 ABI entspricht. Wann
-m64 angegeben ist, generieren Sie Code, der mit GNU/Linux für zSeries ABI kompatibel ist. Dies
ermöglicht es GCC insbesondere, 64-Bit-Anweisungen zu generieren. Für die s390 Ziele, die
Standard ist -m31, Während die s390x Ziele standardmäßig auf -m64.
-mzarch
-Mesa
Wann -mzarch angegeben ist, generieren Sie Code mit den Anweisungen, die auf verfügbar sind
z/Architektur. Wann -Mesa angegeben ist, generieren Sie Code anhand der Anweisungen
verfügbar auf ESA/390. Beachten Sie, dass -Mesa ist nicht möglich mit -m64. Beim Generieren
Code, der mit GNU/Linux für S/390 ABI kompatibel ist, die Standardeinstellung ist -Mesa. Beim Generieren
Code, der mit GNU/Linux für zSeries ABI kompatibel ist, der Standardwert ist -mzarch.
-mmvcle
-mno-mvcle
Generieren (oder nicht generieren) von Code mit der Anweisung "mvcle", um den Block auszuführen
bewegt. Wann -mno-mvcle angegeben ist, verwenden Sie stattdessen eine "mvc"-Schleife. Dies ist die Standardeinstellung
es sei denn, die Größe wird optimiert.
-mdebug
-mno-debug
Drucken (oder nicht drucken) zusätzlicher Debug-Informationen beim Kompilieren. Die Standardeinstellung ist
um keine Debug-Informationen zu drucken.
-marsch=CPU-Typ
Generieren Sie Code, der weiter ausgeführt wird CPU-Typ, das ist der Name eines Systems, das a . repräsentiert
bestimmten Prozessortyp. Mögliche Werte für CPU-Typ sind g5, g6, z900, z990, z9-109,
z9-ec, z10, z196, zEC12 und z13. Beim Generieren von Code mithilfe der Anweisungen
verfügbar auf z/Architecture, die Standardeinstellung ist -marsch=z900. Andernfalls ist die Standardeinstellung
-marsch=g5.
-mtune=CPU-Typ
Stellen Sie ein CPU-Typ alles Zutreffende über den generierten Code, außer dem ABI
und die verfügbaren Anweisungen. Die Liste der CPU-Typ Werte sind die gleichen wie für
-März. Der Standardwert ist der Wert für -März.
-mtpf-spur
-mno-tpf-trace
Generieren Sie Code, der Trace-Routinen in TPF-OS-spezifischen Verzweigungen hinzufügt (nicht hinzufügt).
im Betriebssystem. Diese Option ist standardmäßig deaktiviert, auch beim Kompilieren für die
TPF-Betriebssystem.
-verwirrt-wahnsinnig
-mno-fusion-madd
Generieren Sie Code, der die Gleitkommamultiplikation und -akkumulation verwendet (nicht verwendet).
Anweisungen. Diese Anweisungen werden standardmäßig generiert, wenn Hardware-Gleitkomma
wird eingesetzt.
-mwarn-framesize=Rahmengröße
Geben Sie eine Warnung aus, wenn die aktuelle Funktion die angegebene Framegröße überschreitet. Denn das ist
eine Überprüfung zur Kompilierzeit, es muss kein wirkliches Problem sein, wenn das Programm läuft. Es
soll Funktionen identifizieren, die höchstwahrscheinlich einen Stack-Überlauf verursachen. es ist
nützlich, um in einer Umgebung mit begrenzter Stack-Größe verwendet zu werden, zB dem Linux-Kernel.
-mwarn-dynamicstack
Geben Sie eine Warnung aus, wenn die Funktion "alloca" aufruft oder Arrays mit dynamischer Größe verwendet. Dies
ist im Allgemeinen eine schlechte Idee mit einer begrenzten Stapelgröße.
-mstack-guard=Stapelschutz
-mstack-size=Stapelgrösse
Wenn diese Optionen bereitgestellt werden, gibt das S/390-Backend zusätzliche Anweisungen in der
Funktionsprolog, der eine Falle auslöst, wenn die Stapelgröße ist Stapelschutz Bytes über dem
Stapelgrösse (Denken Sie daran, dass der Stack auf S/390 nach unten wächst). Wenn die Stapelschutz
Option wird weggelassen die kleinste Potenz von 2 größer als die Framegröße des kompilierten
Funktion gewählt wird. Diese Optionen sollen verwendet werden, um das Debuggen des Stapels zu unterstützen
Überlaufprobleme. Der zusätzlich ausgegebene Code verursacht nur wenig Overhead und
somit auch in produktionsähnlichen Systemen ohne höhere Leistung einsetzbar
Degradierung. Die angegebenen Werte müssen exakte Potenzen von 2 sein und Stapelgrösse muß sein
größer als Stapelschutz ohne 64k zu überschreiten. Um effizient zu sein, ist das Extra
Code geht davon aus, dass der Stack an einer Adresse beginnt, die auf den Wert ausgerichtet ist
gegeben durch Stapelgrössedem „Vermischten Geschmack“. Seine Stapelschutz Option nur in Verbindung mit
Stapelgrösse.
-mhotpatch=Vorworte,Nach-Halbwörter
Bei aktivierter Hotpatch-Option wird ein Funktionsprolog "Hotpatch" generiert für
alle Funktionen in der Kompilationseinheit. Dem Funktionslabel wird das angegebene . vorangestellt
Anzahl der Zwei-Byte-NOP-Anweisungen (Vorworte, maximal 1000000). Nach dem
Etikett, 2 * Nach-Halbwörter Bytes werden angehängt, wobei die größten NOP-ähnlichen Anweisungen verwendet werden
die Architektur erlaubt (maximal 1000000).
Wenn beide Argumente null sind, ist Hotpatching deaktiviert.
Diese Option kann für einzelne Funktionen mit dem Attribut "hotpatch" übersteuert werden.
Score Optionen
Diese Optionen sind für Score-Implementierungen definiert:
-meb
Kompilieren Sie Code für den Big-Endian-Modus. Dies ist die Standardeinstellung.
-mel
Kompilieren Sie den Code für den Little-Endian-Modus.
-mnhwloop
Deaktivieren Sie die Generierung von "bcnz"-Anweisungen.
-Muls
Aktivieren Sie die Generierung von nicht ausgerichteten Lade- und Speicheranweisungen.
-mmac
Aktivieren Sie die Verwendung von Multiply-Accumulate-Anweisungen. Standardmäßig deaktiviert.
-mscore5
Geben Sie SCORE5 als Zielarchitektur an.
-mscore5u
Geben Sie SCORE5U der Zielarchitektur an.
-mscore7
Geben Sie SCORE7 als Zielarchitektur an. Dies ist die Standardeinstellung.
-mscore7d
Geben Sie SCORE7D als Zielarchitektur an.
SH Optionen
Diese -m Optionen sind für die SH-Implementierungen definiert:
-m1 Code für SH1 generieren.
-m2 Code für SH2 generieren.
-m2e
Code für SH2e generieren.
-m2a-nofpu
Generieren Sie Code für die SH2a ohne FPU oder für eine SH2a-FPU so, dass die
Gleitkommaeinheit wird nicht verwendet.
-m2a-nur-Einzel
Generieren Sie Code für die SH2a-FPU, so dass kein Gleitkomma mit doppelter Genauigkeit
Operationen verwendet werden.
-m2a-Einzel
Generieren Sie Code für die SH2a-FPU unter der Annahme, dass die Gleitkommaeinheit in einfacher Genauigkeit ist
Modus standardmäßig.
-m2a
Generieren Sie Code für die SH2a-FPU unter der Annahme, dass die Gleitkommaeinheit doppelt genau ist
Modus standardmäßig.
-m3 Code für SH3 generieren.
-m3e
Code für SH3e generieren.
-m4-nofpu
Generieren Sie Code für den SH4 ohne Gleitkommaeinheit.
-m4-nur-einzeln
Generieren Sie Code für den SH4 mit einer Gleitkommaeinheit, die nur Single-
präzise Arithmetik.
-m4-Einzel
Generieren Sie Code für den SH4 unter der Annahme, dass sich die Gleitkommaeinheit im Modus mit einfacher Genauigkeit befindet
standardmäßig.
-m4 Code für SH4 generieren.
-m4-100
Code für SH4-100 generieren.
-m4-100-nofpu
Generieren Sie Code für SH4-100 so, dass die Gleitkommaeinheit nicht verwendet wird.
-m4-100-einzeln
Generieren Sie Code für SH4-100 unter der Annahme, dass sich die Gleitkommaeinheit im Modus mit einfacher Genauigkeit befindet
standardmäßig.
-m4-100-nur-Einzel
Generieren Sie Code für SH4-100 so, dass kein Gleitkomma mit doppelter Genauigkeit
Operationen verwendet werden.
-m4-200
Code für SH4-200 generieren.
-m4-200-nofpu
Generieren Sie Code für SH4-200 ohne so, dass die Gleitkommaeinheit nicht ist
benutzt.
-m4-200-einzeln
Generieren Sie Code für SH4-200 unter der Annahme, dass sich die Gleitkommaeinheit im Modus mit einfacher Genauigkeit befindet
standardmäßig.
-m4-200-nur-Einzel
Generieren Sie Code für SH4-200 so, dass kein Gleitkomma mit doppelter Genauigkeit
Operationen verwendet werden.
-m4-300
Code für SH4-300 generieren.
-m4-300-nofpu
Generieren Sie Code für SH4-300 ohne so, dass die Gleitkommaeinheit nicht ist
benutzt.
-m4-300-einzeln
Generieren Sie Code für SH4-300 so, dass kein Gleitkomma mit doppelter Genauigkeit
Operationen verwendet werden.
-m4-300-nur-Einzel
Generieren Sie Code für SH4-300 so, dass kein Gleitkomma mit doppelter Genauigkeit
Operationen verwendet werden.
-m4-340
Code für SH4-340 generieren (keine MMU, keine FPU).
-m4-500
Code für SH4-500 generieren (keine FPU). Geht vorbei -isa=sh4-nofpu zum Monteur.
-m4a-nofpu
Generieren Sie Code für den SH4al-dsp oder für einen SH4a so, dass die Gleitkomma
Einheit wird nicht verwendet.
-m4a-nur-Einzel
Generieren Sie Code für den SH4a, so dass kein Gleitkomma mit doppelter Genauigkeit
Operationen verwendet werden.
-m4a-Einzel
Generieren Sie Code für den SH4a unter der Annahme, dass die Gleitkommaeinheit eine einfache Genauigkeit hat
Modus standardmäßig.
-m4a
Code für SH4a generieren.
-m4al
Das gleiche wie -m4a-nofpu, außer dass es implizit passiert -dsp zum Monteur. GCC
erzeugt im Moment keine DSP-Anweisungen.
-m5-32media
32-Bit-Code für SHmedia generieren.
-m5-32media-nofpu
32-Bit-Code für SHmedia so generieren, dass die Gleitkommaeinheit nicht
benutzt.
-m5-64media
64-Bit-Code für SHmedia generieren.
-m5-64media-nofpu
64-Bit-Code für SHmedia so generieren, dass die Gleitkommaeinheit nicht
benutzt.
-m5-kompakt
Code für SHcompact generieren.
-m5-compact-nofpu
Generieren Sie Code für SHcompact so, dass die Gleitkommaeinheit nicht verwendet wird.
-mb Kompilieren Sie Code für den Prozessor im Big-Endian-Modus.
-ml Kompilieren Sie den Code für den Prozessor im Little-Endian-Modus.
-mdalign
Ausrichten verdoppelt sich an 64-Bit-Grenzen. Beachten Sie, dass dies die Aufrufkonventionen ändert,
und daher funktionieren einige Funktionen aus der Standard-C-Bibliothek nicht, es sei denn, Sie kompilieren neu
es zuerst mit -mdalign.
-Entspann dich
Kürzen Sie nach Möglichkeit einige Adressreferenzen zur Linkzeit; verwendet die Linker-Option
-entspannen.
-großzügig
Verwenden Sie 32-Bit-Offsets in "Switch"-Tabellen. Standardmäßig werden 16-Bit-Offsets verwendet.
-mbitops
Aktivieren Sie die Verwendung von Bitmanipulationsbefehlen auf SH2A.
-mfmovd
Aktivieren Sie die Verwendung der Anweisung "fmovd". Prüfen -mdalign für Ausrichtungsbeschränkungen.
-mrenesas
Halten Sie sich an die von Renesas definierten Aufrufkonventionen.
-mno-renesas
Halten Sie sich an die für GCC definierten Aufrufkonventionen vor den Renesas-Konventionen
Wir sind verfügbar. Diese Option ist die Standardeinstellung für alle Ziele der SH-Toolchain.
-Mnomacsave
Markieren Sie das "MAC"-Register als call-clobbered, auch wenn -mrenesas gegeben ist.
-mieee
-mno-ieee
Kontrollieren Sie die IEEE-Konformität von Gleitkommavergleichen, was sich auf die Handhabung auswirkt
von Fällen, in denen das Ergebnis eines Vergleichs ungeordnet ist. Standardmäßig -mieee is
implizit aktiviert. Wenn -nur-endlich-mathematik aktiviert -mno-ieee implizit gesetzt ist,
Dies führt zu schnelleren Gleitkomma-Größer-Gleich- und -Ungleich-Vergleichen. Die
implizite Einstellungen können überschrieben werden, indem entweder -mieee or -mno-ieee.
-minline-ic_invalidate
Inline-Code zum Ungültigmachen von Befehls-Cache-Einträgen nach dem Einrichten der verschachtelten Funktion
Trampoline. Diese Option hat keine Auswirkung, wenn -musermode ist in Kraft und das ausgewählte
Codegenerierungsoption (zB -m4) lässt die Verwendung der Anweisung "icbi" nicht zu.
Wenn die gewählte Codegenerierungsoption die Verwendung des "icbi" nicht zulässt
Anweisung, und -musermode nicht in Kraft ist, manipuliert der Inline-Code die
Befehlscache-Adressfeld direkt mit einem assoziativen Schreiben. Das ist nicht nur
erfordert zur Laufzeit den privilegierten Modus, schlägt aber auch fehl, wenn die Cache-Zeile
über den TLB abgebildet und nicht abgebildet.
-missize
Dump-Befehlsgröße und Position im Assembly-Code.
-mpadstruct
Diese Option ist veraltet. Es füllt Strukturen auf ein Vielfaches von 4 Bytes auf, was
nicht kompatibel mit dem SH ABI.
-matomisches-modell=Modell
Setzt das Modell der atomaren Operationen und zusätzlichen Parameter als Komma getrennt
aufführen. Einzelheiten zu den eingebauten atomaren Funktionen finden Sie unter __atomar Eingebautedem „Vermischten Geschmack“. Seine
Folgende Modelle und Parameter werden unterstützt:
keine
Deaktivieren Sie vom Compiler generierte Atomsequenzen und geben Sie Bibliotheksaufrufe für Atomic aus
Operationen. Dies ist die Standardeinstellung, wenn das Ziel nicht "sh*-*-linux*" ist.
weich-gusa
Generieren Sie GNU/Linux-kompatible atomare Sequenzen der gUSA-Software für die atomaren integrierten
bei Funktionen. Die generierten Atomsequenzen benötigen zusätzliche Unterstützung durch die
Interrupt-/Ausnahmebehandlungscode des Systems und sind nur für SH3* und . geeignet
SH4*-Single-Core-Systeme. Diese Option ist standardmäßig aktiviert, wenn das Ziel
"sh*-*-linux*" und SH3* oder SH4*. Wenn das Ziel SH4A ist, ist diese Option auch
verwendet teilweise die atomaren Hardware-Befehle "movli.l" und "movco.l" um
effizienteren Code erstellen, es sei denn streng angegeben.
weich-tcb
Generieren Sie atomare Softwaresequenzen, die eine Variable in der Thread-Steuerung verwenden
Block. Dies ist eine Variation der gUSA-Sequenzen, die auch auf SH1 verwendet werden kann*
und SH2*-Ziele. Die generierten Atomsequenzen benötigen zusätzliche Unterstützung von
den Interrupt-/Ausnahme-Handling-Code des Systems und sind nur geeignet für
Single-Core-Systeme. Bei Verwendung dieses Modells ist die gbr-offset= Parameter muss sein
ebenfalls angegeben.
weich-imask
Generieren Sie atomare Softwaresequenzen, die Interrupts vorübergehend deaktivieren, indem Sie einstellen
"SR.IMASK = 1111". Dieses Modell funktioniert nur, wenn das Programm im privilegierten Modus ausgeführt wird
und ist nur für Single-Core-Systeme geeignet. Zusätzliche Unterstützung durch die
Interrupt-/Ausnahmebehandlungscode des Systems ist nicht erforderlich. Dieses Modell ist
standardmäßig aktiviert, wenn das Ziel "sh*-*-linux*" und SH1* oder SH2* ist.
hart-llcs
Generieren Sie atomare Hardwaresequenzen mit den Anweisungen "movli.l" und "movco.l"
nur. Dies ist nur auf SH4A verfügbar und eignet sich für Multicore-Systeme.
Da die Hardware-Anweisungen nur 32-Bit-Atomvariablen-Zugriff auf 8 . unterstützen
oder 16-Bit-Variablen wird mit 32-Bit-Zugriffen emuliert. Code kompiliert damit
Option ist auch mit anderen Software-Atommodell-Interrupt/Ausnahme kompatibel
Handlingsystemen, wenn sie auf einem SH4A-System ausgeführt werden. Zusätzliche Unterstützung durch die
Interrupt-/Ausnahmebehandlungscode des Systems ist für dieses Modell nicht erforderlich.
gbr-offset=
Dieser Parameter gibt den Offset in Bytes der Variablen in der Thread-Steuerung an
Blockstruktur, die von den generierten Atomsequenzen verwendet werden soll, wenn die
weich-tcb Modell gewählt wurde. Bei anderen Modellen wird dieser Parameter ignoriert.
Der angegebene Wert muss ein ganzzahliges Vielfaches von vier sein und im Bereich von 0-1020 liegen.
streng
Dieser Parameter verhindert die gemischte Verwendung mehrerer atomarer Modelle, selbst wenn sie
kompatibel und lässt den Compiler atomare Sequenzen der angegebenen
nur Modell.
-mtas
Generieren Sie den Opcode "tas.b" für "__atomic_test_and_set". Beachten Sie, dass je nach
Bei bestimmten Hardware- und Softwarekonfigurationen kann dies die Gesamtleistung beeinträchtigen
aufgrund des Leerens der Operanden-Cache-Zeilen, die durch den "tas.b"-Befehl impliziert werden. Auf
Mehrkern-SH4A-Prozessoren muss die Anweisung "tas.b" mit Vorsicht verwendet werden, da sie
kann bei bestimmten Cache-Konfigurationen zu Datenbeschädigungen führen.
-mrefergot
Wenn Sie positionsunabhängigen Code generieren, senden Sie Funktionsaufrufe mit dem Global Offset
Tabelle anstelle der Prozedurverknüpfungstabelle.
-musermode
-mno-Benutzermodus
Erlauben (erlauben) Sie nicht, dass der Compiler Code im privilegierten Modus generiert. Angabe
-musermode impliziert auch -mno-inline-ic_invalidate wenn der Inline-Code nicht funktionieren würde
im Benutzermodus. -musermode ist die Standardeinstellung, wenn das Ziel "sh*-*-linux*" ist. Wenn die
Ziel ist SH1* oder SH2* -musermode hat keine Auswirkung, da es keinen Benutzermodus gibt.
-multicost=Anzahl
Legen Sie die anzunehmenden Kosten für eine Multiply-Insn fest.
-mdiv=Strategie
Legen Sie die Divisionsstrategie fest, die für ganzzahlige Divisionsoperationen verwendet werden soll. Für SHmedia
Strategie kann sein:
fp Führt die Operation in Gleitkommazahl aus. Dies hat eine sehr hohe Latenz, braucht aber
nur ein paar Anweisungen, daher könnte es eine gute Wahl sein, wenn Ihr Code genug hat
leicht ausnutzbares ILP, damit der Compiler das Gleitkomma planen kann
Anweisungen zusammen mit anderen Anweisungen. Division durch Null verursacht a
Gleitkomma-Ausnahme.
inv Verwendet ganzzahlige Operationen, um den Kehrwert des Divisors zu berechnen, und dann
multipliziert den Dividenden mit dem Kehrwert. Diese Strategie ermöglicht CSE und Heben
der Umkehrrechnung. Division durch Null berechnet ein nicht spezifiziertes Ergebnis,
aber fängt nicht.
inv:minlat
Eine Variante von inv wo, wenn keine CSE- oder Hebemöglichkeiten gefunden wurden, oder wenn
die gesamte Operation wurde an denselben Ort gehievt, die letzten Etappen der
inverse Berechnung werden mit der endgültigen Multiplikation verflochten, um die Gesamtzahl zu reduzieren
Latenz, auf Kosten von ein paar mehr Anweisungen und damit weniger Angeboten
Planungsmöglichkeiten mit anderem Code.
rufen Sie uns an!
Ruft eine Bibliotheksfunktion auf, die normalerweise die inv:minlat Strategie. Dies
gibt eine hohe Codedichte für "m5-*media-nofpu"-Kompilierungen.
call2
Verwendet einen anderen Einstiegspunkt derselben Bibliotheksfunktion, wobei davon ausgegangen wird, dass a
Zeiger auf eine Nachschlagetabelle wurde bereits eingerichtet, wodurch die Zeigerlast angezeigt wird
zu CSE- und Code-Hoisting-Optimierungen.
inv: anrufen
inv:anruf2
inv:fp
Verwenden Sie das inv Algorithmus für die anfängliche Codegenerierung, aber wenn der Code bleibt
nicht optimiert, zurück zum rufen Sie uns an!, call2, oder auch fp Strategien bzw. Beachten Sie, dass
der potenziell einfangende Nebeneffekt der Division durch Null wird von einem separaten
Anweisung, sodass es möglich ist, dass alle Integer-Anweisungen herausgezogen werden,
aber der Marker für die Nebenwirkung bleibt, wo er ist. Eine Rekombination zu
Gleitkommaoperationen oder ein Aufruf sind dann nicht möglich.
inv20u
Inv20l
Varianten der inv:minlat Strategie. Für den Fall, dass die inverse Berechnung
nicht vom Multiplizieren getrennt, beschleunigen sie die Division, wo die Dividende passt
in 20 Bits (ggf. plus Vorzeichen) durch Einfügen eines Tests zum Überspringen einer Anzahl von
Operationen in diesem Fall; dieser Test verlangsamt den Fall größerer Dividenden.
inv20u geht davon aus, dass eine so geringe Dividende unwahrscheinlich ist, und Inv20l
geht davon aus, dass es wahrscheinlich ist.
Für andere Ziele als SHmedia Strategie kann sein:
Anruf-div1
Ruft eine Bibliotheksfunktion auf, die die einstufige Divisionsanweisung "div1" verwendet, um
die Operation durchführen. Division durch Null berechnet ein nicht spezifiziertes Ergebnis und tut
nicht Falle. Dies ist die Standardeinstellung mit Ausnahme von SH4, SH2A und SHcompact.
Anruf-fp
Ruft eine Bibliotheksfunktion auf, die die Operation in Gleitkomma mit doppelter Genauigkeit ausführt
Punkt. Die Division durch Null verursacht eine Gleitkommaausnahme. Dies ist die Standardeinstellung
für SHcompact mit FPU. Dies für Ziele angeben, die kein Double haben
Precision FPU ist standardmäßig auf "call-div1" eingestellt.
Call-Tabelle
Ruft eine Bibliotheksfunktion auf, die eine Nachschlagetabelle für kleine Teiler und die
Anweisung "div1" mit Fallunterscheidung für größere Teiler. Durch Null teilen
berechnet ein nicht spezifiziertes Ergebnis und fängt nicht ab. Dies ist die Standardeinstellung für SH4.
Dies für Ziele angeben, die keine Standardeinstellungen für dynamische Schaltbefehle haben
zu "call-div1".
Wenn keine Aufteilungsstrategie angegeben wurde, wird die Standardstrategie basierend auf . ausgewählt
auf das aktuelle Ziel. Für SH2A besteht die Standardstrategie darin, die "divs" und "divu" zu verwenden.
Anweisungen statt Bibliotheksfunktionsaufrufe.
-ausgehende-Argumente akkumulieren
Reservieren Sie einmal Platz für ausgehende Argumente im Funktionsprolog statt herum
jeden Anruf. Generell vorteilhaft für Leistung und Größe. Wird auch zum Entspannen benötigt
um zu vermeiden, dass der Stapelrahmen um bedingten Code herum geändert wird.
-mdivsi3_libfunc=Name
Setzen Sie den Namen der Bibliotheksfunktion, die für die 32-Bit-Division mit Vorzeichen verwendet wird, auf Name. Dies
wirkt sich nur auf den im verwendeten Namen aus rufen Sie uns an! und inv: anrufen Divisionsstrategien und die
Compiler erwartet immer noch die gleichen Sätze von Input/Output/clobbered Registern, als ob dies
Option waren nicht vorhanden.
-mfixed-range=Registerbereich
Generieren Sie Code, der den angegebenen Registerbereich als feste Register behandelt. Ein festes Register
ist eine, die der Registerzuordner nicht verwenden kann. Dies ist nützlich beim Kompilieren des Kernels
Code. Ein Registerbereich wird als zwei durch einen Bindestrich getrennte Register angegeben. Mehrere
Registerbereiche können durch ein Komma getrennt angegeben werden.
-indizierte-Adressierung
Aktivieren Sie die Verwendung des indizierten Adressierungsmodus für SHmedia32/SHcompact. Das ist nur
sicher, wenn die Hardware und/oder das Betriebssystem 32-Bit-Wrap-Around-Semantik für die indizierten
Adressierungsmodus. Die Architektur erlaubt die Implementierung von Prozessoren mit 64-Bit
MMU, die das Betriebssystem verwenden könnte, um eine 32-Bit-Adressierung zu erhalten, aber da keine aktuelle Hardware
Implementierung unterstützt diese oder jede andere Möglichkeit, den indizierten Adressierungsmodus sicher zu machen
zur Verwendung im 32-Bit-ABI ist die Standardeinstellung -mno-indizierte-Adressierung.
-mgettrcost=Anzahl
Setzen Sie die für die Anweisung "gettr" angenommenen Kosten auf Anzahl. Der Standardwert ist 2, wenn
-mpt-behoben ist wirksam, sonst 100.
-mpt-behoben
Angenommen, "pt*"-Anweisungen werden nicht abgefangen. Dadurch wird im Allgemeinen besser geplanter Code generiert,
ist aber auf aktueller Hardware unsicher. Die aktuelle Architekturdefinition besagt, dass
"ptabs" und "ptrel" fallen, wenn das Ziel mit 3 anded 3 ist. Dies hat die
unbeabsichtigter Effekt, der es unsicher macht, diese Anweisungen vor einem
abzweigen oder aus einer Schlaufe heben. Zum Beispiel "__do_global_ctors", ein Teil von
libgcc das beim Programmstart Konstruktoren ausführt, Funktionen in einer Liste aufruft, die
begrenzt durch -1. Mit dem -mpt-behoben Option wird die "ptabs" vor dem Testen durchgeführt
gegen -1. Das bedeutet, dass alle Konstruktoren etwas schneller laufen, aber wenn die
loop kommt am Ende der Liste, das Programm stürzt ab, weil "ptabs" -1 in a lädt
Zielregister ein.
Da diese Option für jede Hardware, die die aktuelle Architektur implementiert, unsicher ist
Spezifikation, die Standardeinstellung ist -mno-pt-behoben. Sofern nicht ausdrücklich mit . angegeben
-mgettrkost, -mno-pt-behoben impliziert auch -mgettrkosten=100; das schreckt ab
Zuweisung von der Verwendung von Zielregistern zum Speichern gewöhnlicher Ganzzahlen.
-minvalid-Symbole
Angenommen, Symbole sind möglicherweise ungültig. Vom Compiler generierte normale Funktionssymbole
sind immer gültig um mit "movi"/"shori"/"ptabs" oder "movi"/"shori"/"ptrel" zu laden, aber
Mit Assembler- und/oder Linker-Tricks lassen sich Symbole erzeugen, die
"ptabs" oder "ptrel" zum Abfangen. Diese Option ist nur sinnvoll, wenn -mno-pt-behoben in
Wirkung. Es verhindert Block-übergreifendes CSE, Heben und die meisten Symbolplanungen
Ladungen. Die Standardeinstellung ist -mno-ungültige-Symbole.
-filialkosten=num
Annehmen num die Kosten für eine Verzweigungsanweisung sein. Höhere Zahlen machen den Compiler
Versuchen Sie, wenn möglich, mehr branchenfreien Code zu generieren. Wenn nicht angegeben, ist der Wert
abhängig vom Prozessortyp ausgewählt, für den kompiliert wird.
-mzdcbranch
-mno-zdcbranch
Angenommen (nicht angenommen), dass bedingte Verzweigungsbefehle mit Nullverschiebung "bt" und
"bf" sind schnell. Wenn -mzdcbranch angegeben ist, bevorzugt der Compiler eine Nullverschiebung
Verzweigungscodesequenzen. Dies ist standardmäßig aktiviert, wenn Code für SH4 und . generiert wird
SH4A. Sie kann durch Angabe von . explizit deaktiviert werden -mno-zdcbranch.
-McBranch-Force-Delay-Slot
Erzwinge die Verwendung von Delay-Slots für bedingte Verzweigungen, die den Delay-Slot füllen
mit einem "nop", wenn keine passende Anweisung zu finden ist. Standardmäßig ist diese Option
Behinderte. Es kann aktiviert werden, um Hardwarefehler zu umgehen, wie sie im Original gefunden wurden
SH7055.
-verwirrt-wahnsinnig
-mno-fusion-madd
Generieren Sie Code, der die Gleitkommamultiplikation und -akkumulation verwendet (nicht verwendet).
Anweisungen. Diese Anweisungen werden standardmäßig generiert, wenn Hardware-Gleitkomma
wird genutzt. Die maschinenabhängige -verwirrt-wahnsinnig Option ist jetzt der Maschine zugeordnet-
unabhängig -ffp-vertrag=schnell Option und -mno-fusion-madd ist zugeordnet zu
-ffp-vertrag=aus.
-mfsca
-mno-fsca
Erlauben oder verbieten Sie dem Compiler, den "fsca"-Befehl für Sinus und Cosinus auszugeben
Annäherungen. Die Option -mfsca muss in Kombination mit verwendet werden
-funsafe-mathematik-optimierungen. Es ist standardmäßig aktiviert, wenn Code für SH4A generiert wird.
Die richtigen -mno-fsca deaktiviert Sinus- und Cosinus-Approximationen, auch wenn
-funsafe-mathematik-optimierungen ist in Kraft.
-mfsrra
-Mno-fsrra
Erlauben oder verbieten Sie dem Compiler, die "fsrra"-Anweisung für das reziproke Quadrat auszugeben
Wurzelnäherungen. Die Option -mfsrra muss in Kombination mit verwendet werden
-funsafe-mathematik-optimierungen und -nur-endlich-mathematik. Es ist standardmäßig aktiviert, wenn
Generieren von Code für SH4A. Verwenden von -Mno-fsrra deaktiviert die reziproke Quadratwurzel
Näherungen, auch wenn -funsafe-mathematik-optimierungen und -nur-endlich-mathematik sind in
Wirkung.
-mppretend-cmove
Bevorzugen Sie bedingte Verzweigungen mit Null-Verschiebung für bedingte Bewegungsbefehle
Muster. Dies kann zu schnellerem Code auf dem SH4-Prozessor führen.
Solaris 2 Optionen
Diese -m Optionen werden auf Solaris 2 unterstützt:
-McLear-Hwcap
-McLear-Hwcap weist den Compiler an, die vom
Solaris-Assembler. Dies ist nur erforderlich, wenn Objektdateien ISA-Erweiterungen nicht verwenden
unterstützt von der aktuellen Maschine, aber prüfen Sie zur Laufzeit, ob sie verwendet werden sollen oder nicht.
-Mimpure-Text
-Mimpure-Text, zusätzlich zu verwendet -geteilt, weist den Compiler an, nicht zu übergeben -z Text zu
der Linker beim Verknüpfen eines gemeinsam genutzten Objekts. Mit dieser Option können Sie Positions-
abhängigen Code in ein gemeinsam genutztes Objekt.
-Mimpure-Text unterdrückt die "Umzüge bleiben gegen zuordenbar aber nicht beschreibbar
Abschnitte"-Linker-Fehlermeldung. Die erforderlichen Verlagerungen lösen jedoch das Kopieren auf
schreiben, und das gemeinsam genutzte Objekt wird nicht tatsächlich von allen Prozessen gemeinsam genutzt. Anstatt von
Verwendung von -Mimpure-Text, sollten Sie den gesamten Quellcode mit kompilieren -fpic or -fPIC.
Diese Switches werden zusätzlich zu den oben genannten unter Solaris 2 unterstützt:
-pThreads
Unterstützung für Multithreading mit der POSIX-Thread-Bibliothek hinzufügen. Diese Option setzt
Flags sowohl für den Präprozessor als auch für den Linker. Diese Option hat keinen Einfluss auf den Thread
Sicherheit des vom Compiler erzeugten Objektcodes oder der mitgelieferten Bibliotheken.
-pGewinde
Dies ist ein Synonym für -pThreads.
SPARC Optionen
Diese -m Optionen werden auf dem SPARC unterstützt:
-Mno-App-Regs
-map-regs
Angeben -map-regs um eine Ausgabe mit den globalen Registern 2 bis 4 zu erzeugen, die
das SPARC SVR4 ABI reserviert für Anwendungen. Wie das globale Register 1 ist jedes globale
Register 2 bis 4 werden dann als zuordenbares Register behandelt, das von überlagert wird
Funktionsaufrufe. Dies ist die Standardeinstellung.
Um vollständig SVR4 ABI-kompatibel zu sein, auf Kosten einiger Leistungseinbußen, geben Sie an
-Mno-App-Regs. Mit dieser Option sollten Sie Bibliotheken und Systemsoftware kompilieren.
-flach
-mno-flach
Mit -flach, der Compiler generiert keine Anweisungen zum Speichern/Wiederherstellen und verwendet a
"flaches" oder einzelnes Registerfenstermodell. Dieses Modell ist kompatibel mit dem regulären
Fenstermodell registrieren. Die lokalen Register und die Eingangsregister (0--5) sind noch
werden als "call-saved"-Register behandelt und nach Bedarf auf dem Stack gespeichert.
Mit -mno-flach (Standard) generiert der Compiler Anweisungen zum Speichern/Wiederherstellen (außer
für Blattfunktionen). Dies ist der normale Betriebsmodus.
-mfpu
-mhard-float
Generieren Sie eine Ausgabe mit Gleitkommaanweisungen. Dies ist die Standardeinstellung.
-mno-fpu
-msoft-float
Generieren Sie eine Ausgabe mit Bibliotheksaufrufen für Gleitkommazahlen. Warnung: das Erfordernis
Bibliotheken sind nicht für alle SPARC-Ziele verfügbar. Normalerweise sind die Einrichtungen der
der übliche C-Compiler der Maschine verwendet wird, dies kann jedoch nicht direkt in Cross-
Zusammenstellung. Sie müssen Ihre eigenen Vorkehrungen treffen, um eine geeignete Bibliothek bereitzustellen
Funktionen für die Kreuzkompilierung. Die eingebetteten Ziele sparc-*-aout und Sparklit-*-*
bieten Software-Gleitkomma-Unterstützung.
-msoft-float ändert die Aufrufkonvention in der Ausgabedatei; deshalb ist es nur
nützlich, wenn Sie kompilieren alle eines Programms mit dieser Option. Insbesondere müssen Sie
kompilieren libgcc.a, die Bibliothek, die mit GCC geliefert wird, mit -msoft-float um dies zu erreichen
an die Arbeit.
-mhard-quad-float
Generieren Sie eine Ausgabe, die Gleitkommabefehle mit vier Wörtern (langes Doppel) enthält.
-msoft-quad-float
Generieren Sie eine Ausgabe mit Bibliotheksaufrufen für Gleitkommazahlen mit vier Wörtern (long double)
Anweisungen. Die aufgerufenen Funktionen sind die im SPARC ABI angegebenen. Dies ist das
default.
Zum jetzigen Zeitpunkt gibt es keine SPARC-Implementierungen mit Hardwareunterstützung für
die Vierwort-Gleitkommabefehle. Sie alle rufen einen Trap-Handler für einen von . auf
diese Anweisungen, und dann emuliert der Trap-Handler die Wirkung der Anweisung.
Aufgrund des Overheads des Trap-Handlers ist dies viel langsamer als das Aufrufen der ABI-Bibliothek
Routinen. Und so kam es dass der -msoft-quad-float Option ist die Standardeinstellung.
-mno-unaigned-doubles
-unaligned-doubles
Angenommen, Doubles haben eine 8-Byte-Ausrichtung. Dies ist die Standardeinstellung.
Mit -unaligned-doubles, GCC geht davon aus, dass Doubles nur dann eine 8-Byte-Ausrichtung haben, wenn sie
in einem anderen Typ enthalten sind oder eine absolute Adresse haben. Ansonsten ist es
geht davon aus, dass sie eine 4-Byte-Ausrichtung haben. Die Angabe dieser Option vermeidet einige seltene
Kompatibilitätsprobleme mit Code, der von anderen Compilern generiert wurde. Es ist nicht die Standardeinstellung
da dies zu einem Leistungsverlust führt, insbesondere bei Gleitkommacode.
-muser-modus
-mno-Benutzermodus
Generieren Sie keinen Code, der nur im Supervisor-Modus ausgeführt werden kann. Dies ist nur relevant für
die "casa"-Anweisung, die für den LEON3-Prozessor ausgegeben wird. Dies ist die Standardeinstellung.
-mno-schnellere-Strukturen
-mfaster-Strukturen
Mit -mfaster-Strukturen, geht der Compiler davon aus, dass Strukturen 8 Byte haben sollten
Ausrichtung. Dies ermöglicht die Verwendung von Paaren von "ldd"- und "std"-Anweisungen für Kopien
in der Strukturzuordnung, anstelle von doppelt so vielen "ld"- und "st"-Paaren. Allerdings ist die
Die Verwendung dieser geänderten Ausrichtung verstößt direkt gegen die SPARC ABI. So ist es beabsichtigt
nur zur Verwendung auf Zielen, bei denen der Entwickler anerkennt, dass der resultierende Code
entspricht nicht direkt den Regeln des ABI.
-mcpu=CPU_Typ
Legen Sie die Parameter für Befehlssatz, Registersatz und Befehlsplanung fest für
Maschinentyp CPU_Typ. Unterstützte Werte für CPU_Typ sind v7, Zypresse, v8, Supersparz,
Hypersparz, leon, leon3, leon3v7, Sparklit, f930, f934, spartclite86x, Funkeln,
tsc701, v9, Ultrasparz, ultrasparc3, Niagara, Niagara2, Niagara3 und Niagara4.
Native Solaris- und GNU/Linux-Toolchains unterstützen ebenfalls den Wert nativen, die auswählt
die beste Architekturoption für den Hostprozessor. -mcpu=nativ hat keine Auswirkung, wenn
GCC erkennt den Prozessor nicht.
Standardparameter für die Befehlsplanung werden für Werte verwendet, die eine auswählen
Architektur und keine Implementierung. Diese sind v7, v8, Sparklit, Funkeln, v9.
Hier ist eine Liste jeder unterstützten Architektur und ihrer unterstützten Implementierungen.
v7 Zypresse, leon3v7
v8 Supersparc, Hypersparc, Leon, Leon3
Sparklit
f930, f934, spartclite86x
Funkeln
tsc701
v9 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
Standardmäßig (sofern nicht anders konfiguriert) generiert GCC Code für die V7-Variante des
SPARC-Architektur. Mit -mcpu=Zypresse, der Compiler optimiert es zusätzlich für
der Cypress CY7C602 Chip, wie er in der SPARCStation/SPARCServer 3xx Serie verwendet wird. Das ist
auch passend für die ältere SPARCStation 1, 2, IPX etc.
Mit -mcpu=v8, generiert GCC Code für die V8-Variante der SPARC-Architektur. Die
Der einzige Unterschied zum V7-Code besteht darin, dass der Compiler die ganze Zahl multipliziert und . ausgibt
Integer-Divide-Anweisungen, die in SPARC-V8, aber nicht in SPARC-V7 vorhanden sind. Mit
-mcpu=supersparc, optimiert der Compiler ihn zusätzlich für den SuperSPARC-Chip, da
verwendet in der SPARCStation 10, 1000 und 2000 Serie.
Mit -mcpu=sparclite, GCC generiert Code für die SPARClite-Variante des SPARC
die Architektur. Dies addiert die Ganzzahlmultiplikation, den Ganzzahldividierschritt und den Scan ("ffs")
Anweisungen, die in SPARClite existieren, aber nicht in SPARC-V7. Mit -mcpu=f930, der
Compiler optimiert es zusätzlich für den Fujitsu MB86930-Chip, der das Original ist
SPARClite, ohne FPU. Mit -mcpu=f934, der Compiler optimiert es zusätzlich für
der Fujitsu MB86934 Chip, der neuere SPARClite mit FPU.
Mit -mcpu=sparclet, GCC generiert Code für die SPARClet-Variante des SPARC
die Architektur. Dies addiert die Ganzzahl multiplizieren, multiplizieren/akkumulieren, ganzzahlig dividieren
Schritt- und Scan-Anweisungen ("ffs"), die in SPARClet, aber nicht in SPARC-V7 vorhanden sind. Mit
-mcpu=tsc701, optimiert der Compiler ihn zusätzlich für den TEMIC SPARClet-Chip.
Mit -mcpu=v9, generiert GCC Code für die V9-Variante der SPARC-Architektur. Dies
fügt 64-Bit-Integer- und Gleitkomma-Bewegungsanweisungen hinzu, 3 zusätzliche Gleitkomma
Bedingungscoderegister und bedingte Bewegungsbefehle. Mit -mcpu=Ultrasparc,
der Compiler optimiert ihn zusätzlich für die Sun UltraSPARC I/II/IIi-Chips. Mit
-mcpu=ultrasparc3, der Compiler optimiert ihn zusätzlich für die Sun UltraSPARC
III/III+/IIIi/IIIi+/IV/IV+ Chips. Mit -mcpu=niagara, der Compiler zusätzlich
optimiert es für Sun UltraSPARC T1-Chips. Mit -mcpu=niagara2, der Compiler
optimiert es zusätzlich für Sun UltraSPARC T2-Chips. Mit -mcpu=niagara3, der
Compiler optimiert es zusätzlich für Sun UltraSPARC T3-Chips. Mit -mcpu=niagara4,
der Compiler optimiert ihn zusätzlich für Sun UltraSPARC T4-Chips.
-mtune=CPU_Typ
Legen Sie die Befehlsplanungsparameter für den Maschinentyp fest CPU_Typ, aber nicht einstellen
den Befehlssatz oder Registersatz, den die Option -mcpu=CPU_Typ tut.
Die gleichen Werte für -mcpu=CPU_Typ kann verwendet werden für -mtune=CPU_Typ, aber das einzige
nützliche Werte sind diejenigen, die eine bestimmte CPU-Implementierung auswählen. Jene sind
Zypresse, Supersparz, Hypersparz, leon, leon3, leon3v7, f930, f934, spartclite86x,
tsc701, Ultrasparz, ultrasparc3, Niagara, Niagara2, Niagara3 und Niagara4. Mit
native Solaris- und GNU/Linux-Toolchains, nativen können ebenfalls verwendet werden.
-Mv8plus
-mno-v8plus
Mit -Mv8plus, GCC generiert Code für die SPARC-V8+ ABI. Der Unterschied zum V8
ABI ist, dass die globalen und Ausgangsregister als 64 Bit breit angesehen werden. Dies ist aktiviert
standardmäßig auf Solaris im 32-Bit-Modus für alle SPARC-V9-Prozessoren.
-mvis
-mno-vis
Mit -mvis, GCC generiert Code, der die Vorteile von UltraSPARC Visual nutzt
Erweiterungen des Anweisungssatzes. Die Standardeinstellung ist -mno-vis.
-mvis2
-mno-vis2
Mit -mvis2, generiert GCC Code, der die Vorteile von Version 2.0 von UltraSPARC . nutzt
Erweiterungen des visuellen Befehlssatzes. Die Standardeinstellung ist -mvis2 beim Targeting auf eine CPU, die
unterstützt solche Anweisungen, wie UltraSPARC-III und höher. Einstellung -mvis2 ebenfalls
Sets -mvis.
-mvis3
-mno-vis3
Mit -mvis3, generiert GCC Code, der die Vorteile von Version 3.0 von UltraSPARC . nutzt
Erweiterungen des visuellen Befehlssatzes. Die Standardeinstellung ist -mvis3 beim Targeting auf eine CPU, die
unterstützt solche Anweisungen, wie z. B. niagara-3 und höher. Einstellung -mvis3 auch setzt
-mvis2 und -mvis.
-mcbcond
-mno-cbcond
Mit -mcbcond, GCC generiert Code, der die Vorteile von Compare-and-Branch nutzt
Anweisungen, wie in der Sparc Architecture 2011 definiert. Die Standardeinstellung ist -mcbcond wann
auf eine CPU abzielen, die solche Anweisungen unterstützt, z. B. Niagara-4 und höher.
-mpopc
-mno-popc
Mit -mpopc, generiert GCC Code, der die UltraSPARC-Population nutzt
Anweisung zählen. Die Standardeinstellung ist -mpopc wenn Sie auf eine CPU abzielen, die solche unterstützt
Anweisungen wie Niagara-2 und höher.
-mfmaf
-mno-fmaf
Mit -mfmaf, generiert GCC Code, der die Vorteile der UltraSPARC Fused Multiply-
Fügen Sie Gleitkomma-Erweiterungen hinzu. Die Standardeinstellung ist -mfmaf beim Targeting auf eine CPU, die
unterstützt solche Anweisungen, wie Niagara-3 und höher.
-mfix-at697f
Aktivieren Sie die dokumentierte Problemumgehung für das einzelne Erratum des Atmel AT697F-Prozessors
(entspricht Erratum #13 des AT697E-Prozessors).
-mfix-ut699
Aktivieren Sie die dokumentierten Problemumgehungen für die Gleitkomma-Errata und den Datencache
Errata des UT699-Prozessors aufheben.
Diese -m Optionen werden zusätzlich zu den oben genannten auf SPARC-V9-Prozessoren in 64-Bit unterstützt
Umgebungen:
-m32
-m64
Generieren Sie Code für eine 32-Bit- oder 64-Bit-Umgebung. Die 32-Bit-Umgebung setzt int,
long und Zeiger auf 32 Bit. Die 64-Bit-Umgebung setzt int auf 32 Bit und lang und
Zeiger auf 64 Bit.
-mcmodel=welche
Setzen Sie das Codemodell auf eines von
Medlow
Das Medium/Low-Code-Modell: 64-Bit-Adressen, Programme müssen im unteren 32 . gelinkt werden
Bits der Erinnerung. Programme können statisch oder dynamisch verknüpft werden.
medit
Das Medium/Middle-Code-Modell: 64-Bit-Adressen, Programme müssen im unteren Bereich verknüpft werden
44 Bit Speicher, die Text- und Datensegmente müssen kleiner als 2 GB sein und
das Datensegment muss sich innerhalb von 2 GB des Textsegments befinden.
Medany
Das Medium/Anywhere-Codemodell: 64-Bit-Adressen, Programme können überall verlinkt werden
im Speicher müssen die Text- und Datensegmente weniger als 2 GB groß sein und die Daten
Segment muss sich innerhalb von 2 GB des Textsegments befinden.
Einbettung
Das Medium/Anywhere-Codemodell für eingebettete Systeme: 64-Bit-Adressen, der Text
und Datensegmente müssen weniger als 2 GB groß sein, beide beginnen an einer beliebigen Stelle im Speicher
(Ermittelt zum Linkzeitpunkt). Das globale Register %g4 zeigt auf die Basis der Daten
Segment. Programme sind statisch verlinkt und PIC wird nicht unterstützt.
-memory-model=mem-modell
Setzen Sie das auf dem Prozessor gültige Speichermodell auf eines von
Standard
Das Standardspeichermodell für den Prozessor und das Betriebssystem.
RMO Entspannte Erinnerungsordnung
pso Teilweise Store-Bestellung
tso Gesamte Store-Bestellung
sc Sequentielle Konsistenz
Diese Speichermodelle sind formal in Anhang D der Sparc V9-Architektur definiert
manuell, wie im Feld "PSTATE.MM" des Prozessors eingestellt.
-mstack-bias
-mno-stack-bias
Mit -mstack-bias, GCC geht davon aus, dass der Stack-Pointer und der Frame-Pointer, falls vorhanden,
werden um -2047 versetzt, was beim Erstellen von Stapelrahmenreferenzen wieder hinzugefügt werden muss. Dies
ist die Standardeinstellung im 64-Bit-Modus. Nehmen Sie andernfalls an, dass kein solcher Offset vorhanden ist.
SPU Optionen
Diese -m Optionen werden auf der SPU unterstützt:
-mwarn-reloc
-merror-reloc
Der Loader für SPU verarbeitet keine dynamischen Verlagerungen. Standardmäßig gibt GCC ein
Fehler beim Generieren von Code, der eine dynamische Verlagerung erfordert. -mno-error-reloc
deaktiviert den Fehler, -mwarn-reloc erzeugt stattdessen eine Warnung.
-msafe-dma
-munsafe-dma
Anweisungen, die den Abschluss von DMA einleiten oder testen, dürfen nicht mit nachbestellt werden
in Bezug auf das Laden und Speichern des Speichers, auf den zugegriffen wird. Mit -munsafe-dma
Sie müssen das Schlüsselwort "volatile" verwenden, um Speicherzugriffe zu schützen, aber das kann zu
ineffizienter Code an Stellen, an denen sich der Speicher bekanntermaßen nicht ändert. Anstatt zu markieren
den Speicher als flüchtig, können Sie verwenden -msafe-dma den Compiler anweisen, den DMA zu behandeln
Anweisungen, die potenziell den gesamten Speicher betreffen.
-Filiale-Hinweise
Standardmäßig generiert GCC eine Verzweigungshinweisanweisung, um Pipeline-Störungen für . zu vermeiden
immer genommene oder wahrscheinlich genommene Zweige. Ein Hinweis wird nicht näher als 8 . generiert
Anweisungen weg von seiner Filiale. Es gibt kaum einen Grund, sie zu deaktivieren, außer für
Debugging-Zwecken oder um ein Objekt etwas kleiner zu machen.
-msmall-mem
-mlarge-mem
Standardmäßig generiert GCC Code unter der Annahme, dass Adressen niemals größer als 18 Bit sind.
Mit -mlarge-mem Code generiert, der eine vollständige 32-Bit-Adresse annimmt.
-mstdmain
Standardmäßig verknüpft GCC mit Startcode, der die Hauptfunktion im SPU-Stil übernimmt
Schnittstelle (die eine unkonventionelle Parameterliste hat). Mit -mstdmain, GCC-Links
Ihr Programm gegen den Startcode, der eine Schnittstelle im C99-Stil zu "main" voraussetzt,
einschließlich einer lokalen Kopie von "argv"-Strings.
-mfixed-range=Registerbereich
Generieren Sie Code, der den angegebenen Registerbereich als feste Register behandelt. Ein festes Register
ist eine, die der Registerzuordner nicht verwenden kann. Dies ist nützlich beim Kompilieren des Kernels
Code. Ein Registerbereich wird als zwei durch einen Bindestrich getrennte Register angegeben. Mehrere
Registerbereiche können durch ein Komma getrennt angegeben werden.
-mea32
-mea64
Kompilieren Sie Code unter der Annahme, dass Zeiger auf den PPU-Adressraum, auf den über die "__ea" zugegriffen wird,
benannte Adressraumqualifizierer sind entweder 32 oder 64 Bit breit. Der Standardwert ist 32 Bit.
Da dies eine ABI-ändernde Option ist, muss der gesamte Objektcode in einer ausführbaren Datei kompiliert werden
mit der gleichen Einstellung.
-madressraum-konvertierung
-mno-adressraum-konvertierung
Behandlung des Adressraums "__ea" als Obermenge der generischen Adresse zulassen/verbieten
Platz. Dies ermöglicht explizite Typumwandlungen zwischen "__ea" und generischem Zeiger sowie
implizite Konvertierungen von generischen Zeigern in "__ea"-Zeiger. Die Standardeinstellung ist Zulassen
Konvertierungen von Adressraumzeigern.
-mcache-size=Cache-Größe
Diese Option steuert die Version von libgcc, die der Compiler mit einer ausführbaren Datei verknüpft
und wählt einen softwaregesteuerten Cache für den Zugriff auf Variablen in der "__ea"-Adresse
Speicherplatz mit einer bestimmten Cache-Größe. Mögliche Optionen für Cache-Größe sind 8, 16, 32, 64
und 128. Die Standardcachegröße beträgt 64 KB.
-matomische-Updates
-mno-atomar-updates
Diese Option steuert die Version von libgcc, die der Compiler mit einer ausführbaren Datei verknüpft
und wählt aus, ob atomare Updates für den softwareverwalteten Cache von PPU-seitigen Variablen
werden verwendet. Wenn Sie atomare Updates verwenden, ändern Sie eine PPU-Variable aus dem SPU-Code mit
die "__ea" benannten Adressraumqualifizierer beeinträchtigen nicht die Änderungen an anderen PPU
Variablen, die sich in derselben Cache-Zeile vom PPU-Code befinden. Wenn Sie kein Atom verwenden
Updates können solche Störungen auftreten; Cache-Zeilen zurückschreiben ist jedoch mehr
effizient. Das Standardverhalten besteht darin, atomare Updates zu verwenden.
-mdual-nops
-mdual-nops=n
Standardmäßig fügt GCC nops ein, um das duale Problem zu erhöhen, wenn es erwartet, dass es zunimmt.
Leistung. n kann ein Wert von 0 bis 10 sein. Ein kleiner n fügt weniger Nops ein. 10 ist
die Standardeinstellung, 0 ist dasselbe wie -mno-dual-nops. Deaktiviert mit -Du.
-mhint-max-nops=n
Maximale Anzahl von Nops, die für einen Verzweigungshinweis eingefügt werden sollen. Ein Verzweigungshinweis muss mindestens 8 . lang sein
Anweisungen weg von der Zweigstelle, die sie betrifft. GCC-Einsätze bis zu n nops zu
Erzwingen Sie dies, andernfalls wird der Verzweigungshinweis nicht generiert.
-mhint-max-distanz=n
Die Codierung des Verzweigungshinweisbefehls begrenzt den Hinweis auf 256
Anweisungen der betroffenen Zweigstelle. Standardmäßig stellt GCC sicher, dass es innerhalb von
125
-msafe-Hinweise
Umgehen Sie einen Hardwarefehler, der dazu führt, dass die SPU auf unbestimmte Zeit anhält. Standardmäßig ist GCC
fügt die Anweisung "hbrp" ein, um sicherzustellen, dass dieser Stillstand nicht auftritt.
Optionen für System V
Diese zusätzlichen Optionen sind in System V Release 4 verfügbar, um die Kompatibilität mit anderen
Compiler auf diesen Systemen:
-G Erstellen Sie ein gemeinsames Objekt. Es wird empfohlen, dass -symbolisch or -geteilt stattdessen verwendet werden.
-Qy Identifizieren Sie die Versionen jedes Tools, das vom Compiler verwendet wird, in einem ".ident"-Assembler
Direktive in der Ausgabe.
-Qn Unterlassen Sie das Hinzufügen von ".ident"-Direktiven zur Ausgabedatei (dies ist die Standardeinstellung).
-YP,dirs
Durchsuchen Sie die Verzeichnisse dirs, und keine anderen, für Bibliotheken, die mit . angegeben sind -l.
-Ym,dir
Schau im Verzeichnis dir um den M4-Präprozessor zu finden. Der Assembler verwendet dies
.
FLIESE-Gx Optionen
Diese -m Optionen werden auf dem TILE-Gx unterstützt:
-mcmodel=klein
Generieren Sie Code für das kleine Modell. Die Entfernung für Direktanrufe ist auf 500M . begrenzt
in beide Richtungen. PC-relative Adressen sind 32 Bit. Absolute Adressenunterstützung
den vollen Adressbereich.
-mcmodel=groß
Generieren Sie Code für das große Modell. Es gibt keine Begrenzung der Anrufentfernung, PC-
relative Adressen oder absolute Adressen.
-mcpu=Name
Wählt den CPU-Typ aus, der als Ziel verwendet werden soll. Derzeit ist der einzige unterstützte Typ fliesenx.
-m32
-m64
Generieren Sie Code für eine 32-Bit- oder 64-Bit-Umgebung. Die 32-Bit-Umgebung setzt int,
lang und Zeiger auf 32 Bit. Die 64-Bit-Umgebung setzt int auf 32 Bit und lang und
Zeiger auf 64 Bit.
-mbig-endian
-mlittle-endian
Generieren Sie Code im Big-/Little-Endian-Modus.
TILEPro Optionen
Diese -m Optionen werden auf der TILEPro unterstützt:
-mcpu=Name
Wählt den CPU-Typ aus, der als Ziel verwendet werden soll. Derzeit ist der einzige unterstützte Typ fliesenpro.
-m32
Generieren Sie Code für eine 32-Bit-Umgebung, die int, long und pointer auf 32 Bit festlegt.
Dies ist das einzige unterstützte Verhalten, daher wird das Flag im Wesentlichen ignoriert.
V850 Optionen
Diese -m Optionen sind für V850-Implementierungen definiert:
-mlong-anrufe
-mno-lange-Anrufe
Behandeln Sie alle Anrufe als weit entfernt (in der Nähe). Wenn angenommen wird, dass Anrufe weit entfernt sind, wird die
Compiler lädt immer die Adresse der Funktion in ein Register und ruft indirekt
durch den Zeiger.
-mno-ep
-MdEP
Optimieren (optimieren) Sie keine Basisblöcke, die denselben Indexzeiger 4 oder mehr verwenden
mal den Zeiger in das "ep"-Register kopieren und die kürzeren "sld" und "sst" verwenden
Anweisungen. Die -MdEP Option ist standardmäßig aktiviert, wenn Sie optimieren.
-mno-prolog-Funktion
-mprolog-Funktion
Verwenden (verwenden) Sie keine externen Funktionen zum Speichern und Wiederherstellen von Registern im Prolog
und Epilog einer Funktion. Die externen Funktionen sind langsamer, verwenden aber weniger Code
Leerzeichen, wenn mehr als eine Funktion die gleiche Anzahl von Registern spart. Die
-mprolog-Funktion Option ist standardmäßig aktiviert, wenn Sie optimieren.
-mspace
Versuchen Sie, den Code so klein wie möglich zu machen. Derzeit schaltet dies nur die -MdEP
und -mprolog-Funktion Optionen.
-mtda=n
Setzen Sie statische oder globale Variablen, deren Größe ist n Bytes oder weniger in den winzigen Datenbereich
auf das Register "ep" zeigt. Der winzige Datenbereich kann insgesamt bis zu 256 Byte aufnehmen
(128 Byte für Byte-Referenzen).
-msda=n
Setzen Sie statische oder globale Variablen, deren Größe ist n Bytes oder weniger in den kleinen Datenbereich
auf das Register "gp" zeigt. Der kleine Datenbereich kann bis zu 64 Kilobyte aufnehmen.
-mzda=n
Setzen Sie statische oder globale Variablen, deren Größe ist n Byte oder weniger in die ersten 32
Kilobyte Speicher.
-mv850
Geben Sie an, dass der Zielprozessor der V850 ist.
-mv850e3v5
Geben Sie an, dass der Zielprozessor der V850E3V5 ist. Die Präprozessorkonstante
"__v850e3v5__" wird definiert, wenn diese Option verwendet wird.
-mv850e2v4
Geben Sie an, dass der Zielprozessor der V850E3V5 ist. Dies ist ein Alias für die
-mv850e3v5 .
-mv850e2v3
Geben Sie an, dass der Zielprozessor der V850E2V3 ist. Die Präprozessorkonstante
"__v850e2v3__" wird definiert, wenn diese Option verwendet wird.
-mv850e2
Geben Sie an, dass der Zielprozessor der V850E2 ist. Die Präprozessorkonstante
"__v850e2__" wird definiert, wenn diese Option verwendet wird.
-mv850e1
Geben Sie an, dass der Zielprozessor der V850E1 ist. Die Präprozessorkonstanten
"__v850e1__" und "__v850e__" werden definiert, wenn diese Option verwendet wird.
-mv850es
Geben Sie an, dass der Zielprozessor der V850ES ist. Dies ist ein Alias für die -mv850e1
.
-mv850e
Geben Sie an, dass der Zielprozessor der V850E ist. Die Präprozessorkonstante "__v850e__"
wird definiert, wenn diese Option verwendet wird.
Wenn weder -mv850 noch -mv850e noch -mv850e1 noch -mv850e2 noch -mv850e2v3 noch -mv850e3v5
definiert sind, wird ein Standardzielprozessor ausgewählt und die relevanten __v850*__
Präprozessorkonstante ist definiert.
Die Präprozessorkonstanten "__v850" und "__v851__" sind immer definiert, unabhängig davon
welche Prozessorvariante das Ziel ist.
-mdisable-callt
-mno-disable-callt
Diese Option unterdrückt die Generierung der Anweisung "CALLT" für die v850e, v850e1,
v850e2-, v850e2v3- und v850e3v5-Varianten der v850-Architektur.
Diese Option ist standardmäßig aktiviert, wenn das RH850 ABI verwendet wird (siehe -mrh850-abi), Und
standardmäßig deaktiviert, wenn die GCC ABI verwendet wird. Wenn "CALLT"-Anweisungen gesendet werden
generiert, dann wird das C-Präprozessorsymbol "__V850_CALLT__" definiert.
-Entspann dich
-mno-entspannen
Weitergeben (oder nicht weitergeben) die -Entspann dich Befehlszeilenoption für den Assembler.
-mlange Sprünge
-mno-weite Sprünge
Deaktivieren (oder wieder aktivieren) der Generierung von PC-relativen Sprungbefehlen.
-msoft-float
-mhard-float
Deaktivieren (oder reaktivieren) Sie die Generierung von Hardware-Gleitkommabefehlen. Dies
Option ist nur von Bedeutung, wenn die Zielarchitektur V850E2V3 oder höher. Wenn
Hardware-Gleitkommabefehle werden generiert, dann der C-Präprozessor
Symbol "__FPU_OK__" ist definiert, ansonsten ist das Symbol "__NO_FPU__" definiert.
-mloop
Aktiviert die Verwendung des e3v5 LOOP-Befehls. Die Verwendung dieser Anleitung ist nicht
standardmäßig aktiviert, wenn die e3v5-Architektur ausgewählt ist, da sie noch verwendet wird
Experimental.
-mrh850-abi
-mgs
Aktiviert die Unterstützung für die RH850-Version des V850 ABI. Dies ist die Standardeinstellung. Mit
Für diese Version des ABI gelten folgende Regeln:
* Ganzzahlige Strukturen und Unions werden über einen Speicherzeiger zurückgegeben, anstatt
ein Register.
* Große Strukturen und Unions (größer als 8 Byte) werden nach Wert übergeben.
* Funktionen sind auf 16-Bit-Grenzen ausgerichtet.
* Die -m8byte-align Befehlszeilenoption wird unterstützt.
* Die -mdisable-callt Die Befehlszeilenoption ist standardmäßig aktiviert. Die
-mno-disable-callt Befehlszeilenoption wird nicht unterstützt.
Wenn diese Version des ABI aktiviert ist, wird das C-Präprozessorsymbol "__V850_RH850_ABI__"
ist definiert.
-mgcc-abi
Aktiviert die Unterstützung für die alte GCC-Version des V850 ABI. Mit dieser Version des ABI
Es gelten folgende Regeln:
* Ganzzahlige Strukturen und Unions werden im Register "r10" zurückgegeben.
* Große Strukturen und Unions (größer als 8 Byte) werden als Referenz übergeben.
* Funktionen werden an 32-Bit-Grenzen ausgerichtet, es sei denn, sie werden auf Größe optimiert.
* Die -m8byte-align Befehlszeilenoption wird nicht unterstützt.
* Die -mdisable-callt Befehlszeilenoption wird unterstützt, aber standardmäßig nicht aktiviert.
Wenn diese Version des ABI aktiviert ist, wird das C-Präprozessorsymbol "__V850_GCC_ABI__"
ist definiert.
-m8byte-align
-mno-8byte-align
Ermöglicht die Unterstützung der Typen "double" und "long long", um an 8-Byte-Grenzen ausgerichtet zu werden.
Standardmäßig ist die Ausrichtung aller Objekte auf maximal 4 Byte beschränkt. Wann
-m8byte-align ist das C-Präprozessorsymbol "__V850_8BYTE_ALIGN__"
definiert.
-mbig-switch
Generieren Sie Code, der für große Switch-Tabellen geeignet ist. Verwenden Sie diese Option nur, wenn die
Assembler/Linker beschweren sich über Verzweigungen außerhalb des Bereichs innerhalb einer Switch-Tabelle.
-map-regs
Diese Option bewirkt, dass r2 und r5 im vom Compiler generierten Code verwendet werden. Dies
Einstellung ist die Standardeinstellung.
-Mno-App-Regs
Diese Option bewirkt, dass r2 und r5 als feste Register behandelt werden.
VAX Optionen
Diese -m Optionen sind für die VAX definiert:
-Munix
Geben Sie bestimmte Sprungbefehle ("aobleq" usw.) nicht aus, die der Unix-Assembler
denn die VAX kann nicht über weite Strecken hinweg umgehen.
-mgnu
Geben Sie diese Sprungbefehle unter der Annahme aus, dass der GNU-Assembler
benutzt.
-mg Ausgabecode für Gleitkommazahlen im G-Format statt im D-Format.
Visium Optionen
-mdebug
Ein Programm, das Datei-I/O durchführt und dazu bestimmt ist, auf einem MCM-Ziel zu laufen, sollte
mit dieser Option verknüpft. Es bewirkt, dass die Bibliotheken libc.a und libdebug.a gelinkt werden.
Das Programm sollte auf dem Ziel unter der Kontrolle des GDB-Remote-Debugging ausgeführt werden
stummel.
-msim
Ein Programm, das Datei-I/O durchführt und auf dem Simulator ausgeführt werden soll, sollte
mit Option verknüpft. Dadurch werden die Bibliotheken libc.a und libsim.a gelinkt.
-mfpu
-mhard-float
Generieren Sie Code, der Gleitkommaanweisungen enthält. Dies ist die Standardeinstellung.
-mno-fpu
-msoft-float
Generieren Sie Code, der Bibliotheksaufrufe für Gleitkommazahlen enthält.
-msoft-float ändert die Aufrufkonvention in der Ausgabedatei; deshalb ist es nur
nützlich, wenn Sie kompilieren alle eines Programms mit dieser Option. Insbesondere müssen Sie
kompilieren libgcc.a, die Bibliothek, die mit GCC geliefert wird, mit -msoft-float um dies zu erreichen
an die Arbeit.
-mcpu=CPU_Typ
Legen Sie die Parameter für Befehlssatz, Registersatz und Befehlsplanung fest für
Maschinentyp CPU_Typ. Unterstützte Werte für CPU_Typ sind mcm, gr5 und gr6.
mcm ist ein Synonym für gr5 aus Gründen der Abwärtskompatibilität vorhanden.
Standardmäßig (sofern nicht anders konfiguriert) generiert GCC Code für die GR5-Variante von
die Visium-Architektur.
Mit -mcpu = gr6, generiert GCC Code für die GR6-Variante der Visium-Architektur.
Der einzige Unterschied zum GR5-Code besteht darin, dass der Compiler Blockbewegungen generiert
Anweisungen.
-mtune=CPU_Typ
Legen Sie die Befehlsplanungsparameter für den Maschinentyp fest CPU_Typ, aber nicht einstellen
den Befehlssatz oder Registersatz, den die Option -mcpu=CPU_Typ würde.
-msv-Modus
Code für den Supervisor-Modus generieren, bei dem es keine Zugriffsbeschränkungen gibt
zu allgemeinen Registern. Dies ist die Standardeinstellung.
-muser-modus
Generieren Sie Code für den Benutzermodus, in dem der Zugriff auf einige allgemeine Register erfolgt
verboten: beim GR5 kann in diesem Modus nicht auf die Register r24 bis r31 zugegriffen werden; auf der
GR6, nur die Register r29 bis r31 sind betroffen.
VMS Optionen
Diese -m Optionen sind für die VMS-Implementierungen definiert:
-mvms-Rückgabecodes
VMS-Bedingungscodes von "main" zurückgeben. Standardmäßig wird eine Bedingung im POSIX-Stil zurückgegeben
(zB Fehler-) Codes.
-mdebug-main=Präfix
Markieren Sie die erste Routine, deren Name mit beginnt Präfix als Hauptroutine für die
Debugger.
-mmalloc64
Standardmäßig werden 64-Bit-Speicherzuweisungsroutinen verwendet.
-mpointer-size=Größe
Legen Sie die Standardgröße von Zeigern fest. Mögliche Optionen für Größe sind 32 or kurz für 32 bit
Zeiger, 64 or lange für 64-Bit-Zeiger und nicht zur Unterstützung von nur 32-Bit-Zeigern.
Die spätere Option deaktiviert "pragma pointer_size".
VxWorks Optionen
Die Optionen in diesem Abschnitt sind für alle VxWorks-Ziele definiert. Spezifische Optionen für die
Zielhardware werden zusammen mit den anderen Optionen für dieses Ziel aufgelistet.
-mrtp
GCC kann Code sowohl für VxWorks-Kernel als auch für Echtzeitprozesse (RTPs) generieren. Dies
Option wechselt vom ersteren zum letzteren. Es definiert auch das Präprozessormakro
"__RTP__".
-nicht statisch
Verknüpfen Sie eine ausführbare RTP-Datei mit gemeinsam genutzten Bibliotheken statt mit statischen Bibliotheken. Die
Optionen -statisch und -geteilt kann auch für RTPs verwendet werden; -statisch ist die Vorgabe.
-Bstatisch
-Bdynamisch
Diese Optionen werden an den Linker weitergegeben. Sie sind für die Kompatibilität mit . definiert
Diabe.
-Xbind-faul
Aktivieren Sie die verzögerte Bindung von Funktionsaufrufen. Diese Option ist äquivalent zu -Wl,-z,jetzt und ein
für Kompatibilität mit Diab definiert.
-Xbind-jetzt
Deaktivieren Sie die verzögerte Bindung von Funktionsaufrufen. Diese Option ist die Standardeinstellung und ist definiert für
Kompatibilität mit Diab.
x86 Optionen
Diese -m Optionen sind für die x86-Computerfamilie definiert.
-marsch=CPU-Typ
Anweisungen für den Maschinentyp generieren CPU-Typ. Im Kontrast zu -mtune=CPU-Typ,
die lediglich den generierten Code für das angegebene tun CPU-Typ, -marsch=CPU-Typ
ermöglicht es GCC, Code zu generieren, der möglicherweise auf anderen Prozessoren als diesem überhaupt nicht ausgeführt wird
angegeben. Angabe -marsch=CPU-Typ impliziert -mtune=CPU-Typ.
Die Auswahl für CPU-Typ sind:
nativen
Dadurch wird die CPU ausgewählt, für die zum Zeitpunkt der Kompilierung Code generiert werden soll, indem die
Prozessortyp der Compilermaschine. Verwenden von -marsch=einheimisch ermöglicht alle
Anweisungsteilmengen, die vom lokalen Computer unterstützt werden (daher wird das Ergebnis möglicherweise nicht ausgeführt.)
auf verschiedenen Maschinen). Verwenden von -mtune=einheimisch erzeugt Code, der für das Lokale optimiert ist
Maschine unter den Einschränkungen des ausgewählten Befehlssatzes.
i386
Original Intel i386-CPU.
i486
Intel i486-CPU. (Für diesen Chip ist kein Scheduling implementiert.)
i586
Pentium
Intel Pentium CPU ohne MMX-Unterstützung.
Pentium-mmx
Intel Pentium MMX-CPU, basierend auf Pentium-Kern mit MMX-Befehlssatzunterstützung.
Pentiumpro
Intel Pentium Pro-CPU.
i686
Bei Verwendung mit -März, wird der Pentium Pro-Befehlssatz verwendet, damit der Code ausgeführt wird
auf allen Chips der i686-Familie. Bei Verwendung mit -munt, es hat die gleiche Bedeutung wie
Generika.
Pentium2
Intel Pentium II CPU, basierend auf Pentium Pro Core mit MMX-Befehlssatzunterstützung.
Pentium3
Pentium3m
Intel Pentium III CPU, basierend auf Pentium Pro Core mit MMX- und SSE-Befehlssatz
unterstützen.
Pentium-m
Intel Pentium M; Low-Power-Version der Intel Pentium III CPU mit MMX, SSE und SSE2
Befehlssatzunterstützung. Wird von Centrino-Notebooks verwendet.
Pentium4
Pentium4m
Intel Pentium 4 CPU mit MMX-, SSE- und SSE2-Befehlssatzunterstützung.
Prescott
Verbesserte Version der Intel Pentium 4 CPU mit MMX-, SSE-, SSE2- und SSE3-Anweisung
Unterstützung einstellen.
nocona
Verbesserte Version der Intel Pentium 4 CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2 und
Unterstützung von SSE3-Befehlssätzen.
core2
Intel Core 2 CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2, SSE3 und SSSE3
Befehlssatzunterstützung.
Nehalem
Intel Nehalem-CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2- und POPCNT-Befehlssatzunterstützung.
Westmere
Intel Westmere CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES und PCLMUL-Befehlssatzunterstützung.
Sandy Bridge
Intel Sandy Bridge CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AES und PCLMUL-Befehlssatzunterstützung.
Efeubrücke
Intel Ivy Bridge CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND und F16C Befehlssatz
unterstützen.
Haswell
Intel Haswell CPU mit 64-Bit-Erweiterungen, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2
und F16C-Befehlssatzunterstützung.
breitbrunnen
Intel Broadwell CPU mit 64-Bit-Erweiterungen, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C-, RDSEED-, ADCX- und PREFETCHW-Befehlssatzunterstützung.
Bonnell
Intel Bonnell CPU mit 64-Bit-Erweiterungen, MOVBE, MMX, SSE, SSE2, SSE3 und SSSE3
Befehlssatzunterstützung.
Silbermont
Intel Silvermont-CPU mit 64-Bit-Erweiterungen, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PCLMUL und RDRND Befehlssatzunterstützung.
knl Intel Knight's Landing CPU mit 64-Bit-Erweiterungen, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER und AVX512CD
Befehlssatzunterstützung.
k6 AMD K6 CPU mit MMX-Befehlssatzunterstützung.
k6-2
k6-3
Verbesserte Versionen der AMD K6 CPU mit MMX und 3DNow! Befehlssatzunterstützung.
athlon
athlon-tbird
AMD Athlon CPU mit MMX, 3dNOW!, erweitertes 3DNow! und SSE-Prefetch-Anweisungen
unterstützen.
athlon-4
athlon-xp
athlon-mp
Verbesserte AMD Athlon CPU mit MMX, 3DNow!, verbesserte 3DNow! und vollständige SSE-Anleitung
Unterstützung einstellen.
k8
Opteron
athlon64
athlon-fx
Prozessoren basierend auf dem AMD K8-Kern mit Unterstützung für x86-64-Befehlssätze, einschließlich
die AMD Opteron-, Athlon 64- und Athlon 64 FX-Prozessoren. (Dies überlagert MMX,
SSE, SSE2, 3DNow!, erweitertes 3DNow! und 64-Bit-Befehlssatzerweiterungen.)
k8-sse3
opteron-sse3
athlon64-sse3
Verbesserte Versionen von AMD K8-Kernen mit SSE3-Befehlssatzunterstützung.
amdfam10
Barcelona
CPUs basierend auf 10h-Kernen der AMD-Familie mit Unterstützung für x86-64-Befehlssätze. (Dies
Supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, Enhanced 3DNow!, ABM und 64-Bit
Befehlssatzerweiterungen.)
bdver1
CPUs basierend auf 15h-Kernen der AMD-Familie mit Unterstützung für x86-64-Befehlssätze. (Dies
Obersätze FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM und 64-Bit-Befehlssatzerweiterungen.)
bdver2
CPUs der AMD-Familie 15h-Core mit Unterstützung für x86-64-Befehlssätze. (Dies
Obersätze BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM und 64-Bit-Befehlssatz
Erweiterungen.)
bdver3
CPUs der AMD-Familie 15h-Core mit Unterstützung für x86-64-Befehlssätze. (Dies
Obersätze BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM und 64-Bit-Befehlssatz
Erweiterungen.
bdver4
CPUs der AMD-Familie 15h-Core mit Unterstützung für x86-64-Befehlssätze. (Dies
Obersätze 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 und
64-Bit-Befehlssatzerweiterungen.
btver1
CPUs basierend auf 14h-Kernen der AMD-Familie mit Unterstützung für x86-64-Befehlssätze. (Dies
Supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM und 64-Bit-Befehlssatz
Erweiterungen.)
btver2
CPUs basierend auf 16h-Kernen der AMD-Familie mit Unterstützung für x86-64-Befehlssätze. Dies
umfasst MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX und 64-Bit-Befehlssatzerweiterungen.
winchip-c6
IDT WinChip C6 CPU, wie i486 mit zusätzlichem MMX-Befehlssatz
unterstützen.
winchip2
IDT WinChip 2 CPU, wie i486 mit zusätzlichem MMX und 3DNow!
Befehlssatzunterstützung.
c3 VIA C3 CPU mit MMX und 3DNow! Befehlssatzunterstützung. (Keine Terminplanung ist
für diesen Chip implementiert.)
c3-2
VIA C3-2 (Nehemiah/C5XL) CPU mit MMX- und SSE-Befehlssatzunterstützung. (Nein
Scheduling ist für diesen Chip implementiert.)
Geode
AMD Geode Embedded-Prozessor mit MMX und 3DNow! Befehlssatzunterstützung.
-mtune=CPU-Typ
Stellen Sie ein CPU-Typ alles Zutreffende über den generierten Code, außer dem ABI
und die verfügbaren Anweisungen. Bei der Auswahl eines bestimmten CPU-Typ Zeitpläne
Dinge, die für diesen speziellen Chip geeignet sind, generiert der Compiler keinen Code
die auf dem Standardmaschinentyp nicht ausgeführt werden kann, es sei denn, Sie verwenden a -marsch=CPU-Typ .
Wenn GCC beispielsweise für i686-pc-linux-gnu konfiguriert ist, dann -mtune=pentium4 erzeugt
Code, der auf Pentium 4 abgestimmt ist, aber immer noch auf i686-Rechnern läuft.
Die Auswahl für CPU-Typ sind die gleichen wie für -März. Außerdem, -munt unterstützt 2
zusätzliche Auswahl für CPU-Typ:
Generika
Produzieren Sie Code, der für die gängigsten IA32/AMD64/EM64T-Prozessoren optimiert ist. wenn du
kennen Sie die CPU, auf der Ihr Code ausgeführt wird, dann sollten Sie die entsprechende verwenden
-munt or -März Option statt -mtune=generisch. Aber wenn du es nicht weißt
genau was CPU-Benutzer Ihrer Anwendung haben werden, dann sollten Sie dies verwenden
.
Wenn neue Prozessoren auf dem Markt bereitgestellt werden, ist das Verhalten dieser Option
wird sich verändern. Wenn Sie daher auf eine neuere Version von GCC aktualisieren, ist die Codegenerierung
die von dieser Option gesteuert werden, ändert sich, um die Prozessoren widerzuspiegeln, die am stärksten sind
zum Zeitpunkt der Veröffentlichung dieser Version von GCC üblich.
Es gibt kein -march=generisch Option, weil -März bezeichnet den Befehlssatz der
Compiler verwenden kann, und es gibt keinen generischen Befehlssatz, der auf alle anwendbar ist
Prozessoren. Im Gegensatz, -munt bezeichnet den Prozessor (oder in diesem Fall
Sammlung von Prozessoren), für die der Code optimiert ist.
Intel
Produzieren Sie Code, der für die aktuellsten Intel-Prozessoren optimiert ist, die Haswell . sind
und Silvermont für diese Version von GCC. Wenn Sie die CPU kennen, auf der Ihr Code
ausgeführt wird, dann sollten Sie das entsprechende verwenden -munt or -März Option statt
-mtune=intel. Aber wenn Sie möchten, dass Ihre Anwendung auf beiden Haswell
und Silvermont, dann sollten Sie diese Option verwenden.
Wenn neue Intel-Prozessoren auf dem Markt eingesetzt werden, ist das Verhalten dieser
Option wird sich ändern. Wenn Sie daher auf eine neuere Version von GCC aktualisieren, Code
Generation, die von dieser Option gesteuert wird, ändert sich, um die aktuellste Intel
Prozessoren zum Zeitpunkt der Veröffentlichung dieser Version von GCC.
Es gibt kein -marsch=intel Option, weil -März bezeichnet den Befehlssatz der
Compiler verwenden kann, und es gibt keinen gemeinsamen Befehlssatz, der auf alle anwendbar ist
Prozessoren. Im Gegensatz, -munt bezeichnet den Prozessor (oder in diesem Fall
Sammlung von Prozessoren), für die der Code optimiert ist.
-mcpu=CPU-Typ
Ein veraltetes Synonym für -munt.
-mfpmath=Einheit
Gleitkommaarithmetik für ausgewählte Einheit generieren Einheit. Die Auswahl für Einheit sind:
387 Verwenden Sie den standardmäßigen 387-Gleitkomma-Coprozessor, der auf den meisten Chips vorhanden ist
und sonst emuliert. Code, der mit dieser Option kompiliert wurde, läuft fast überall.
Die temporären Ergebnisse werden in 80-Bit-Präzision anstelle der Genauigkeit berechnet
durch den Typ angegeben, was im Vergleich zu den meisten anderen zu leicht abweichenden Ergebnissen führt
andere Chips. Sehen -float-store zur genaueren Beschreibung.
Dies ist die Standardauswahl für x86-32-Ziele.
sse Verwenden Sie skalare Gleitkommabefehle, die im SSE-Befehlssatz vorhanden sind. Dies
Befehlssatz wird von Pentium III und neueren Chips und in der AMD-Reihe unterstützt
von Athlon-4-, Athlon XP- und Athlon MP-Chips. Die frühere Version des SSE
Der Befehlssatz unterstützt nur Arithmetik mit einfacher Genauigkeit, daher die doppelte und
Arithmetik mit erweiterter Genauigkeit wird immer noch mit 387 durchgeführt. Eine spätere Version, vorhanden
nur in Pentium 4 und AMD x86-64 Chips, unterstützt auch Double-Precision-Arithmetik.
Für den x86-32-Compiler müssen Sie -marsch=CPU-Typ, -miss or -msse2 wechselt zu
Aktivieren Sie SSE-Erweiterungen und aktivieren Sie diese Option. Für den x86-64-Compiler:
diese Erweiterungen sind standardmäßig aktiviert.
Der resultierende Code sollte in den meisten Fällen erheblich schneller sein und
vermeiden Sie die numerischen Instabilitätsprobleme des 387-Codes, können jedoch einige vorhandene brechen
Code, der erwartet, dass Temporäre 80 Bit lang sind.
Dies ist die Standardauswahl für den x86-64-Compiler.
se,387
ss+387
beide
Versuchen Sie, beide Befehlssätze gleichzeitig zu verwenden. Dies verdoppelt effektiv die
Anzahl verfügbarer Register und auf Chips mit separaten Ausführungseinheiten für 387
und SSE auch die Ausführungsressourcen. Verwenden Sie diese Option mit Vorsicht, da sie immer noch vorhanden ist
experimentell, da der GCC-Registerzuordner nicht separat modelliert
Funktionseinheiten gut, was zu instabiler Leistung führt.
-masm=Dialekt
Ausgabe von Montageanleitungen mit ausgewählten Dialekt. Beeinflusst auch, welcher Dialekt ist
wird für grundlegendes "asm" und erweitertes "asm" verwendet. Unterstützte Auswahlmöglichkeiten (in Dialektreihenfolge) sind zu
or Intel. Der Standardwert ist zu. Darwin unterstützt nicht Intel.
-mieee-fp
-mno-ieee-fp
Steuern Sie, ob der Compiler IEEE-Gleitkommavergleiche verwendet. Diese
den Fall korrekt behandeln, in dem das Ergebnis eines Vergleichs ungeordnet ist.
-msoft-float
Generieren Sie eine Ausgabe mit Bibliotheksaufrufen für Gleitkommazahlen.
Warnung: die erforderlichen Bibliotheken sind nicht Bestandteil von GCC. Normalerweise sind die Einrichtungen der
Der übliche C-Compiler der Maschine wird verwendet, dies kann jedoch nicht direkt in Cross-
Zusammenstellung. Sie müssen Ihre eigenen Vorkehrungen treffen, um eine geeignete Bibliothek bereitzustellen
Funktionen für die Kreuzkompilierung.
Auf Maschinen, bei denen eine Funktion Gleitkomma-Ergebnisse im 80387-Register zurückgibt
Stack können einige Gleitkomma-Opcodes ausgegeben werden, auch wenn -msoft-float wird eingesetzt.
-mno-fp-ret-in-387
Verwenden Sie die FPU-Register nicht für Rückgabewerte von Funktionen.
Die übliche Aufrufkonvention hat Funktionen, die Werte der Typen "float" und "double" zurückgeben.
in einem FPU-Register, auch wenn keine FPU vorhanden ist. Die Idee ist, dass das Betriebssystem
sollte eine FPU emulieren.
Die Option -mno-fp-ret-in-387 bewirkt, dass solche Werte in einer normalen CPU zurückgegeben werden
meldet sich stattdessen an.
-mno-fancy-math-387
Einige 387-Emulatoren unterstützen die Anweisungen "sin", "cos" und "sqrt" für die
387. Geben Sie diese Option an, um das Generieren dieser Anweisungen zu vermeiden. Diese Option ist die
Standard auf OpenBSD und NetBSD. Diese Option wird überschrieben, wenn -März zeigt, dass die
die Ziel-CPU hat immer eine FPU, sodass der Befehl keine Emulation benötigt.
Diese Anweisungen werden nicht generiert, es sei denn, Sie verwenden auch die
-funsafe-mathematik-optimierungen Schalter.
-bösartig-doppelt
-mno-align-double
Kontrollieren Sie, ob GCC die Variablen "double", "long double" und "long long" auf a ausrichtet
Zwei-Wort-Grenze oder eine Ein-Wort-Grenze. Ausrichten von "doppelten" Variablen an einem Zweiwort
Boundary erzeugt Code, der auf einem Pentium auf Kosten von mehr etwas schneller läuft
Speicher.
Auf x86-64, -bösartig-doppelt ist standardmäßig aktiviert.
Warnung: wenn Sie das benutzen -bösartig-doppelt Schalter, Strukturen, die die oben genannten Typen enthalten
sind anders ausgerichtet als die veröffentlichten binären Schnittstellenspezifikationen der Anwendung
für x86-32 und sind nicht binärkompatibel mit Strukturen in Code, der ohne kompiliert wurde
dieser Schalter.
-m96bit-long-double
-m128bit-long-double
Diese Schalter steuern die Größe des Typs "Long Double". Die x86-32-Anwendungsbinärdatei
Schnittstelle gibt die Größe auf 96 Bit an, also -m96bit-long-double ist die Standardeinstellung in
32-Bit-Modus.
Moderne Architekturen (Pentium und neuer) bevorzugen die Ausrichtung von "Long Double" auf eine 8-
oder 16-Byte-Grenze. In Arrays oder Strukturen, die dem ABI entsprechen, ist dies nicht
möglich. Also spezifizieren -m128bit-long-double richtet "long double" auf ein 16-Byte aus
Grenze durch Auffüllen des "Long Double" mit einer zusätzlichen 32-Bit-Null.
Im x86-64-Compiler, -m128bit-long-double ist die Standardauswahl als ABI
gibt an, dass "long double" an der 16-Byte-Grenze ausgerichtet ist.
Beachten Sie, dass keine dieser Optionen eine zusätzliche Genauigkeit gegenüber dem x87-Standard ermöglicht
von 80 Bit für ein "langes Double".
Warnung: Wenn Sie den Standardwert für Ihre Ziel-ABI überschreiben, ändert dies die Größe
von Strukturen und Arrays, die "long double"-Variablen enthalten, sowie das Modifizieren der
Funktionsaufrufkonvention für Funktionen, die "long double" benötigen. Daher sind sie nicht
binärkompatibel mit Code, der ohne diesen Schalter kompiliert wurde.
-mlong-double-64
-mlong-double-80
-mlong-double-128
Diese Schalter steuern die Größe des Typs "Long Double". Eine Größe von 64 Bit macht die
Typ "long double" entspricht dem Typ "double". Dies ist die Standardeinstellung für 32-Bit
Bionic C-Bibliothek. Mit einer Größe von 128 Bit entspricht der Typ "Long Double" dem
Typ "__float128". Dies ist die Standardeinstellung für die 64-Bit-Bionic-C-Bibliothek.
Warnung: Wenn Sie den Standardwert für Ihre Ziel-ABI überschreiben, ändert dies die Größe
von Strukturen und Arrays, die "long double"-Variablen enthalten, sowie das Modifizieren der
Funktionsaufrufkonvention für Funktionen, die "long double" benötigen. Daher sind sie nicht
binärkompatibel mit Code, der ohne diesen Schalter kompiliert wurde.
-maligne-Daten=tippe
Steuern Sie, wie GCC Variablen ausrichtet. Unterstützte Werte für tippe sind Comp Verwendungen erhöht
Ausrichtungswert kompatibel verwendet GCC 4.8 und früher, abi verwendet den Ausrichtungswert als
spezifiziert durch das psABI, und Cacheline verwendet einen erhöhten Ausrichtungswert, um den
Cachezeilengröße. Comp ist die Vorgabe.
-mlarge-data-threshold=Schwelle
Wann -mcmodel=mittel angegeben, Datenobjekte größer als Schwelle sind in platziert
der große Datenbereich. Dieser Wert muss für alle verknüpften Objekte gleich sein
die Binärdatei und ist standardmäßig auf 65535 eingestellt.
-mrtd
Verwenden Sie eine andere Funktionsaufrufkonvention, bei der Funktionen, die eine feste
Anzahl der Argumente, die mit dem "ret Anzahl" Anweisung, die ihre Argumente knallt
bei der Rückkehr. Dies spart eine Anweisung im Anrufer, da dies nicht erforderlich ist
Pop die Argumente dort.
Mit dieser Aufruffolge können Sie festlegen, dass eine einzelne Funktion aufgerufen wird mit
das Funktionsattribut "stdcall". Sie können die auch überschreiben -mrtd Option, indem Sie die
Funktionsattribut "cdecl".
Warnung: diese Aufrufkonvention ist mit der normalerweise unter Unix verwendeten nicht kompatibel,
Sie können es also nicht verwenden, wenn Sie mit dem Unix-Compiler kompilierte Bibliotheken aufrufen müssen.
Außerdem müssen Sie Funktionsprototypen für alle Funktionen bereitstellen, die Variablen annehmen
Anzahl von Argumenten (einschließlich "printf"); andernfalls wird falscher Code generiert für
ruft diese Funktionen auf.
Darüber hinaus führt der Aufruf einer Funktion mit zu vielen zu schwerwiegenden falschen Codes
Argumente. (Normalerweise werden zusätzliche Argumente harmlos ignoriert.)
-mregparm=num
Steuern Sie, wie viele Register verwendet werden, um Integer-Argumente zu übergeben. Standardmäßig nein
Register werden verwendet, um Argumente zu übergeben, und es können höchstens 3 Register verwendet werden. Du kannst
steuern Sie dieses Verhalten für eine bestimmte Funktion, indem Sie das Funktionsattribut verwenden
"regparm".
Warnung: wenn Sie diesen Schalter verwenden, und num ungleich Null ist, müssen Sie alle Module erstellen
mit demselben Wert, einschließlich aller Bibliotheken. Dazu gehören die Systembibliotheken und
Startup-Module.
-msseregparm
Verwenden Sie SSE-Registerübergabekonventionen für Float- und Double-Argumente und Rückgabewerte.
Sie können dieses Verhalten für eine bestimmte Funktion steuern, indem Sie das Funktionsattribut verwenden
"sseregparm".
Warnung: Wenn Sie diesen Schalter verwenden, müssen Sie alle Module mit dem gleichen Wert erstellen,
einschließlich aller Bibliotheken. Dazu gehören die Systembibliotheken und Startmodule.
-mvect8-ret-in-mem
Geben Sie 8-Byte-Vektoren im Speicher anstelle von MMX-Registern zurück. Dies ist die Standardeinstellung für
Solaris@tie{}8 und 9 und VxWorks passend zum ABI der Sun Studio-Compiler bis
Version 12. Spätere Compiler-Versionen (ab Studio 12 Update@tie{}1) folgen
die ABI, die von anderen x86-Zielen verwendet wird, was die Standardeinstellung auf Solaris@tie{}10 und höher ist.
Nur Verwenden Sie diese Option, wenn Sie mit bestehendem Code kompatibel bleiben müssen, der von . erstellt wurde
diese früheren Compiler-Versionen oder ältere Versionen von GCC.
-mpc32
-mpc64
-mpc80
Setzen Sie die Gleitkommagenauigkeit 80387 auf 32, 64 oder 80 Bit. Wann -mpc32 angegeben,
die Vorzeichen der Ergebnisse von Gleitkomma-Operationen werden auf 24 Bit gerundet
(mit einfacher Genauigkeit); -mpc64 rundet die Signifikanz der Ergebnisse von Gleitkomma
Operationen auf 53 Bit (doppelte Genauigkeit) und -mpc80 rundet die Bedeutung der Ergebnisse ab
von Gleitkommaoperationen auf 64 Bit (erweiterte doppelte Genauigkeit), was die
Ursprünglich. Wenn diese Option verwendet wird, sind Gleitkommaoperationen mit höherer Genauigkeit
steht dem Programmierer ohne explizites Setzen des FPU-Steuerwortes nicht zur Verfügung.
Das Festlegen der Rundung von Gleitkommaoperationen auf weniger als die standardmäßigen 80 Bits kann
beschleunigen einige Programme um 2% oder mehr. Beachten Sie, dass einige mathematische Bibliotheken davon ausgehen, dass
Gleitkommaoperationen mit erweiterter Genauigkeit (80 Bit) sind standardmäßig aktiviert; Routinen
in solchen Bibliotheken könnte einen erheblichen Genauigkeitsverlust erleiden, typischerweise durch
wird als "katastrophaler Abbruch" bezeichnet, wenn diese Option verwendet wird, um die Genauigkeit auf zu setzen
weniger als erweiterte Präzision.
-mstackrealign
Richten Sie den Stapel beim Eintritt neu aus. Auf dem x86 ist die -mstackrealign Option erzeugt eine
alternativer Prolog und Epilog, der den Laufzeitstapel bei Bedarf neu ausrichtet. Dies
unterstützt das Mischen von Legacy-Codes, die die 4-Byte-Stack-Ausrichtung mit modernen Codes beibehalten, die
Behalten Sie die 16-Byte-Stack-Ausrichtung für die SSE-Kompatibilität bei. Siehe auch das Attribut
"force_align_arg_pointer", anwendbar auf einzelne Funktionen.
-mpreferred-stack-boundary=num
Versuchen Sie, die Stapelgrenze auf eine 2 angehobene ausgerichtet zu halten num Byte-Grenze. Wenn
-mprefered-stack-boundary nicht angegeben ist, ist der Standardwert 4 (16 Byte oder 128 Bit).
Warnung: Beim Generieren von Code für die x86-64-Architektur mit SSE-Erweiterungen
behindert, -mpreferred-stack-boundary=3 kann verwendet werden, um die Stapelgrenze ausgerichtet zu halten
bis 8-Byte-Grenze. Da x86-64 ABI eine 16-Byte-Stack-Ausrichtung erfordert, ist dies ABI
inkompatibel und zur Verwendung in kontrollierten Umgebungen vorgesehen, in denen Stapelplatz vorhanden ist
wichtige Einschränkung. Diese Option führt zu falschem Code, wenn Funktionen mit 16 . kompiliert werden
Byte-Stack-Alignment (wie Funktionen aus einer Standardbibliothek) werden aufgerufen mit
falsch ausgerichteter Stapel. In diesem Fall können SSE-Anweisungen zu falsch ausgerichteten Speicherzugriffen führen
Fallen. Außerdem werden Variablenargumente für 16 Byte ausgerichtet falsch behandelt
Objekte (einschließlich x87 long double und __int128), was zu falschen Ergebnissen führt. Du musst
baue alle Module mit -mpreferred-stack-boundary=3, einschließlich aller Bibliotheken. Dies
enthält die Systembibliotheken und Startmodule.
-mincoming-stack-boundary=num
Angenommen, der eingehende Stapel ist auf eine 2 angehoben auf ausgerichtet num Byte-Grenze. Wenn
-mincoming-Stack-Grenze nicht angegeben ist, die durch . angegebene
-mprefered-stack-boundary wird eingesetzt.
Auf Pentium und Pentium Pro sollten die Werte "double" und "long double" auf ein
8-Byte-Grenze (siehe -bösartig-doppelt) oder leiden unter erheblicher Laufzeitleistung
Strafen. Auf Pentium III kann der Datentyp der Streaming SIMD Extension (SSE) "__m128"
funktioniert nicht richtig, wenn es nicht 16-Byte ausgerichtet ist.
Um eine korrekte Ausrichtung dieser Werte auf dem Stack zu gewährleisten, muss die Stackgrenze wie folgt sein:
ausgerichtet, wie es für jeden auf dem Stack gespeicherten Wert erforderlich ist. Außerdem ist jede Funktion
muss so generiert werden, dass der Stapel ausgerichtet bleibt. Also eine Funktion aufrufen
kompiliert mit einer höheren bevorzugten Stackgrenze von einer Funktion kompiliert mit einem niedrigeren
Die bevorzugte Stapelgrenze führt höchstwahrscheinlich zu einer Fehlausrichtung des Stapels. Es wird empfohlen, dass
Bibliotheken, die Rückrufe verwenden, verwenden immer die Standardeinstellung.
Diese zusätzliche Ausrichtung verbraucht zusätzlichen Stapelplatz und erhöht im Allgemeinen den Code
Größe. Code, der empfindlich auf die Nutzung von Stapelspeicherplätzen reagiert, wie eingebettete Systeme und
Betriebssystem-Kernel, möchten Sie möglicherweise die bevorzugte Ausrichtung auf reduzieren
-mpreferred-stack-boundary=2.
-mmx
-miss
-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
-mxspeichern
-mxsaveopt
-MXSAVEC
-mxspeichert
-mrtm
-MTBM
-mmpx
-mmwartex
Diese Schalter ermöglichen die Verwendung von Befehlen in MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE,
RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT,
RTM, MPX, MWAITX oder 3DNow! erweiterte Befehlssätze. Jeder hat einen entsprechenden -mnein-
Option zum Deaktivieren der Verwendung dieser Anweisungen.
Diese Erweiterungen sind auch als integrierte Funktionen verfügbar: siehe x86 Eingebaut Funktionen,
Einzelheiten zu den durch diese Schalter aktivierten und deaktivierten Funktionen.
Um SSE/SSE2-Anweisungen automatisch aus Gleitkommacode zu generieren (im Gegensatz zu
bis 387 Anleitung), siehe -mfpmath=sse.
GCC unterdrückt SSEx-Anweisungen, wenn -mavx wird genutzt. Stattdessen generiert es neue AVX
Anweisungen oder AVX-Äquivalenz für alle SSEx-Anweisungen, falls erforderlich.
Diese Optionen ermöglichen es GCC, diese erweiterten Anweisungen in generiertem Code zu verwenden, sogar
ohne -mfpmath=sse. Anwendungen, die Laufzeit-CPU-Erkennung durchführen, müssen kompiliert werden
separate Dateien für jede unterstützte Architektur mit den entsprechenden Flags. In
Insbesondere sollte die Datei mit dem CPU-Erkennungscode ohne kompiliert werden
diese Optionen.
-Mdump-Tune-Featuren
Diese Option weist GCC an, die Namen der x86-Leistungsoptimierungsfunktionen und
Standardeinstellungen. Die Namen können verwendet werden in -mtune-ctrl=Feature-Liste.
-mtune-ctrl=Feature-Liste
Diese Option wird verwendet, um eine feinkörnige Steuerung der x86-Codegenerierungsfunktionen durchzuführen.
Feature-Liste ist eine durch Kommas getrennte Liste von -Funktion Namen. Siehe auch
-Mdump-Tune-Featuren. Wenn angegeben, -Funktion wird eingeschaltet, wenn es nicht vorangestellt ist
mit ^, andernfalls ist es ausgeschaltet. -mtune-ctrl=Feature-Liste soll verwendet werden
von GCC-Entwicklern. Die Verwendung kann dazu führen, dass Codepfade nicht vom Test abgedeckt werden und kann
möglicherweise zu Compiler-ICEs oder Laufzeitfehlern führen.
-mno-Standard
Diese Option weist GCC an, alle einstellbaren Funktionen zu deaktivieren. Siehe auch
-mtune-ctrl=Feature-Liste und -Mdump-Tune-Featuren.
-mcld
Diese Option weist GCC an, eine "cld"-Anweisung im Prolog der Funktionen auszugeben
die String-Anweisungen verwenden. String-Anweisungen hängen vom auszuwählenden DF-Flag ab
zwischen Autoinkrement- oder Autodecrement-Modus. Während die ABI das DF-Flag auf spezifiziert
beim Funktionseintrag gelöscht werden, einige Betriebssysteme verletzen diese Spezifikation, indem sie nicht
Löschen des DF-Flags in ihren Ausnahmeverteilern. Der Ausnahmehandler kann sein
wird mit gesetztem DF-Flag aufgerufen, was zu einem falschen Richtungsmodus führt, wenn string
Anweisungen verwendet werden. Diese Option kann standardmäßig auf 32-Bit-x86-Zielen aktiviert werden durch
Konfigurieren von GCC mit dem --enable-cld Option konfigurieren. Erzeugung von "cld"
Anweisungen können mit dem unterdrückt werden -mno-cld Compiler-Option in diesem Fall.
-mvzeropper
Diese Option weist GCC an, vor einer Übertragung von . eine "vzeroupper"-Anweisung auszugeben
Kontrollfluss aus der Funktion, um auch den AVX-zu-SSE-Übergangsnachteil zu minimieren
wie unnötige "Nullpunkt"-Intrinsiken entfernen.
-mrefer-avx128
Diese Option weist GCC an, 128-Bit-AVX-Befehle anstelle von 256-Bit-AVX zu verwenden
Anweisungen im Auto-Vektorisierer.
-mcx16
Diese Option ermöglicht es GCC, "CMPXCHG16B"-Anweisungen zu generieren. "CMPXCHG16B" ermöglicht
für atomare Operationen auf 128-Bit-Doppel-Quadword- (oder Oword-)Datentypen. Das ist
nützlich für hochauflösende Zähler, die von mehreren Prozessoren aktualisiert werden können (oder
Kerne). Diese Anweisung wird als Teil von atomaren eingebauten Funktionen generiert: siehe
__sync Eingebaute or __atomar Eingebaute .
-msahf
Diese Option ermöglicht die Generierung von "SAHF"-Befehlen im 64-Bit-Code. Frühe Informationen
Pentium 4-CPUs mit Intel 64-Unterstützung vor der Einführung des Pentium 4 G1-Schritts
im Dezember 2005 fehlten die Anweisungen "LAHF" und "SAHF", die von
AMD64. Dies sind Lade- bzw. Speicherbefehle für bestimmte Status-Flags.
Im 64-Bit-Modus wird der Befehl "SAHF" verwendet, um "fmod", "drem" und . zu optimieren
"Rest" eingebaute Funktionen; sehen Andere Eingebaute .
-mmovbe
Diese Option ermöglicht die Verwendung der "movbe"-Anweisung, um "__builtin_bswap32" zu implementieren.
und "__builtin_bswap64".
-mcrc32
Diese Option aktiviert eingebaute Funktionen "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" und "__builtin_ia32_crc32di" zu
Generieren Sie die Maschinenanweisung "crc32".
-mrecip
Diese Option ermöglicht die Verwendung von "RCPSS"- und "RSQRTSS"-Befehlen (und deren vektorisierten
Varianten "RCPPS" und "RSQRTPS") mit einer zusätzlichen Newton-Raphson-Stufe zur Erhöhung
Präzision statt "DIVSS" und "SQRTSS" (und deren vektorisierte Varianten) für Einzel-
Präzisions-Gleitkomma-Argumente. Diese Anweisungen werden nur generiert, wenn
-funsafe-mathematik-optimierungen wird zusammen mit aktiviert -nur-endlich-mathematik und
-fno-trapping-mathe. Beachten Sie, dass der Durchsatz der Sequenz zwar höher ist als der
Durchsatz der nicht-reziproken Anweisung kann die Genauigkeit der Folge sein
um bis zu 2 ulp verringert (dh der Kehrwert von 1.0 entspricht 0.99999994).
Beachten Sie, dass GCC "1.0f/sqrtf(x)" in Bezug auf "RSQRTSS" (oder "RSQRTPS") bereits
mit -ffast-mathe (oder die obige Optionskombination) und braucht nicht -mrecip.
Beachten Sie auch, dass GCC die obige Sequenz mit zusätzlichem Newton-Raphson-Schritt für
vektorisierte Single-Float-Division und vektorisierte "sqrtf(x)" schon mit -ffast-mathe
(oder die obige Optionskombination) und braucht nicht -mrecip.
-mrecip=wählen
Diese Option steuert, welche gegenseitigen Schätzungsanweisungen verwendet werden können. wählen ist eine
durch Kommas getrennte Liste von Optionen, denen ein a . vorangestellt werden kann ! um die Option umzukehren:
alle Aktivieren Sie alle Schätzungsanweisungen.
Standard
Aktivieren Sie die Standardanweisungen, äquivalent zu -mrecip.
keine
Deaktivieren Sie alle Schätzungsanweisungen, äquivalent zu -mno-rezept.
div Aktivieren Sie die Approximation für die Skalardivision.
vec-div
Aktivieren Sie die Approximation für die vektorisierte Division.
sqrt
Aktivieren Sie die Approximation für die skalare Quadratwurzel.
vec-sqrt
Aktivieren Sie die Approximation für die vektorisierte Quadratwurzel.
Also zum Beispiel -mrecip=alle,!sqrt ermöglicht alle reziproken Näherungen,
außer Quadratwurzel.
-mveclibabi=tippe
Gibt den ABI-Typ an, der zum Vektorisieren von systeminternen Elementen mithilfe einer externen Bibliothek verwendet werden soll.
Unterstützte Werte für tippe sind svml für die Intel Short Vector Math Library und acml
für die AMD Math-Core-Bibliothek. Um diese Option zu verwenden, müssen beide -ftree-vektorisieren und
-funsafe-mathematik-optimierungen aktiviert sein und ein SVML- oder ACML-ABI-kompatibles
Bibliothek muss zur Linkzeit angegeben werden.
GCC sendet derzeit Aufrufe an "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" und "vmlsAcos4" für entsprechenden Funktionstyp, wenn -mveclibabi=svml is
verwendet, und "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
"__vrs4_log2f", "__vrs4_log10f" und "__vrs4_powf" für den entsprechenden Funktionstyp
wann -mveclibabi=acml wird eingesetzt.
-mabi=Name
Generieren Sie Code für die angegebene Aufrufkonvention. Zulässige Werte sind sysv für
die auf GNU/Linux und anderen Systemen verwendete ABI und ms für das Microsoft-ABI. Die
Standardmäßig wird die Microsoft ABI verwendet, wenn Sie auf Microsoft Windows und die SysV ABI abzielen
auf allen anderen Systemen. Sie können dieses Verhalten für bestimmte Funktionen steuern, indem Sie
die Funktionsattribute "ms_abi" und "sysv_abi".
-mtls-dialekt=tippe
Generieren Sie Code für den Zugriff auf den Thread-lokalen Speicher mit dem Gnu or gnu2 Konventionen. Gnu
ist der konservative Standard; gnu2 ist effizienter, kann aber Kompilierungs- und Ausführungs-
Zeitanforderungen, die nicht auf allen Systemen erfüllt werden können.
-mpush-args
-mno-push-args
Verwenden Sie PUSH-Operationen, um ausgehende Parameter zu speichern. Diese Methode ist kürzer und normalerweise
genauso schnell wie die Methode mit SUB/MOV-Operationen und ist standardmäßig aktiviert. In einigen
Fälle, in denen es deaktiviert wird, können die Leistung aufgrund der verbesserten Planung und reduzierten
Abhängigkeiten.
-ausgehende-Argumente akkumulieren
Wenn aktiviert, wird der maximal erforderliche Speicherplatz für ausgehende Argumente berechnet in
der Funktionsprolog. Dies ist auf den meisten modernen CPUs aufgrund des reduzierten
Abhängigkeiten, verbessertes Scheduling und reduzierte Stack-Nutzung, wenn der bevorzugte Stack
Boundary ist nicht gleich 2. Der Nachteil ist eine merkliche Zunahme der Codegröße. Dies
Schalter impliziert -mno-push-args.
-m Threads
Unterstützen Sie die Thread-sichere Ausnahmebehandlung auf MinGW. Programme, die auf Thread-Safe angewiesen sind
Ausnahmebehandlung muss den gesamten Code kompilieren und mit dem -m Threads Möglichkeit. Wann
kompilieren, -m Threads definiert -D_MT; beim Verlinken verlinkt es in einem speziellen Thread-Helfer
Bibliothek -lmingwthrd wodurch Daten zur Ausnahmebehandlung pro Thread bereinigt werden.
-mno-align-stringops
Richten Sie das Ziel von Inline-String-Operationen nicht aus. Dieser Schalter reduziert Code
Größe und verbessert die Leistung, falls das Ziel bereits ausgerichtet ist, aber GCC
weiß es nicht.
-minline-all-stringops
Standardmäßig bettet GCC Zeichenfolgenoperationen nur ein, wenn das Ziel bekannt ist
ausgerichtet auf mindestens eine 4-Byte-Grenze. Dies ermöglicht mehr Inlining und erhöht den Code
Größe, kann aber die Leistung von Code verbessern, der von schnellen "memcpy", "strlen" und . abhängt
"memset" für kurze Längen.
-minline-stringops-dynamisch
Verwenden Sie für Zeichenfolgenoperationen unbekannter Größe Laufzeitprüfungen mit Inline-Code für kleine
Bausteine und einen Bibliotheksaufruf für große Bausteine.
-mstringop-strategie=alg
Überschreiben Sie die interne Entscheidungsheuristik für den bestimmten Algorithmus, der verwendet werden soll
Inline-String-Operationen. Die zulässigen Werte für alg sind:
rep_byte
rep_4byte
rep_8byte
Erweitern Sie mit dem i386-Präfix "rep" der angegebenen Größe.
byte_loop
Schleife
unrolled_loop
Erweitern Sie in eine Inline-Schleife.
libcall
Verwenden Sie immer einen Bibliotheksaufruf.
-mmemcpy-strategie=Strategie
Überschreiben Sie die interne Entscheidungsheuristik, um zu entscheiden, ob "__builtin_memcpy" sein soll
inlined und welcher Inlinealgorithmus verwendet werden soll, wenn die erwartete Größe des Kopiervorgangs
ist bekannt. Strategie ist eine durch Kommas getrennte Liste von alg:maximale Größe:dest_align Dreiergruppen. alg
ist angegeben in -mstringop-Strategie, maximale Größe gibt die maximale Bytegröße an, mit der
Inline-Algorithmus alg ist erlaubt. Für das letzte Triplett, das maximale Größe muss "-1" sein. Die
maximale Größe der Triplets in der Liste müssen in aufsteigender Reihenfolge angegeben werden. Die
minimale Bytegröße für alg ist 0 für das erste Triplett und "maximale Größe + 1" dauert ebenfalls 3 Jahre. Das erste Jahr ist das sog.
vorigen Bereich.
-mmemset-strategie=Strategie
Die Option ist ähnlich wie -mmemcpy-strategie= außer dass es zu kontrollieren ist
Erweiterung "__builtin_memset".
-momit-Blatt-Rahmen-Zeiger
Bewahren Sie den Rahmenzeiger nicht in einem Register für Blattfunktionen auf. Dies vermeidet die
Anweisungen zum Speichern, Einrichten und Wiederherstellen von Rahmenzeigern und erstellt ein zusätzliches Register
in Blattfunktionen verfügbar. Die Option -fomit-leaf-frame-pointer entfernt den Rahmen
Zeiger für Blattfunktionen, die das Debuggen erschweren könnten.
-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Steuert, ob auf TLS-Variablen mit Offsets aus dem TLS-Segment zugegriffen werden darf
registrieren (%gs für 32-Bit, %fs für 64-Bit) oder ob der Thread-Basiszeiger sein muss
hinzugefügt. Ob dies gültig ist oder nicht, hängt vom Betriebssystem ab und ob es
ordnet das Segment so zu, dass es den gesamten TLS-Bereich abdeckt.
Bei Systemen, die die GNU C-Bibliothek verwenden, ist die Standardeinstellung on.
-msse2avx
-mno-sse2avx
Geben Sie an, dass der Assembler SSE-Anweisungen mit VEX-Präfix codieren soll. Die Option
-mavx schaltet dies standardmäßig ein.
-Mfentry
-mno-fentry
Wenn die Profilerstellung aktiv ist (-S), stellen Sie den Profiling-Zähleraufruf vor den Prolog.
Hinweis: Auf x86-Architekturen ist das Attribut "ms_hook_prologue" beim
Moment für -Mfentry und -S.
-mrecord-mcount
-mno-record-mcount
Wenn die Profilerstellung aktiv ist (-S), generieren Sie einen __mcount_loc-Abschnitt, der Zeiger enthält
zu jedem Profilerstellungsaufruf. Dies ist nützlich, um Anrufe automatisch zu patchen und zu outen.
-mnop-mcount
-mno-nop-mcount
Wenn die Profilerstellung aktiv ist (-S), generieren Sie die Aufrufe der Profiling-Funktionen als nops.
Dies ist nützlich, wenn sie später dynamisch gepatcht werden sollen. Dies ist wahrscheinlich nur
nützlich zusammen mit -mrecord-mcount.
-mskip-rax-setup
-mno-skip-rax-setup
Beim Generieren von Code für die x86-64-Architektur mit deaktivierten SSE-Erweiterungen,
-Skip-Rax-Setup kann verwendet werden, um das Einrichten des RAX-Registers zu überspringen, wenn keine Variablen vorhanden sind
Argumente, die in Vektorregistern übergeben werden.
Warnung: Da das RAX-Register verwendet wird, um unnötiges Speichern von Vektorregistern auf
stapeln, wenn variable Argumente übergeben werden, sind die Auswirkungen dieser Option, die aufgerufen werden können
Verschwenden Sie Stapelplatz, benehmen Sie sich schlecht oder springen Sie an einen zufälligen Ort. GCC 4.4 oder neuer
haben diese Probleme nicht, unabhängig vom RAX-Registerwert.
-m8bit-iviv
-mno-8bit-idiv
Auf einigen Prozessoren, wie Intel Atom, ist die 8-Bit-Ganzzahlteilung ohne Vorzeichen viel schneller als
32-Bit/64-Bit-Ganzzahl-Division. Diese Option generiert eine Laufzeitprüfung. Wenn beides
Dividend und Divisor liegen im Bereich von 0 bis 255, 8-Bit-Dividende ohne Vorzeichen ist
anstelle von 32-Bit/64-Bit-Integer-Division verwendet.
-mavx256-split-unaligned-load
-mavx256-split-unaligned-store
Nicht ausgerichtetes Laden und Speichern von 32-Byte-AVX.
-mstack-protector-guard=Wache
Generieren Sie Stack-Schutzcode mit Canary at Wache. Unterstützte Standorte sind globale
für globalen Kanarienvogel oder tls für Canary pro Thread im TLS-Block (Standard). Dies
Option ist nur wirksam, wenn -stapelschutz or -fstack-protector-all angegeben.
Diese -m Switches werden zusätzlich zu den oben genannten auf x86-64-Prozessoren in 64-Bit unterstützt
Umgebungen.
-m32
-m64
-MX32
-m16
Generieren Sie Code für eine 16-Bit-, 32-Bit- oder 64-Bit-Umgebung. Die -m32 Optionssätze "int",
"long" und Zeigertypen auf 32 Bit und generiert Code, der auf jedem i386-System läuft.
Die -m64 Option setzt "int" auf 32 Bit und "long" und Zeigertypen auf 64 Bit, und
generiert Code für die x86-64-Architektur. Für Darwin nur die -m64 Option auch
schaltet die aus -fno-pic und -mdynamic-no-pic Optionen.
Die -MX32 Option setzt "int", "long" und Zeigertypen auf 32 Bit und generiert Code
für die x86-64-Architektur.
Die -m16 Option ist die gleiche wie -m32, außer dass es die ".code16gcc" ausgibt
Assembly-Direktive am Anfang der Assembly-Ausgabe, damit die Binärdatei ausgeführt werden kann
im 16-Bit-Modus.
-mno-rote-zone
Verwenden Sie keine sogenannte "rote Zone" für x86-64-Code. Die rote Zone wird von der
x86-64-ABI; es ist ein 128-Byte-Bereich jenseits der Position des Stapelzeigers, der nicht
durch Signal- oder Interrupt-Handler modifiziert und kann daher für temporäre Daten verwendet werden
ohne den Stapelzeiger anzupassen. Die Flagge -mno-rote-zone deaktiviert diese rote Zone.
-mcmodel=klein
Code für das kleine Codemodell generieren: Das Programm und seine Symbole müssen eingebunden werden
die unteren 2 GB des Adressraums. Zeiger sind 64 Bit. Programme können sein
statisch oder dynamisch verknüpft. Dies ist das Standardcodemodell.
-mcmodel=Kernel
Generieren Sie Code für das Kernel-Codemodell. Der Kernel läuft in den negativen 2 GB des
Adressraum. Dieses Modell muss für Linux-Kernelcode verwendet werden.
-mcmodel=mittel
Code für das mittlere Modell generieren: Das Programm wird in den unteren 2 GB des
Adressraum. Dort sind auch kleine Symbole platziert. Symbole mit Größen größer als
-mlarge-data-threshold werden in große Daten- oder BSS-Abschnitte abgelegt und können lokalisiert werden
über 2GB. Programme können statisch oder dynamisch verknüpft werden.
-mcmodel=groß
Generieren Sie Code für das große Modell. Dieses Modell macht keine Annahmen über Adressen
und Größen der Abschnitte.
-maddress-mode=lang
Generieren Sie Code für den langen Adressmodus. Dies wird nur für 64-Bit und x32 unterstützt
Umgebungen. Dies ist der Standardadressmodus für 64-Bit-Umgebungen.
-maddress-mode=kurz
Generieren Sie Code für den Kurzadressenmodus. Dies wird nur für 32-Bit und x32 unterstützt
Umgebungen. Dies ist der Standardadressmodus für 32-Bit- und x32-Umgebungen.
x86 Windows Optionen
Diese zusätzlichen Optionen sind für Microsoft Windows-Ziele verfügbar:
-mconsole
Diese Option gibt an, dass eine Konsolenanwendung generiert werden soll, indem Sie anweisen
den Linker, um den für Konsolenanwendungen erforderlichen PE-Header-Subsystemtyp festzulegen.
Diese Option ist für Cygwin- und MinGW-Ziele verfügbar und standardmäßig aktiviert
diese Ziele.
-mdll
Diese Option ist für Cygwin- und MinGW-Ziele verfügbar. Es gibt an, dass eine DLL---a
Dynamic Link Library --- soll generiert werden, um die Auswahl der benötigten
Laufzeitstartobjekt und Einstiegspunkt.
-mnop-fun-dllimport
Diese Option ist für Cygwin- und MinGW-Ziele verfügbar. Es legt fest, dass die
Das Attribut "dllimport" sollte ignoriert werden.
-m Gewinde
Diese Option ist für MinGW-Ziele verfügbar. Es gibt an, dass MinGW-spezifischer Thread
Unterstützung genutzt werden soll.
-Municode
Diese Option ist für MinGW-w64-Ziele verfügbar. Es bewirkt, dass der "UNICODE"-Präprozessor
Makro vordefiniert werden und wählt Unicode-fähigen Runtime-Startcode.
-mwin32
Diese Option ist für Cygwin- und MinGW-Ziele verfügbar. Es legt fest, dass die typischen
Vordefinierte Makros von Microsoft Windows sind im Präprozessor zu setzen, aber nicht
Einfluss auf die Wahl der Laufzeitbibliothek/des Startcodes haben.
-mwindows
Diese Option ist für Cygwin- und MinGW-Ziele verfügbar. Es gibt an, dass eine GUI
Anwendung ist zu generieren, indem der Linker angewiesen wird, den PE-Header zu setzen
Subsystemtyp entsprechend.
-fno-set-stack-ausführbare Datei
Diese Option ist für MinGW-Ziele verfügbar. Es gibt an, dass das ausführbare Flag für
der von verschachtelten Funktionen verwendete Stack ist nicht festgelegt. Dies ist für die Ausführung von Binärdateien erforderlich
im Kernel-Modus von Microsoft Windows, da dort die User32-API, die zum Setzen verwendet wird
ausführbare Berechtigungen, ist nicht verfügbar.
-fwritable-relocated-rdata
Diese Option ist für MinGW- und Cygwin-Ziele verfügbar. Es legt fest, dass umgesiedelte
Daten im schreibgeschützten Abschnitt werden in den .data-Abschnitt eingefügt. Dies ist eine Notwendigkeit für ältere
Laufzeiten, die die Änderung von .rdata-Abschnitten für Pseudo-Relocation nicht unterstützen.
-mpe-aligned-commons
Diese Option ist für Cygwin- und MinGW-Ziele verfügbar. Es legt fest, dass die GNU
Erweiterung zum PE-Dateiformat, die die korrekte Ausrichtung von COMMON-Variablen ermöglicht
sollte beim Generieren von Code verwendet werden. Es ist standardmäßig aktiviert, wenn GCC erkennt, dass die
Der während der Konfiguration gefundene Zielassembler unterstützt die Funktion.
Siehe auch unter x86 Optionen für Standardoptionen.
Xstormy16 Optionen
Diese Optionen sind für Xstormy16 definiert:
-msim
Wählen Sie Startdateien und Linker-Skripte, die für den Simulator geeignet sind.
Xtensa Optionen
Diese Optionen werden für Xtensa-Ziele unterstützt:
-mconst16
-mno-const16
Aktivieren oder deaktivieren Sie die Verwendung von "CONST16"-Anweisungen zum Laden von konstanten Werten. Die
Die Anweisung "CONST16" ist derzeit keine Standardoption von Tensilica. Wann
aktiviert, werden immer die Anweisungen "CONST16" anstelle der Standardanweisungen "L32R" verwendet.
Anweisungen. Die Verwendung von "CONST16" ist standardmäßig nur aktiviert, wenn "L32R"
Anleitung ist nicht vorhanden.
-verwirrt-wahnsinnig
-mno-fusion-madd
Aktivieren oder deaktivieren Sie die Verwendung von verschmolzenen Multiplikations-/Additions- und Multiplikations-/Subtraktionsanweisungen im
Gleitkomma-Option. Dies hat keine Auswirkung, wenn die Gleitkommaoption nicht auch ist
aktiviert. Das Deaktivieren von verschmolzenen Multiply/Add- und Multiply/Subtract-Befehlen erzwingt die
Compiler, separate Anweisungen für die Multiplikations- und Additions-/Subtraktionsoperationen zu verwenden.
Dies kann in einigen Fällen wünschenswert sein, in denen strenge IEEE 754-konforme Ergebnisse vorliegen
erforderlich: die fusionierten Multiply-Add/Subtract-Anweisungen runden das Intermediat nicht
Ergebnis, wodurch Ergebnisse mit mehr Bits der Genauigkeit als durch die spezifiziert
IEEE-Standard. Das Deaktivieren von fusionierten Multiply-Add/Subtract-Befehlen stellt auch sicher, dass
die Programmausgabe reagiert nicht auf die Fähigkeit des Compilers, multiplizieren und
Addieren/Subtrahieren Operationen.
-mserialize-volatile
-mno-serialisieren-flüchtig
Wenn diese Option aktiviert ist, fügt GCC "MEMW"-Anweisungen vor "flüchtigem" Speicher ein
Referenzen, um die sequentielle Konsistenz zu gewährleisten. Die Standardeinstellung ist -mserialize-volatile.
Verwenden Sie die -mno-serialisieren-flüchtig die "MEMW"-Anweisungen wegzulassen.
-mforce-no-pic
Für Ziele wie GNU/Linux, bei denen der gesamte Xtensa-Code im Benutzermodus position-
Independent Code (PIC) deaktiviert diese Option PIC zum Kompilieren von Kernel-Code.
-mtext-Abschnittsliterale
-mno-text-section-literals
Diese Optionen steuern die Behandlung von Literalpools. Die Standardeinstellung ist
-mno-text-section-literals, wodurch Literale in einem separaten Abschnitt in der Ausgabe platziert werden
Datei. Dadurch kann der Literalpool in einem Daten-RAM/ROM platziert werden, und es ermöglicht auch
der Linker zum Kombinieren von Literalpools aus separaten Objektdateien, um redundante . zu entfernen
Literale und verbessern die Codegröße. Mit -mtext-Abschnittsliterale, die Literale sind
im Textteil eingestreut, um sie so nah wie möglich an ihren
Verweise. Dies kann bei großen Baugruppendateien erforderlich sein.
-mtarget-align
-mno-target-align
Wenn diese Option aktiviert ist, weist GCC den Assembler an, sich automatisch auszurichten
Anweisungen zum Reduzieren von Verzweigungsstrafen auf Kosten einer gewissen Codedichte. Die
Assembler versucht, die Dichteanweisungen zu erweitern, um Verzweigungsziele und die
Anweisungen folgen Anrufanweisungen. Wenn es nicht genügend vorausgehende Safes gibt
Dichteanweisungen, um ein Ziel auszurichten, wird keine Verbreiterung durchgeführt. Die Standardeinstellung ist
-mtarget-align. Diese Optionen haben keinen Einfluss auf die Behandlung von automatisch ausgerichteten
Anweisungen wie "LOOP", die der Assembler immer ausrichtet, entweder durch Verbreiterung
Dichteanweisungen oder durch Einfügen von NOP-Anweisungen.
-mlangeAnrufe
-mno-longcalls
Wenn diese Option aktiviert ist, weist GCC den Assembler an, direkte Aufrufe in zu übersetzen
indirekte Anrufe, es sei denn, es kann feststellen, dass das Ziel eines direkten Anrufs im
Bereich, der von der Aufrufanweisung erlaubt ist. Diese Übersetzung erfolgt normalerweise bei Anrufen an
Funktionen in anderen Quelldateien. Konkret übersetzt der Assembler ein direktes
"CALL"-Anweisung in eine "L32R"-Anweisung, gefolgt von einer "CALLX"-Anweisung. Die Standardeinstellung ist
-mno-longcalls. Diese Option sollte in Programmen verwendet werden, in denen das Anrufziel
möglicherweise außer Reichweite. Diese Option ist im Assembler implementiert, nicht im
Compiler, sodass der von GCC generierte Assemblercode immer noch einen direkten Aufruf anzeigt
Anweisungen --- Sehen Sie sich den zerlegten Objektcode an, um die tatsächlichen Anweisungen zu sehen.
Beachten Sie, dass der Assembler für jeden dateiübergreifenden Aufruf einen indirekten Aufruf verwendet, nicht nur
diejenigen, die wirklich außerhalb der Reichweite sind.
zSerie Optionen
Diese sind aufgelistet unter
Optionen für Code Generation Conventions
Diese maschinenunabhängigen Optionen steuern die im Code verwendeten Schnittstellenkonventionen
Generation.
Die meisten von ihnen haben sowohl positive als auch negative Formen; die Negativform von -ffoo is
-fno-foo. In der folgenden Tabelle ist nur eines der Formulare aufgeführt – dasjenige, das nicht das ist
Ursprünglich. Sie können das andere Formular herausfinden, indem Sie entweder entfernen Nein- oder hinzufügen.
-fbounds-check
Generieren Sie für Frontends, die dies unterstützen, zusätzlichen Code, um zu überprüfen, ob Indizes verwendet wurden, um
Access-Arrays liegen innerhalb des deklarierten Bereichs. Dies wird derzeit nur von der . unterstützt
Java- und Fortran-Frontends, bei denen diese Option standardmäßig auf true und false gesetzt ist
beziehungsweise.
-fstack-reuse=Wiederverwendungsebene
Diese Option steuert die Wiederverwendung von Stapelspeicherplätzen für vom Benutzer deklarierte lokale/automatische Variablen und
Compiler generierte temporäre Dateien. Wiederverwendungsebene kann sein alle, benannte_vars, oder auch keine. alle
ermöglicht Stack-Wiederverwendung für alle lokalen Variablen und temporären Dateien, benannte_vars ermöglicht die
nur für benutzerdefinierte lokale Variablen mit Namen wiederverwenden, und keine deaktiviert die Stapelwiederverwendung
ganz und gar. Der Standardwert ist alle. Die Option wird benötigt, wenn das Programm verlängert wird
die Lebensdauer einer bereichsbezogenen lokalen Variablen oder eines Compilers, der temporär über die
Endpunkt durch die Sprache definiert. Wenn die Lebensdauer einer Variablen endet und wenn die
Variable im Speicher lebt, hat der optimierende Compiler die Freiheit, seinen Stack wiederzuverwenden
Leerzeichen mit anderen temporären oder bereichsbezogenen lokalen Variablen, deren Live-Bereich dies nicht tut
damit überlappen. Legacy-Code, der die lokale Lebensdauer verlängert, wird wahrscheinlich mit dem
Optimierung der Stapelwiederverwendung.
Zum Beispiel,
int * p;
{
int lokal1;
p = &local1;
lokal1 = 10;
....
}
{
int lokal2;
lokal2 = 20;
...
}
if (*p == 10) // außerhalb des Gültigkeitsbereichs Verwendung von local1
{
}
Ein weiteres Beispiel:
strukturieren A
{
A(int k) : i(k), j(k) { }
int i;
int j;
};
Ein *ap;
void foo(const A&ar)
{
ap = &ar;
}
Leere Leiste ()
{
foo (A(10)); // Die Lebensdauer des temporären Objekts endet, wenn foo zurückkehrt
{
A a(20);
....
}
ap -> i+= 10; // Ap-Referenzen außerhalb des Gültigkeitsbereichs temp, deren Leerzeichen
// wird mit a wiederverwendet. Was ist der Wert von ap -> i?
}
Die Lebensdauer einer vom Compiler generierten temporären Datei ist durch den C++-Standard genau definiert.
Wenn die Lebensdauer eines Provisoriums endet und das Provisorium im Gedächtnis lebt,
Der optimierende Compiler hat die Freiheit, seinen Stack-Speicherplatz mit anderen temporären Dateien wiederzuverwenden oder
bereichsbezogene lokale Variablen, deren Live-Bereich sich nicht damit überschneidet. Einige der
Legacy-Code basiert auf dem Verhalten älterer Compiler, in denen der Stack von temporären
Speicherplatz nicht wiederverwendet wird, kann die aggressive Stack-Wiederverwendung zu Laufzeitfehlern führen. Dies
Option wird verwendet, um die Optimierung der temporären Stapelwiederverwendung zu steuern.
-ftrapv
Diese Option erzeugt Traps für vorzeichenbehafteten Überlauf bei Addition, Subtraktion,
Multiplikationsoperationen.
-fwrapv
Diese Option weist den Compiler an, anzunehmen, dass ein vorzeichenbehafteter arithmetischer Überlauf von
Addition, Subtraktion und Multiplikation werden mit dem Zweier-Komplement umbrochen
Darstellung. Dieses Flag aktiviert einige Optimierungen und deaktiviert andere. Dies
Option ist standardmäßig für das Java-Frontend aktiviert, wie von der Java-Sprache gefordert
Spezifikation.
-fAusnahmen
Ausnahmebehandlung aktivieren. Generiert zusätzlichen Code, der zum Propagieren von Ausnahmen erforderlich ist. Zum
Bei einigen Zielen impliziert dies, dass GCC Frame-Abwicklungsinformationen für alle Funktionen generiert.
was zu einem erheblichen Overhead bei der Datengröße führen kann, obwohl dies keine Auswirkungen hat
Hinrichtung. Wenn Sie diese Option nicht angeben, aktiviert GCC sie standardmäßig für Sprachen
wie C++, die normalerweise eine Ausnahmebehandlung erfordern, und deaktiviert sie für Sprachen wie
C, die es normalerweise nicht benötigen. Möglicherweise müssen Sie diese Option jedoch aktivieren, wenn
Kompilieren von C-Code, der ordnungsgemäß mit geschriebenen Ausnahmehandlern zusammenarbeiten muss
in C++. Sie können diese Option auch deaktivieren, wenn Sie älteres C++ kompilieren
Programme, die keine Ausnahmebehandlung verwenden.
-fnon-call-ausnahmen
Generieren Sie Code, der es ermöglicht, Anweisungen zum Auslösen von Ausnahmen abzufangen. Beachten Sie, dass dies
erfordert plattformspezifische Laufzeitunterstützung, die es nicht überall gibt. Außerdem,
es erlaubt nur Fang Anweisungen zum Auslösen von Ausnahmen, dh Speicherreferenzen oder
Gleitkomma-Anweisungen. Es erlaubt nicht das Auslösen von Ausnahmen von willkürlichen
Signalhandler wie "SIGALRM".
-fdelete-dead-Exceptions
Bedenken Sie, dass Anweisungen, die Ausnahmen auslösen können, aber sonst nicht dazu beitragen,
die Ausführung des Programms kann wegoptimiert werden. Diese Option ist standardmäßig aktiviert
für das Ada-Frontend, wie es die Ada-Sprachspezifikation erlaubt. Optimierung
Durchgänge, die dazu führen, dass tote Ausnahmen entfernt werden, werden unabhängig voneinander aktiviert
Optimierungsstufen bzw.
-Funwind-Tische
Ähnlich -fAusnahmen, außer dass es nur alle benötigten statischen Daten generiert, aber
beeinflusst den generierten Code in keiner Weise. Brauchst du normalerweise nicht
aktivieren Sie diese Option; stattdessen ermöglicht ein Sprachprozessor, der diese Handhabung benötigt, dies
in Ihrem Namen.
-fasynchrone-unwind-Tabellen
Generieren Sie die Abwickeltabelle im DWARF 2-Format, wenn dies vom Zielcomputer unterstützt wird. Der Tisch ist
genau an jeder Befehlsgrenze, daher kann es zum Stapelabwickeln von verwendet werden
asynchrone Ereignisse (wie Debugger oder Garbage Collector).
-fno-gnu-einzigartig
Auf Systemen mit aktuellem GNU-Assembler und C-Bibliothek verwendet der C++-Compiler die
"STB_GNU_UNIQUE"-Bindung, um sicherzustellen, dass Definitionen von statischen Datenelementen der Vorlage
und statische lokale Variablen in Inline-Funktionen sind auch in Gegenwart von . eindeutig
"RTLD_LOCAL"; Dies ist notwendig, um Probleme mit einer Bibliothek zu vermeiden, die von zwei verschiedenen
"RTLD_LOCAL" Plugins abhängig von einer Definition in einem von ihnen und daher
Uneinigkeit mit dem anderen über die Bindung des Symbols. Aber das verursacht
"dlclose" wird für betroffene VNB ignoriert; wenn Ihr Programm auf Neuinitialisierung angewiesen ist
eines DSO über "dlclose" und "dlopen", können Sie verwenden -fno-gnu-einzigartig.
-fpcc-struct-return
Geben Sie "kurze" "struct"- und "union" -Werte im Speicher wie längere zurück, anstatt in
registriert. Diese Konvention ist weniger effizient, hat aber den Vorteil, dass
Intercallability zwischen GCC-kompilierten Dateien und Dateien, die mit anderen Compilern kompiliert wurden,
insbesondere der Portable C Compiler (pcc).
Die genaue Konvention für die Rückgabe von Strukturen im Speicher hängt vom Ziel ab
Konfigurationsmakros.
Kurze Strukturen und Gewerkschaften sind solche, deren Größe und Ausrichtung denen einiger
ganzzahliger Typ.
Warnung: Code kompiliert mit dem -fpcc-struct-return Schalter ist nicht binär kompatibel
mit Code kompiliert mit dem -freg-struct-return Schalter. Verwenden Sie es, um einer Nicht-
Binärschnittstelle der Standardanwendung.
-freg-struct-return
Rückgabe von "struct"- und "union"-Werten in Registern, wenn möglich. Das ist effizienter
für kleine Strukturen als -fpcc-struct-return.
Wenn Sie keines angeben -fpcc-struct-return noch -freg-struct-return, GCC ist standardmäßig auf
welche Konvention für das Ziel Standard ist. Wenn es keine Standardkonvention gibt,
GCC ist standardmäßig auf -fpcc-struct-return, außer bei Zielen, bei denen GCC das Prinzip ist
Compiler. In diesen Fällen können wir den Standard wählen, und wir haben uns für den effizienteren entschieden
Rückgabealternative registrieren.
Warnung: Code kompiliert mit dem -freg-struct-return Schalter ist nicht binär kompatibel
mit Code kompiliert mit dem -fpcc-struct-return Schalter. Verwenden Sie es, um einer Nicht-
Binärschnittstelle der Standardanwendung.
-fshort-enums
Weisen Sie einem Typ "enum" nur so viele Bytes zu, wie er für den deklarierten Bereich von . benötigt
mögliche Werte. Insbesondere entspricht der Typ "enum" der kleinsten ganzen Zahl
Typ, der genügend Platz bietet.
Warnung: -fshort-enums Schalter bewirkt, dass GCC Code generiert, der nicht binär ist
kompatibel mit Code, der ohne diesen Schalter generiert wurde. Verwenden Sie es, um einer Nicht-
Binärschnittstelle der Standardanwendung.
-fshort-doppelt
Verwenden Sie für "double" die gleiche Größe wie für "float".
Warnung: -fshort-doppelt Schalter bewirkt, dass GCC Code generiert, der nicht binär ist
kompatibel mit Code, der ohne diesen Schalter generiert wurde. Verwenden Sie es, um einer Nicht-
Binärschnittstelle der Standardanwendung.
-fshort-wchar
Überschreiben Sie den zugrunde liegenden Typ, damit "wchar_t" "short unsigned int" anstelle des ist
Standard für das Ziel. Diese Option ist nützlich, um Programme zu erstellen, unter denen ausgeführt werden soll
WEIN.
Warnung: -fshort-wchar Schalter bewirkt, dass GCC Code generiert, der nicht binär ist
kompatibel mit Code, der ohne diesen Schalter generiert wurde. Verwenden Sie es, um einer Nicht-
Binärschnittstelle der Standardanwendung.
-fno-gemeinsam
Steuert in C-Code die Platzierung von nicht initialisierten globalen Variablen. Unix-C-Compiler
haben traditionell mehrere Definitionen solcher Variablen in unterschiedlichen
Kompilierungseinheiten durch Platzieren der Variablen in einem gemeinsamen Block. Das ist das Verhalten
spezifiziert durch -fgemein, und ist die Standardeinstellung für GCC auf den meisten Zielen. Auf der anderen Seite,
Dieses Verhalten wird von ISO C nicht verlangt und kann auf einigen Zielen eine Geschwindigkeit oder einen Code enthalten
Größenstrafe für Variablenreferenzen. Die -fno-gemeinsam Option gibt an, dass die
Compiler sollte nicht initialisierte globale Variablen im Datenabschnitt des Objekts platzieren
Datei, anstatt sie als gemeinsame Blöcke zu generieren. Dies hat zur Folge, dass, wenn die
die gleiche Variable (ohne "extern") in zwei verschiedenen Zusammenstellungen deklariert wird, erhalten Sie a
Multiple-Definition-Fehler, wenn Sie sie verknüpfen. In diesem Fall müssen Sie mit kompilieren
-fgemein stattdessen. Kompilieren mit -fno-gemeinsam ist bei Zielen nützlich, für die es
bietet eine bessere Leistung, oder wenn Sie überprüfen möchten, ob das Programm funktioniert
andere Systeme, die nicht initialisierte Variablendeklarationen immer auf diese Weise behandeln.
-fno-ident
Ignorieren Sie die Direktive "#ident".
-finhibit-size-directive
Geben Sie keine Assembler-Direktive ".size" oder irgendetwas anderes aus, das Probleme verursachen würde
wenn die Funktion in der Mitte geteilt wird und die beiden Hälften weit entfernt sind
in der Erinnerung auseinander. Diese Option wird beim Kompilieren verwendet crtstuff.c; du solltest nicht brauchen
um es für etwas anderes zu verwenden.
-fverbose-asm
Fügen Sie zusätzliche Kommentarinformationen in den generierten Assemblycode ein, um ihn besser zu machen
lesbar. Diese Option ist im Allgemeinen nur für diejenigen von Nutzen, die die
generierten Assemblercode (vielleicht beim Debuggen des Compilers selbst).
-fno-verbose-asm, der Standardwert, führt dazu, dass die zusätzlichen Informationen weggelassen werden und ist
nützlich, wenn Sie zwei Assembler-Dateien vergleichen.
-frecord-gcc-switches
Dieser Schalter bewirkt, dass die Befehlszeile, die zum Aufrufen des Compilers verwendet wird, in aufgezeichnet wird
die Objektdatei, die erstellt wird. Dieser Schalter ist nur bei einigen implementiert
Ziele und das genaue Format der Aufnahme ist das Ziel- und das Binärdateiformat
abhängig, hat aber normalerweise die Form eines Abschnitts mit ASCII-Text. Dies
Schalter hängt mit dem zusammen -fverbose-asm Schalter, aber dieser Schalter nimmt nur auf
Informationen in der Assembler-Ausgabedatei als Kommentare, sodass sie nie das Objekt erreichen
Datei. Siehe auch -grecord-gcc-switches für eine andere Möglichkeit zum Speichern von Compileroptionen in
die Objektdatei.
-fpic
Positionsunabhängigen Code (PIC) generieren, der für die Verwendung in einer Shared Library geeignet ist, wenn
für den Zielcomputer unterstützt. Ein solcher Code greift auf alle konstanten Adressen über a . zu
globale Offset-Tabelle (GOT). Der dynamische Loader löst die GOT-Einträge auf, wenn die
Programm startet (der dynamische Lader ist nicht Teil von GCC; er ist Teil des Betriebs
System). Wenn die GOT-Größe für die verknüpfte ausführbare Datei ein maschinenspezifisches Maximum überschreitet
Größe erhalten Sie eine Fehlermeldung vom Linker, die darauf hinweist, dass -fpic funktioniert nicht; in
in diesem Fall neu kompilieren mit -fPIC stattdessen. (Diese Maximalwerte sind 8k beim SPARC, 28k beim
AArch64 und 32k auf m68k und RS/6000. Der x86 hat keine solche Begrenzung.)
Positionsunabhängiger Code erfordert spezielle Unterstützung und funktioniert daher nur auf
bestimmte Maschinen. Für x86 unterstützt GCC PIC für System V, aber nicht für Sun
386i. Für IBM RS/6000 generierter Code ist immer positionsunabhängig.
Wenn dieses Flag gesetzt ist, werden die Makros "__pic__" und "__PIC__" auf 1 definiert.
-fPIC
Falls von der Zielmaschine unterstützt, positionsunabhängigen Code ausgeben, geeignet für
dynamisches Verknüpfen und Vermeiden jeglicher Begrenzung der Größe der globalen Offset-Tabelle. Dies
Option macht einen Unterschied auf AArch64, m68k, PowerPC und SPARC.
Positionsunabhängiger Code erfordert spezielle Unterstützung und funktioniert daher nur auf
bestimmte Maschinen.
Wenn dieses Flag gesetzt ist, werden die Makros "__pic__" und "__PIC__" auf 2 definiert.
-fpie
-fpie
Diese Optionen sind ähnlich wie -fpic und -fPIC, aber generierter positionsunabhängiger Code
kann nur in ausführbare Dateien eingebunden werden. Normalerweise werden diese Optionen verwendet, wenn -Kuchen GCC
Option wird beim Verknüpfen verwendet.
-fpie und -fpie beide definieren die Makros "__pie__" und "__PIE__". Die Makros haben die
Wert 1 für -fpie und 2 für -fpie.
-fno-plt
Verwenden Sie PLT nicht für externe Funktionsaufrufe in positionsunabhängigem Code. Stattdessen,
Laden Sie die Adresse des Angerufenen an der Anrufstelle von GOT und verzweigen Sie dorthin. Das führt zu mehr
effizienter Code durch Eliminieren von PLT-Stubs und Aussetzen der GOT-Last für Optimierungen. Auf
Architekturen wie 32-Bit-x86, bei denen PLT-Stubs GOT-Zeiger in einem bestimmten . erwarten
register, dies gibt dem Compiler mehr Freiheit bei der Registerzuordnung. Faule Bindung
erfordert PLT: mit -fno-plt alle externen Symbole werden beim Laden aufgelöst.
Alternativ kann das Funktionsattribut "noplt" verwendet werden, um PLT für Aufrufe an . zu vermeiden
bestimmte externe Funktionen, indem Sie diese Funktionen mit diesem Attribut markieren.
Darüber hinaus konvertieren einige Ziele auch Aufrufe in die Funktionen, die mit markiert sind
Verwenden Sie nicht die PLT, um stattdessen die GOT für nicht-positionsunabhängigen Code zu verwenden.
-fno-Sprungtabellen
Verwenden Sie keine Sprungtabellen für switch-Anweisungen, auch wenn dies effizienter wäre
als andere Strategien zur Codegenerierung. Diese Option ist in Verbindung mit
-fpic or -fPIC zum Erstellen von Code, der Teil eines dynamischen Linkers ist und nicht
auf die Adresse einer Sprungtabelle verweisen. Auf einigen Zielen erfordern Sprungtabellen kein a
GOT und diese Option wird nicht benötigt.
-fixiert-reg
Behandeln Sie das genannte Register reg als festes Register; generierter Code sollte niemals verweisen auf
es (außer vielleicht als Stapelzeiger, Rahmenzeiger oder in einer anderen festen Rolle).
reg muss der Name eines Registers sein. Die akzeptierten Registernamen sind maschinenspezifisch
und sind im Makro "REGISTER_NAMES" in der Maschinenbeschreibungs-Makrodatei definiert.
Dieses Flag hat keine negative Form, da es eine Drei-Wege-Auswahl angibt.
-fcall-gebraucht-reg
Behandeln Sie das genannte Register reg als zuordenbares Register, das von Funktion überladen ist
Anrufe. Es kann für temporäre oder Variablen zugewiesen werden, die nicht in einem
Anruf. Auf diese Weise kompilierte Funktionen speichern und stellen das Register nicht wieder her reg.
Es ist ein Fehler, dieses Flag mit dem Rahmenzeiger oder Stapelzeiger zu verwenden. Verwendung davon
Flag für andere Register, die feste, durchdringende Rollen bei der Ausführung der Maschine haben
Modell führt zu katastrophalen Ergebnissen.
Dieses Flag hat keine negative Form, da es eine Drei-Wege-Auswahl angibt.
-fcall-gespeichert-reg
Behandeln Sie das genannte Register reg als zuweisbares Register, das von Funktionen gespeichert wird. Es kann sein
sogar für Temporäre oder Variablen zugewiesen, die über einen Anruf verteilt sind. Funktionen
auf diese Weise kompiliert Speichern und Wiederherstellen des Registers reg wenn sie es benutzen.
Es ist ein Fehler, dieses Flag mit dem Rahmenzeiger oder Stapelzeiger zu verwenden. Verwendung davon
Flag für andere Register, die feste, durchdringende Rollen bei der Ausführung der Maschine haben
Modell führt zu katastrophalen Ergebnissen.
Eine andere Art von Katastrophe ergibt sich aus der Verwendung dieses Flags für ein Register, in dem
Funktionswerte können zurückgegeben werden.
Dieses Flag hat keine negative Form, da es eine Drei-Wege-Auswahl angibt.
-fpack-struct[=n]
Wenn kein Wert angegeben ist, packen Sie alle Strukturelemente ohne Löcher zusammen. Wenn ein
Wert angegeben ist (der eine kleine Zweierpotenz sein muss), Packstruktur-Mitglieder
entsprechend diesem Wert, der die maximale Ausrichtung darstellt (d. h. Objekte mit
Größere Standardausrichtungsanforderungen werden möglicherweise unausgerichtet ausgegeben bei
der nächste Montageort.
Warnung: -fpack-struct Schalter bewirkt, dass GCC Code generiert, der nicht binär ist
kompatibel mit Code, der ohne diesen Schalter generiert wurde. Außerdem macht es den Code
suboptimal. Verwenden Sie es, um einer binären Schnittstelle einer nicht standardmäßigen Anwendung zu entsprechen.
-fInstrument-Funktionen
Generieren Sie Instrumentierungsaufrufe für den Einstieg und das Verlassen von Funktionen. Direkt nach der Funktion
Eingabe und kurz vor Funktionsende werden die folgenden Profilierungsfunktionen aufgerufen mit
die Adresse der aktuellen Funktion und deren Aufrufstelle. (Auf einigen Plattformen
"__builtin_return_address" funktioniert nicht über die aktuelle Funktion hinaus, also die Aufrufseite
andernfalls stehen den Profiling-Funktionen möglicherweise keine Informationen zur Verfügung.)
void __cyg_profile_func_enter (void *this_fn,
void *call_site);
void __cyg_profile_func_exit (void *this_fn,
void *call_site);
Das erste Argument ist die Adresse des Starts der aktuellen Funktion, die sein kann
in der Symboltabelle genau nachgesehen.
Diese Instrumentierung erfolgt auch für Funktionen, die inline in anderen Funktionen erweitert werden.
Die Profiling-Aufrufe geben an, wo konzeptionell die Inline-Funktion eingegeben wird und
ausgegangen. Dies bedeutet, dass adressierbare Versionen solcher Funktionen verfügbar sein müssen. Wenn
alle Ihre Verwendungen einer Funktion werden inline erweitert, dies kann eine zusätzliche Erweiterung bedeuten
der Codegröße. Wenn Sie in Ihrem C-Code "extern inline" verwenden, wird eine adressierbare Version von
solche Funktionen müssen bereitgestellt werden. (Dies ist normalerweise sowieso der Fall, aber wenn Sie
Glück gehabt und der Optimierer erweitert die Funktionen immer inline, die Sie vielleicht bekommen haben
weg, ohne statische Kopien bereitzustellen.)
Einer Funktion kann das Attribut "no_instrument_function" gegeben werden, in diesem Fall ist dies
Instrumentierung erfolgt nicht. Dies kann zum Beispiel für das Profiling verwendet werden
oben aufgeführten Funktionen, Interrupt-Routinen mit hoher Priorität und alle Funktionen, von denen
die Profiling-Funktionen können nicht sicher aufgerufen werden (vielleicht Signalhandler, wenn die
Profiling-Routinen erzeugen eine Ausgabe oder weisen Speicher zu).
-finstrument-functions-exclude-file-list=Datei,Datei, ...
Legen Sie die Liste der Funktionen fest, die von der Instrumentierung ausgeschlossen sind (siehe Beschreibung
of -fInstrument-Funktionen). Wenn die Datei, die eine Funktionsdefinition enthält, übereinstimmt
mit einem von Datei, dann ist diese Funktion nicht instrumentiert. Das Match ist beendet am
Teilzeichenfolgen: wenn die Datei Parameter ist ein Teilstring des Dateinamens, er gilt als
ein Spiel sein.
Beispielsweise:
-finstrument-functions-exclude-file-list=/bits/stl,include/sys
schließt alle Inline-Funktionen aus, die in Dateien definiert sind, deren Pfadnamen enthalten /bits/stl or
einschließen/sys.
Wenn Sie aus irgendeinem Grund einen Buchstaben einfügen möchten , in einem von sym, schreiben ,. Beispielsweise,
-finstrument-functions-exclude-file-list=',,tmp' (beachte das einfache Anführungszeichen um
die Option).
-finstrument-functions-exclude-function-list=sym,sym, ...
Das ist ähnlich wie -finstrument-funktionen-ausschließen-dateiliste, aber diese Option setzt die
Liste der Funktionsnamen, die von der Instrumentierung ausgeschlossen werden sollen. Der Funktionsname zu sein
übereinstimmend ist der für den Benutzer sichtbare Name, wie z bla(const vektor &)", nicht
der interne verstümmelte Name (zB "_Z4blahRSt6vectorIiSaIiEE"). Das Match ist beendet am
Teilzeichenfolgen: wenn die sym Parameter ist ein Teilstring des Funktionsnamens, er wird berücksichtigt
ein Spiel zu sein. Bei erweiterten C99- und C++-Bezeichnern muss der Funktionsname angegeben werden
in UTF-8, keine universellen Zeichennamen verwenden.
-fstack-check
Generieren Sie Code, um sicherzustellen, dass Sie die Grenze des Stapels nicht überschreiten. Du
sollte dieses Flag angeben, wenn Sie in einer Umgebung mit mehreren Threads ausgeführt werden.
in einer Single-Thread-Umgebung müssen Sie es jedoch nur selten angeben, da stack
Überlauf wird auf fast allen Systemen automatisch erkannt, wenn nur ein Stack vorhanden ist.
Beachten Sie, dass dieser Schalter nicht wirklich dazu führt, dass eine Überprüfung durchgeführt wird; der Betrieb
System oder die Language Runtime muss dies tun. Der Schalter bewirkt, dass die Codegenerierung
Stellen Sie sicher, dass sie sehen, dass der Stapel ausgefahren wird.
Sie können zusätzlich einen String-Parameter angeben: nicht bedeutet keine Überprüfung, Generika Mittel
die Verwendung von Überprüfungen im alten Stil erzwingen, spezifisch bedeutet, die beste Prüfmethode zu verwenden und
ist gleichbedeutend mit nackt -fstack-check.
Die Überprüfung im alten Stil ist ein generischer Mechanismus, der keine spezifische Zielunterstützung erfordert
der Compiler bringt aber folgende Nachteile mit sich:
1. Geänderte Allokationsstrategie für große Objekte: Sie werden immer allokiert
dynamisch, wenn ihre Größe einen festen Schwellenwert überschreitet.
2. Feste Begrenzung der Größe des statischen Funktionsrahmens: wenn er von a . überstiegen wird
bestimmten Funktion ist die Stack-Überprüfung nicht zuverlässig und es wird eine Warnung ausgegeben
Compiler.
3. Ineffizienz: sowohl aufgrund der modifizierten Allokationsstrategie als auch der generischen
Implementierung wird die Codeleistung behindert.
Beachten Sie, dass die Stapelprüfung im alten Stil auch die Fallback-Methode für spezifisch wenn nein
Target-Unterstützung wurde im Compiler hinzugefügt.
-fstack-limit-register=reg
-fstack-limit-symbol=sym
-fno-stack-limit
Generieren Sie Code, um sicherzustellen, dass der Stack auch nicht über einen bestimmten Wert anwächst
der Wert eines Registers oder die Adresse eines Symbols. Wenn ein größerer Stapel benötigt wird, a
Signal wird zur Laufzeit angehoben. Bei den meisten Zielen wird das Signal vor dem Stapel angehoben
überschreitet die Grenze, so dass es möglich ist, das Signal zu erfassen, ohne spezielle zu nehmen
Vorsichtsmaßnahmen.
Wenn der Stack beispielsweise bei der absoluten Adresse beginnt 0x80000000 und wächst nach unten,
Sie können die Flaggen verwenden -fstack-limit-symbol=__stack_limit und
-Wl,--defsym,__stack_limit=0x7ffe0000 um ein Stack-Limit von 128 KB zu erzwingen. Beachten Sie, dass
dies kann nur mit dem GNU-Linker funktionieren.
-fsplit-stack
Generieren Sie Code, um den Stapel automatisch aufzuteilen, bevor er überläuft. Das resultierende
Programm hat einen nicht zusammenhängenden Stack, der nur überlaufen kann, wenn das Programm nicht in der Lage ist
keinen weiteren Speicher zuweisen. Dies ist am nützlichsten, wenn Threaded-Programme ausgeführt werden, da es
ist nicht mehr erforderlich, um eine gute Stapelgröße für jeden Thread zu berechnen. Das ist
derzeit nur für x86-Ziele implementiert, auf denen GNU/Linux ausgeführt wird.
Wenn Code mit kompiliert wurde -fsplit-stack ruft Code auf, der ohne kompiliert wurde -fsplit-stack, Dort
Möglicherweise steht nicht viel Stapelspeicherplatz für die Ausführung des letzteren Codes zur Verfügung. Wenn alles kompiliert wird
Code, einschließlich Bibliothekscode, mit -fsplit-stack keine Option ist, dann kann der Linker
korrigiere diese Aufrufe, damit der Code ohne kompiliert wird -fsplit-stack hat immer einen großen
Stapel. Die Unterstützung dafür ist im Gold-Linker in der GNU-Binutils-Version implementiert
2.21 und später.
-fleading-underscore
Diese Option und ihr Gegenstück, -fno-führender-Unterstrich, ändern gewaltsam die Art und Weise C
Symbole werden in der Objektdatei dargestellt. Eine Verwendung besteht darin, die Verknüpfung mit dem Erbe zu unterstützen
Assembler-Code.
Warnung: -fleading-underscore Schalter bewirkt, dass GCC Code generiert, der nicht
binär kompatibel mit Code, der ohne diesen Schalter generiert wurde. Verwenden Sie es, um a . zu erfüllen
Nicht-Standardanwendungs-Binärschnittstelle. Nicht alle Ziele bieten vollständige Unterstützung
für diesen Schalter.
-ftls-model=Modell
Ändern Sie das zu verwendende Thread-lokale Speichermodell. Die Modell Argument sollte eines sein
global-dynamisch, lokal-dynamisch, initial-exec or lokale-exec. Beachten Sie, dass die Wahl
Optimierungsbedürftig: Der Compiler kann ein effizienteres Modell für Symbole verwenden, nicht
außerhalb der Übersetzungseinheit sichtbar, oder wenn -fpic wird nicht auf der Kommandozeile angegeben.
Die Standardeinstellung ohne -fpic is initial-exec;; mit -fpic Der Standardwert ist global-dynamisch.
-fsichtbarkeit=[Standard|intern|versteckt|geschützt]
Setzen Sie die Standardsichtbarkeit von ELF-Bildsymbolen auf die angegebene Option ---alle Symbole sind
mit diesem gekennzeichnet, es sei denn, es wird im Code überschrieben. Die Verwendung dieser Funktion kann sehr
Verlinkung und Ladezeiten von Shared Object Libraries erheblich verbessern, mehr produzieren
optimierten Code, bieten einen nahezu perfekten API-Export und verhindern Symbolkonflikte. es ist
starker Es wird empfohlen, dies in allen gemeinsam genutzten Objekten zu verwenden, die Sie verteilen.
Trotz der Nomenklatur Standard bedeutet immer öffentlich; dh, verfügbar, um verlinkt zu werden
gegen von außerhalb des gemeinsamen Objekts. geschützt und intern sind ziemlich nutzlos in
Verwendung in der realen Welt, daher ist die einzige andere häufig verwendete Option versteckt. Die Standardeinstellung, wenn
-fSichtbarkeit ist nicht angegeben Standard, dh jedes Symbol öffentlich machen.
Eine gute Erklärung der Vorteile, die sich aus der Sicherstellung der richtigen ELF-Symbole ergeben
Sichtbarkeit wird durch "How To Write Shared Libraries" von Ulrich Drepper gegeben (was
gefunden amhttp://www.akkadia.org/drepper/>)---aber eine überlegene Lösung gemacht
Durch diese Option ist es möglich, Dinge versteckt zu markieren, wenn die Voreinstellung öffentlich ist zu machen
die Standardeinstellung versteckt und Dinge als öffentlich markieren. Dies ist die Norm bei DLLs unter Windows und
mit -fvisibility=versteckt und "__attribute__ ((visibility("default")))" anstelle von
"__declspec(dllexport)" erhalten Sie fast identische Semantik mit identischer Syntax.
Dies ist ein großer Segen für diejenigen, die mit plattformübergreifenden Projekten arbeiten.
Für diejenigen, die Sichtbarkeitsunterstützung zu bestehendem Code hinzufügen, finden Sie möglicherweise "#pragma GCC
Sichtbarkeit" der Nutzung. Dies funktioniert, indem Sie die Deklarationen, die Sie einstellen möchten, beifügen
Sichtbarkeit für mit (zum Beispiel) "#pragma GCC Sichtbarkeit push(hidden)" und "#pragma
GCC-Sichtbarkeit Pop". Denken Sie daran, dass die Sichtbarkeit von Symbolen angezeigt werden sollte as Teil of
API Schnittstelle Vertrag und daher sollte jeder neue Code immer die Sichtbarkeit angeben, wenn
es ist nicht die Standardeinstellung; dh Deklarationen, die nur innerhalb des lokalen VNB verwendet werden, sollten
immer explizit als ausgeblendet markiert werden, um PLT-Indirektionen zu vermeiden
Gemeinkosten --- dies deutlich zu machen, fördert auch die Lesbarkeit und Selbstdokumentation
des Codes. Beachten Sie, dass aufgrund der Anforderungen der ISO C++-Spezifikation "Operator neu" und
"operator delete" muss immer die Standardsichtbarkeit haben.
Beachten Sie, dass Header von außerhalb Ihres Projekts, insbesondere System-Header und
Header aus einer anderen Bibliothek, die Sie verwenden, erwarten möglicherweise nicht, mit kompiliert zu werden
andere Sichtbarkeit als die Standardeinstellung. Möglicherweise müssen Sie explizit "#pragma GCC" sagen
Sichtbarkeit push(default)", bevor solche Header eingefügt werden.
"externe" Deklarationen sind nicht betroffen von -fSichtbarkeit, also kann viel Code sein
neu kompiliert mit -fvisibility=versteckt ohne Modifikationen. Dies bedeutet jedoch, dass
Aufrufe von "externen" Funktionen ohne explizite Sichtbarkeit verwenden die PLT, also ist es mehr
effektiv zu verwenden "__attribute ((Sichtbarkeit))" und/oder "#pragma GCC Sichtbarkeit" zu verwenden, um zu sagen
der Compiler, welche "externen" Deklarationen als versteckt behandelt werden sollen.
Beachten Sie, dass -fSichtbarkeit wirkt sich auf vage Verknüpfungsentitäten in C++ aus. Dies bedeutet, dass z
Instanz muss eine Ausnahmeklasse, die zwischen DSOs geworfen wird, explizit markiert werden
mit Standardsichtbarkeit, damit die typ_info Knoten werden zwischen den DSOs vereinheitlicht.
Eine Übersicht über diese Techniken, ihre Vorteile und ihre Anwendung finden Sie unter
<http://gcc.gnu.org/wiki/Visibility>.
-fstrict-volatile-bitfields
Diese Option sollte verwendet werden, wenn Zugriffe auf flüchtige Bitfelder (oder andere Strukturen)
Felder, obwohl der Compiler diese Typen normalerweise sowieso berücksichtigt) sollten ein einzelnes verwenden
Zugriff auf die Breite des Feldtyps, wenn möglich auf eine natürliche Ausrichtung ausgerichtet.
Ziele mit speicherabgebildeten peripheren Registern können beispielsweise alle diese
Zugriffe sollen 16 Bit breit sein; mit diesem Flag können Sie alle peripheren Bitfelder deklarieren
als "unsigned short" (vorausgesetzt, short ist bei diesen Zielen 16 Bit), um die Verwendung von GCC zu erzwingen
16-Bit-Zugriffe anstelle eines möglicherweise effizienteren 32-Bit-Zugriffs.
Wenn diese Option deaktiviert ist, verwendet der Compiler die effizienteste Anweisung. In dem
vorheriges Beispiel, das könnte ein 32-Bit-Ladebefehl sein, obwohl dieser auf
Bytes, die keinen Teil des Bitfelds enthalten, oder speicherabgebildete Register
unabhängig von dem, der aktualisiert wird.
In einigen Fällen, beispielsweise wenn das Attribut "gepackt" auf ein Strukturfeld angewendet wird,
Es ist möglicherweise nicht möglich, mit einem einzigen korrekten Lese- oder Schreibzugriff auf das Feld zuzugreifen
für die Zielmaschine ausgerichtet. In diesem Fall greift GCC auf die Generierung von Multiples zurück
Zugriffe statt Code, der das Ergebnis zur Laufzeit fehlerhaft oder abschneidet.
Hinweis: Aufgrund von Einschränkungen des C/C++11-Speichermodells sind Schreibzugriffe nicht erlaubt
um Nicht-Bitfeld-Mitglieder zu berühren. Es wird daher empfohlen, alle Bits des zu definieren
Feldtyp als Bitfeld-Mitglieder.
Der Standardwert dieser Option wird durch die binäre Schnittstelle der Anwendung für . bestimmt
der Zielprozessor.
-fsync-libcalls
Diese Option steuert, ob eine Out-of-Line-Instanz der "__sync"-Familie von
-Funktionen können verwendet werden, um die C++11-Funktionsfamilie "__atomic" zu implementieren.
Der Standardwert dieser Option ist aktiviert, also die einzige sinnvolle Form der Option
is -fno-sync-libcalls. Diese Option wird bei der Implementierung der libatomisch
Laufzeitbibliothek.
In diesem Abschnitt werden mehrere Umgebungsvariablen beschrieben, die sich auf die Funktionsweise von GCC auswirken. Etwas
von ihnen funktionieren, indem sie Verzeichnisse oder Präfixe angeben, die bei der Suche nach verschiedenen Arten verwendet werden sollen
von Dateien. Einige werden verwendet, um andere Aspekte der Kompilierungsumgebung anzugeben.
Beachten Sie, dass Sie auch Orte für die Suche mit Optionen wie -B, -I und -L.
Diese haben Vorrang vor Orten, die mithilfe von Umgebungsvariablen angegeben werden, die wiederum
haben Vorrang vor denen, die durch die Konfiguration von GCC festgelegt wurden.
SPRACHE
LC_CTYPE
LC_MESSAGES
LC_ALL
Diese Umgebungsvariablen steuern, wie GCC Lokalisierungsinformationen verwendet
was es dem GCC ermöglicht, mit verschiedenen nationalen Konventionen zusammenzuarbeiten. GCC überprüft das Gebietsschema
Kategorien LC_CTYPE und LC_MESSAGES wenn es so konfiguriert wurde. Diese Gebietsschema
Kategorien können auf jeden Wert gesetzt werden, der von Ihrer Installation unterstützt wird. Ein typischer Wert ist
de_DE.UTF-8 für Englisch im Vereinigten Königreich, kodiert in UTF-8.
Die LC_CTYPE Die Umgebungsvariable gibt die Zeichenklassifizierung an. GCC verwendet es, um
Bestimmen Sie die Zeichengrenzen in einer Zeichenfolge; Dies wird für einige Multibyte benötigt
Codierungen, die Anführungszeichen und Escape-Zeichen enthalten, die ansonsten als a . interpretiert werden
String-Ende oder Escape.
Die LC_MESSAGES Umgebungsvariable gibt die Sprache an, die in der Diagnose verwendet werden soll
Nachrichten.
Besitzt das LC_ALL Umgebungsvariable gesetzt ist, überschreibt sie den Wert von LC_CTYPE und
LC_MESSAGES;; Andernfalls, LC_CTYPE und LC_MESSAGES Standardwert auf den Wert des SPRACHE
Umgebungsvariable. Wenn keine dieser Variablen festgelegt ist, verwendet GCC standardmäßig den Standardwert
C Englisches Verhalten.
TMPDIR
If TMPDIR gesetzt ist, gibt es das Verzeichnis an, das für temporäre Dateien verwendet werden soll. GCC verwendet
temporäre Dateien, um die Ausgabe einer Kompilierungsstufe zu speichern, die als
Eingabe in die nächste Stufe: zum Beispiel die Ausgabe des Präprozessors, die der
Eingabe in den eigentlichen Compiler.
GCC_COMPARE_DEBUG
Rahmen GCC_COMPARE_DEBUG ist fast gleichbedeutend mit Passieren -fcompare-debug zu den
Compiler-Treiber. Weitere Informationen finden Sie in der Dokumentation zu dieser Option.
GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX gesetzt ist, gibt es ein Präfix an, das in den Namen der
Unterprogramme, die vom Compiler ausgeführt werden. Wenn dieses Präfix kombiniert wird, wird kein Schrägstrich hinzugefügt
mit dem Namen eines Unterprogramms, aber Sie können ein Präfix angeben, das mit einem Schrägstrich endet, wenn
Sie wünschen.
If GCC_EXEC_PREFIX nicht gesetzt ist, versucht GCC, ein geeignetes Präfix zu ermitteln
basierend auf dem Pfadnamen, mit dem es aufgerufen wird.
Wenn GCC das Unterprogramm mit dem angegebenen Präfix nicht finden kann, versucht es, im
übliche Plätze für das Unterprogramm.
Der Standardwert von GCC_EXEC_PREFIX is Präfix/lib/gcc/ woher Präfix ist das Präfix zu
der installierte Compiler. In vielen Fällen Präfix ist der Wert von "Präfix", wenn Sie das ausgeführt haben
konfigurieren Skripte.
Andere mit angegebene Präfixe -B haben Vorrang vor diesem Präfix.
Dieses Präfix wird auch zum Suchen von Dateien verwendet, wie z crt0.o die zum Verlinken verwendet werden.
Außerdem wird das Präfix auf ungewöhnliche Weise beim Auffinden der zu durchsuchenden Verzeichnisse verwendet
für Header-Dateien. Für jedes der Standardverzeichnisse, deren Name normalerweise beginnt
mit /usr/local/lib/gcc (genauer gesagt mit dem Wert von GCC_INCLUDE_DIR), GCC versucht
Ersetzen Sie das, beginnend mit dem angegebenen Präfix, um ein alternatives Verzeichnis zu erstellen
Name. Also mit -Bfoo/, GCC-Suchen foo/bar kurz bevor es den Standard durchsucht
Verzeichnis /usr/local/lib/bar. Beginnt ein Standardverzeichnis mit dem konfigurierten
Präfix dann der Wert von Präfix wird ersetzt durch GCC_EXEC_PREFIX bei der Suche nach Header
Dateien.
COMPILER_PATH
Der Wert der COMPILER_PATH ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen, ähnlich wie PATH.
GCC probiert die so angegebenen Verzeichnisse bei der Suche nach Unterprogrammen aus, wenn dies nicht möglich ist
finde die Unterprogramme mit GCC_EXEC_PREFIX.
LIBRARY_PATH
Der Wert der LIBRARY_PATH ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen, ähnlich wie PATH.
Als nativer Compiler konfiguriert, probiert GCC die so angegebenen Verzeichnisse aus, wenn
Suche nach speziellen Linker-Dateien, wenn sie mit nicht gefunden werden können GCC_EXEC_PREFIX.
Beim Verlinken mit GCC werden diese Verzeichnisse auch bei der Suche nach gewöhnlichen Bibliotheken verwendet
für die -l Option (aber mit angegebene Verzeichnisse -L zuerst kommen).
SPRACHE
Diese Variable wird verwendet, um Gebietsschemainformationen an den Compiler zu übergeben. Ein Weg, in dem
Diese Informationen werden verwendet, um den zu verwendenden Zeichensatz zu bestimmen, wenn Zeichen
Literale, String-Literale und Kommentare werden in C und C++ geparst. Wenn der Compiler
konfiguriert, um Multibyte-Zeichen zuzulassen, die folgenden Werte für SPRACHE sind
anerkannt:
C-JIS
Erkennen Sie JIS-Zeichen.
C-SJIS
SJIS-Zeichen erkennen.
C-EUCJP
Erkennen Sie EUCJP-Zeichen.
If SPRACHE nicht definiert ist oder einen anderen Wert hat, verwendet der Compiler "mblen"
und "mbtowc", wie durch das Standardgebietsschema definiert, um Multibyte zu erkennen und zu übersetzen
Zeichen.
Einige zusätzliche Umgebungsvariablen beeinflussen das Verhalten des Präprozessors.
CPATH
C_include_path
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
Der Wert jeder Variablen ist eine Liste von Verzeichnissen, die durch ein Sonderzeichen getrennt sind
Gefällt mir PATH, in dem nach Header-Dateien gesucht werden soll. Der besondere Charakter,
"PATH_SEPARATOR", ist zielabhängig und wird zur GCC-Build-Zeit bestimmt. Für Microsoft
Bei Windows-basierten Zielen ist es ein Semikolon, und bei fast allen anderen Zielen ist es ein
Doppelpunkt.
CPATH gibt eine Liste von Verzeichnissen an, die durchsucht werden sollen, als ob mit angegeben -I, Aber
nach beliebigen Pfaden mit -I Optionen auf der Kommandozeile. Diese Umgebungsvariable
wird unabhängig davon verwendet, welche Sprache vorverarbeitet wird.
Die restlichen Umgebungsvariablen gelten nur bei der Vorverarbeitung des jeweiligen
Sprache angegeben. Jeder gibt eine Liste von Verzeichnissen an, die durchsucht werden sollen, als ob
angegeben mit -isystem, aber nach allen Pfaden, die mit . angegeben sind -isystem Optionen auf der
Befehlszeile.
In all diesen Variablen weist ein leeres Element den Compiler an, seine aktuellen
Arbeitsverzeichnis. Leere Elemente können am Anfang oder Ende eines Pfads erscheinen. Zum
Beispiel, wenn der Wert von CPATH ist ":/special/include", das hat den gleichen Effekt wie
-I. -ich/besonders/einschließen.
ABHÄNGIGKEITEN_OUTPUT
Wenn diese Variable gesetzt ist, gibt ihr Wert an, wie Abhängigkeiten für Make based . ausgegeben werden
auf den vom Compiler verarbeiteten Nicht-System-Header-Dateien. System-Header-Dateien sind
in der Abhängigkeitsausgabe ignoriert.
Der Wert der ABHÄNGIGKEITEN_OUTPUT kann nur ein Dateiname sein, in diesem Fall gelten die Make-Regeln
werden in diese Datei geschrieben, wobei der Zielname anhand des Quelldateinamens erraten wird. Oder der
Wert kann die Form haben Datei Ziel, in diesem Fall werden die Regeln in eine Datei geschrieben Datei
Verwendung von Ziel als Zielname.
Mit anderen Worten, diese Umgebungsvariable entspricht der Kombination der Optionen -MM
und -MF, mit optionalem -MT auch wechseln.
SUNPRO_ABHÄNGIGKEITEN
Diese Variable ist die gleiche wie ABHÄNGIGKEITEN_OUTPUT (siehe oben), außer dass System
Header-Dateien werden nicht ignoriert, also impliziert es -M statt -MM. Jedoch die
die Abhängigkeit von der Haupteingabedatei entfällt.
Verwenden Sie arm-linux-gnueabi-g++ online über die Dienste von onworks.net