Dies ist der Befehl arm-linux-gnueabi-gcc-4.7, 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...] [-pedantisch]
[-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 wäre -fno-foo. Dieses Handbuch dokumentiert nur eine von
diese beiden 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] -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 -fopenmp -fms-Erweiterungen -fplan9-Erweiterungen -Trigraphen
-keine-integrierte-cpp -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 -fplatzsparen
-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 -fstats -ftemplate-Tiefe=n
-fno-threadsafe-statics -sicherung-cxa-atexit -fno-schwach -nostdinc++ -fno-default-inline
-fvisibility-inlines-hidden -fvisibility-ms-kompat -Wabi -Wconversion-null
-Wctor-dtor-Datenschutz -Wdelete-non-virtual-dtor -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 -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]
-fno-diagnostics-show-option
Warnung Optionen
-fsyntax-nur -fmax-Fehler=n -pedantisch -pedantische-Fehler -w -Wextra -Wand
-Watdress -Waggregate-Rückgabe -Warray-Grenzen -Wno-Attribute
-Wno-eingebautes-Makro neu definiert -Wc++-kompatibel -Wc++11-kompatibel -Wcast-Ausrichtung -Wcast-Qualität
-Wchar-Indexe -Wclobbered -WKommentar -WUmwandlung -Wcoverage-Mismatch -Wno-cpp
-Wno-veraltet -Wno-veraltet-Deklarationen -Wdisabled-Optimierung -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-y2k
-Wframe-größer-als=len -Wno-free-nonheap-Objekt -Wjump-fehlt-init
-Wignored-Qualifier -Wimplizit -Wimplicit-Funktionsdeklaration -Wimplicit-int
-Winit-Selbst -Winline -Wvielleicht-nicht initialisiert -Wno-int-to-pointer-cast
-Wno-ungültig-offsetof -Winvalid-pch -Wgrößer-als=len -Wunsafe-Loop-Optimierungen
-Wlogische-Op -Wlang-lang -Wmain -Wvielleicht-nicht initialisiert -Wmissing-Klammern
-Wfehlende Feldinitialisierer -Wmissing-Format-Attribute -Wfehlende-include-verzeichnisse
-Wno-Schmutzfänger -Wno-Multichar -Wnonnull -Wno-Überlauf -Ü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
-Rückgabe-Typ -WSequenz-Punkt -Schatten -Wsign-vergleichen -Wsign-Konvertierung
-Wstack-Schutz -Wstack-Nutzung=len -Wstrict-Aliasing -Wstrict-Aliasing=n
-Strenger-Überlauf -Wstrict-overflow=n -Wsuggest-Attribut=[auch|const|keine Rückkehr]
-Wschalter -Wswitch-Standard -Schalter-Aufzählung -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
-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 -fdbg-cnt-liste -fdbg-cnt=Schalter-
Werteliste -fdisable-ipa-Pass_Name -fdisable-rtl-Pass_Name -fdisable-rtl-passieren-
Name=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-vcg -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-schmutzfänger[-n]
-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-vrp[-n] -ftree-vectorizer-verbose=n -Fdump-baum-storeccp[-n]
-fdump-final-insns=Datei -fcompare-debug[=entscheidet sich] -fcompare-debug-second
-feliminate-zwerg2-dups -feiminate-unused-debug-types
-feiminate-unused-debug-symbols -femit-class-debug-immer -abwehrbar-Art-passieren
-abwehrbar-Art-passieren=Bereichsliste -fdebug-types-Sektion -fmem-Bericht -fpre-ipa-mem-bericht
-fpost-ipa-mem-bericht -fprofile-Bögen -frandom-Seed=Schnur -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+ -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
-falign-Funktionen[=n] -falign-springt[=n] -falign-labels[=n] -falign-Schleifen[=n]
-fassoziative-mathematik -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 -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
-fif-Konvertierung -fif-conversion2 -findirect-Inlining -finline-Funktionen
-finline-Funktionen-einmal genannt -finline-limit=n -finline-kleine-Funktionen -fipa-cp
-fipa-cp-klon -fipa-matrix-reorg -fipa-pta -fipa-Profil -fipa-pure-const
-fipa-Referenz -fira-Algorithmus=Algorithmus -fira-region=Region -fira-Schleifendruck
-fno-ira-share-save-slots -fno-ira-share-spill-slots -fira-verbose=n -fünf Punkte
-fkeep-inline-Funktionen -Fekee-statische Konst -Floop-Block -floop-flatten
-floop-Austausch -floop-Streifen-Mine -floop-parallelize-all -flto
-flto-Komprimierungsstufe -flto-partition=alg -flto-Bericht -fmerge-all-Konstanten
-fmerge-Konstanten -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-invarianten
Schmutzfänger -fmudflapir -Schmutzfänger -fno-zweigzahl-reg -fno-default-inline
-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-register-move
-foptimize-Geschwisteranrufe -fpartielles Inlining -fpeel-Schleifen -fpredictive-commoning
-fprefetch-loop-arrays -fprofile-Korrektur -fprofile-dir=Weg -fprofile-generieren
-fprofile-generieren=Weg -fprofile-verwenden -fprofile-use=Weg -fprofile-Werte
-Reziproke-Mathematik -kostenlos -fregmove -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-insns
-fschedule-insns2 -fsection-Anker -fselektive-Planung -fselektive Planung2
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-breite Typen -stapelschutz -fstack-protector-all -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-parallelize-loops=n
-ftree-pre -ftree-partial-pre -ftree-pta -ftree-reassoc -ftree-waschbecken -ftree-sra
-Ftree-Switch-Umwandlung -ftree-tail-merge -ftree-ter -ftree-vect-loop-version
-ftree-vektorisieren -ftree-vrp -Spaß-zu-einer-Zeit -funroll-all-loops -Funroll-Schleifen
-funsafe-loop-optimierungen -funsafe-mathematik-optimierungen -Funswitch-Schleifen
-fvariable-expansion-in-roller -fvect-cost-model -fvpt -fweb -fganze-Programm -fwpa
-sicherung-ld=Linker -fuse-linker-plugin --param Name=Wert -O -O0 -O1 -O2 -O3 -Du
-Ofast
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
Monteur Option
- Wa,zu erhalten -Xassembler zu erhalten
Links Optionen
Objektdateiname -lBibliothek -nostartfiles -nodefaultlibs -nostdlib -Kuchen -rdynamisch -s
-statisch -static-libgcc -static-libstdc++ -geteilt -shared-libgcc -symbolisch -T Skript
-WL,zu erhalten -Xlinker zu erhalten -u Symbol
Verzeichnis Optionen
-BPräfix -Idir -iplugindir=dir -Ich zitieredir -Ldir -spezifikationen=Datei -I- --sysroot=dir
Maschine Abhängig Optionen
AAArch64 Optionen -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 -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
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
-mwords-little-endian -mfloat-abi=Name -mfpe -mfp16-format=Name -mhumb-interwork
-mno-daumen-interwork -mcpu=Name -marsch=Name -mfpu=Name -mstructure-size-boundary=n
-mabort-auf-noreturn -mlong-anrufe -mno-lange-Anrufe -msingle-pic-base
-mno-Einzelbildbasis -mpic-register=reg -mnop-fun-dllimport -mcirrus-fix-ungültige-insns
-mno-cirrus-fix-ungültige-insns -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
AVR Optionen -mmcu=MCU -maccumulate-args -filialkosten=kosten -mcall-prologe -minze8
-mno-unterbricht -Entspann dich -mkurze-Anrufe -mstrict-X -Mtiny-Stack
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 -malpha-wie -mg -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
Dezember Alpha/VMS Optionen -mvms-Rückgabecodes -mdebug-main=Präfix -mmalloc64
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 -mbionisch -Mandroid -tno-android-cc -tno-android-ld
H8 / 300 Optionen -Entspann dich -Mh -Frau -Mn -minze32 -bösartig-300
HPPA Optionen -marsch=Architektur-Typ -mbig-switch -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-big-switch -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
i386 und x86-64 Optionen -mtune=CPU-Typ -marsch=CPU-Typ -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 -maes -mpclmul
-MFSGSBASE -mrdrnd -Mf16c -mfma -msse4a -m3dnow -mpopcnt -mabm -mbmi -MTBM -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -m Threads -mno-align-stringops -minline-all-stringops
-minline-stringops-dynamisch -mstringop-strategie=alg -mpush-args
-ausgehende-Argumente akkumulieren -m128bit-long-double -m96bit-long-double -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 -mlarge-data-threshold=num -msse2avx
-Mfentry -m8bit-iviv -mavx256-split-unaligned-load -mavx256-split-unaligned-store
i386 und x86-64 Windows Optionen -mconsole -mcygwin -mno-cygwin -mdll
-mnop-fun-dllimport -m Gewinde -Municode -mwin32 -mwindows -fno-set-stack-ausführbare Datei
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
IA-64/VMS Optionen -mvms-Rückgabecodes -mdebug-main=Präfix -mmalloc64
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
-mxl-modus-App-Modell
MIPS Optionen -DER -EB -marsch=Bogen -mtune=Bogen -Mips1 -Mips2 -Mips3 -Mips4
-Mips32 -mips32r2 -Mips64 -mips64r2 -Mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=abi -mabicalls -mno-abicals
-mshared -mno-geteilt -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-float -msoft-float -msingle-float -mdouble-float -mdsp -mno-dsp
-mdspr2 -mno-dspr2 -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
-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-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
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
RS / 6000 und PowerPC Optionen -mcpu=CPU-Typ -mtune=CPU-Typ -mcmodel=Code-Modell -Macht
-mno-macht -Macht2 -mno-power2 -mpowerpc -mpowerpc64 -mno-powerpc -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
-mnew-mnemonik -Schimmel-Mnemonik -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
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 -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
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 -madjust-unroll
-indizierte-Adressierung -mgettrcost=Anzahl -mpt-behoben -ausgehende-Argumente akkumulieren
-minvalid-Symbole -msoft-atomar -filialkosten=num -mcbranchdi -mcmpeqdi -verwirrt-wahnsinnig
-mppretend-cmove
Solaris 2 Optionen -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 -Mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f
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
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 -mbig-switch
VAX Optionen -mg -mgnu -Munix
VxWorks Optionen -mrtp -nicht statisch -Bstatisch -Bdynamisch -Xbind-faul -Xbind-jetzt
x86-64 Optionen Siehe i386- und x86-64-Optionen.
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
-Funwind-Tische -fasynchrone-unwind-Tabellen -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-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 -ftrapv
-fwrapv -fbounds-check -fSichtbarkeit -fstrict-volatile-bitfields
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
gibt einen nicht erfolgreichen Rückkehrcode zurück. Wenn Sie angeben -Pass-Exit-Codes, der gcc Programm
wird stattdessen mit dem numerisch höchsten Fehler zurückgegeben, der von einer Phase erzeugt wurde, die zurückgegeben wurde
eine Fehleranzeige. Die C-, C++- und Fortran-Frontends geben 4 zurück, wenn ein internes
Compilerfehler ist aufgetreten.
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 unabhängig von der Art der Ausgabe
produziert werden, sei es eine ausführbare Datei, eine Objektdatei, eine Assembler-Datei oder
vorverarbeiteter 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 weitergereicht
verschiedene Prozesse, die von . aufgerufen werden gcc, damit sie die Befehlszeilenoptionen anzeigen können
Sie akzeptieren. Wenn die -Wextra Option wurde auch angegeben (vor dem --help
Option), dann Befehlszeilenoptionen, denen keine Dokumentation zugeordnet ist
wird auch 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
Dadurch werden alle vom Compiler unterstützten Optimierungsoptionen angezeigt.
Warnungen
Dadurch werden alle Optionen angezeigt, die Warnmeldungen steuern, die von der
Compiler.
Ziel
Dadurch werden zielspezifische Optionen angezeigt. nicht so wie --target-help zu erhalten
zielspezifische Optionen des Linkers und Assemblers werden jedoch nicht
angezeigt. Dies liegt daran, dass diese Tools derzeit die erweiterten Funktionen nicht unterstützen
--help= Syntax.
params
Dadurch werden die Werte angezeigt, die vom erkannt werden --param .
Sprache
Dies zeigt die unterstützten Optionen für Sprache, Wobei Sprache ist der Name
einer der Sprachen, die in dieser Version von GCC unterstützt werden.
verbreitet
Dadurch werden die Optionen angezeigt, die für alle Sprachen gelten.
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
Mit dem Compiler kann folgendes verwendet werden:
--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.
Die Kombination mehrerer Klassen ist möglich, allerdings schränkt dies die Ausgabe in der Regel um
so viel, dass es nichts zu zeigen gibt. Ein Fall, in dem es jedoch funktioniert, ist, wenn
eine der klassen ist Ziel. Also zum Beispiel um alle zielspezifischen
Optimierungsoptionen können verwendet werden:
--help=Ziel,Optimierer
Die --help= Option kann in der Befehlszeile wiederholt werden. Jeder weitere Gebrauch wird
zeigt die angeforderte Klasse von Optionen an und überspringt diejenigen, die bereits vorhanden sind
angezeigt.
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
Dadurch werden alle Unterprogramme von . aufgerufen gcc für gdb --args, also der Aufruf von cc1
wird sein 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.
-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
behandelt .c, .h und .i Dateien als C++-Quelldateien anstelle von C-Quelldateien, es sei denn -x is
verwendet und gibt automatisch die Verknüpfung mit der C++-Bibliothek an. Dieses Programm ist auch
nützlich beim Vorkompilieren einer C-Header-Datei mit a .h Erweiterung für die Verwendung in C++-Kompilierungen.
Auf vielen Systemen, 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, -pedantisch 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 wären, aber keine Semantik haben, die von ISO C . definiert ist
(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. Durch die Angabe eines Basisstandards wird die
Der Compiler akzeptiert alle Programme, die diesem Standard folgen, und solche, die GNU . verwenden
Erweiterungen, die dem nicht widersprechen. Zum Beispiel, -std=c90 schaltet sich sicher aus
Funktionen von GCC, die nicht mit ISO C90 kompatibel sind, wie "asm" und "typeof"
Schlüsselwörter, aber keine anderen GNU-Erweiterungen, die in ISO C90 keine Bedeutung haben, wie z
Weglassen des mittleren Begriffs eines "?:"-Ausdrucks. Andererseits wird durch die Angabe einer GNU
Dialekt eines Standards, alle Funktionen, die der Compiler unterstützt, sind aktiviert, auch wenn diese
Funktionen ändern die Bedeutung des Basisstandards und einiger streng konformer Programme
kann abgelehnt werden. Der jeweilige Standard wird verwendet von -pedantisch um zu erkennen, welche
Features sind GNU-Erweiterungen für diese Version des Standards. Zum Beispiel -Std = gnu90
-pedantisch würde vor C++-Stil warnen // Kommentare, während -Std = gnu99 -pedantisch würde
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. Beachten Sie, dass dieser Standard noch nicht vollständig unterstützt wird; sehen
<http://gcc.gnu.org/gcc-4.7/c99status.html> für weitere Informationen. Die Namen c9x
und ISO9899:199x sind verpönt.
c11
c1x
iso9899: 2011
ISO C11, die Überarbeitung des ISO-C-Standards von 2011. Der Support ist unvollständig und
Experimental. Der Name c1x ist veraltet.
gnu90
gnu89
GNU-Dialekt von ISO C90 (einschließlich einiger C99-Funktionen). Dies ist die Standardeinstellung für C
Code.
gnu99
gnu9x
GNU-Dialekt von ISO C99. Wenn ISO C99 vollständig in GCC implementiert ist, wird dies
werden zum Standard. Der Name gnu9x ist veraltet.
gnu11
gnu1x
GNU-Dialekt von ISO C11. Der Support ist unvollständig und experimentell. Der Name gnu1x
ist veraltet.
c ++ 98
Der ISO C++-Standard von 1998 plus Ergänzungen. Gleich wie -ansi für C++-Code.
gnu++98
GNU-Dialekt von -std=c++98. Dies ist die Standardeinstellung für C++-Code.
c ++ 11
Der ISO C++-Standard von 2011 plus Ergänzungen. C++11 wird noch unterstützt
experimentell und können sich in zukünftigen Versionen auf inkompatible Weise ändern.
gnu++11
GNU-Dialekt von -std=c++11. Die Unterstützung für C++11 ist noch experimentell und kann sich ändern
auf inkompatible Weise in zukünftigen Versionen.
-fgnu89-inline
Die Option -fgnu89-inline weist GCC an, die traditionelle GNU-Semantik für "inline" zu verwenden
Funktionen im C99-Modus.
Diese Option wird von den GCC-Versionen 4.1.3 bis einschließlich, aber nicht akzeptiert und ignoriert
4.3. In GCC-Versionen 4.3 und höher ändert es das Verhalten von GCC im C99-Modus. Verwenden von
diese Option entspricht ungefähr dem Hinzufügen des Funktionsattributs "gnu_inline" zu all
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 wurde erstmals in GCC 4.3 unterstützt. Diese 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 ä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 in einer gehosteten Umgebung stattfindet. Dies impliziert -feingebaut.
Eine 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 in einer freistehenden Umgebung stattfindet. 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.
-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 v3.0http://www.openmp.org/>. Diese Option
impliziert -pGewinde, und wird daher nur auf Zielen unterstützt, die Unterstützung für
-pGewinde.
-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
.
-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.
-keine-integrierte-cpp
Führt eine Kompilierung in zwei Durchgängen durch: Vorverarbeitung und Kompilierung. Diese Option ermöglicht
ein Benutzer hat "cc1", "cc1plus" oder "cc1obj" über die -B Möglichkeit. Der Benutzer lieferte
Kompilierungsschritt kann dann nach normal einen zusätzlichen Vorverarbeitungsschritt hinzufügen
Vorverarbeitung, aber vor dem Kompilieren. Die Standardeinstellung ist die Verwendung des integrierten cpp
(interner cpp)
Die Semantik dieser Option ändert sich, wenn "cc1", "cc1plus" und "cc1obj" zusammengeführt werden.
-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 jedoch auch die meisten GNU-Compileroptionen verwenden, unabhängig davon, welche Sprache Sie verwenden
Programm ist in. Sie können beispielsweise eine Datei "firstClass.C" wie folgt kompilieren:
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. Version 2 ist die Version des C++ ABI, die zuerst
erschien in G++ 3.4. Version 1 ist die Version des C++ ABI, die erstmals in . erschien
G++ 3.2. Version 0 wird immer die Version sein, die C++ am nächsten kommt
ABI-Spezifikation. Daher ändert sich der mit Version 0 erhaltene ABI als ABI
Fehler sind behoben.
Die Standardeinstellung ist Version 2.
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.
[VORLÄUFIGE VOLLAUTOMATISCHE TEXTÜBERSETZUNG - muss noch überarbeitet werden. Wir bitten um Ihr Verständnis.] -Wabi.
-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 deklariert ist Wurf(),
in diesem Fall überprüft der Compiler immer den Rückgabewert, auch ohne dies
Möglichkeit. In allen anderen Fällen, wenn "Betreiber neu" eine nicht leere Ausnahme hat
Spezifikation wird die Erschöpfung des Speichers durch das Ausgeben von "std::bad_alloc" signalisiert. Siehe auch
neu (nort).
-fplatzsparen
Fügen Sie nicht initialisierte oder zur Laufzeit initialisierte globale Variablen in das gemeinsame Segment ein, wie
C tut. Dies spart Platz in der ausführbaren Datei auf Kosten der Nichtdiagnose von Duplikaten
Definitionen. Wenn Sie mit diesem Flag kompilieren und Ihr Programm auf mysteriöse Weise abstürzt
Nachdem "main()" abgeschlossen ist, haben Sie möglicherweise ein Objekt, das zweimal zerstört wird
weil zwei Definitionen zusammengeführt wurden.
Diese Option ist bei den meisten Zielen nicht mehr nützlich, da jetzt Unterstützung für . hinzugefügt wurde
Variablen in BSS einfügen, ohne sie gemeinsam zu machen.
-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
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 mit Anmerkungen versehenen C++-Referenzhandbuch und früheren Versionen von G++ zu arbeiten
4.1 hat immer so funktioniert. In ISO C++ ist jedoch eine Friend-Funktion, die nicht
die in einem umschließenden Gültigkeitsbereich deklariert sind, können nur mithilfe einer argumentabhängigen Suche gefunden werden.
Diese Option bewirkt, dass Freunde wie in früheren Versionen injiziert werden.
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 beim Definieren NDEBUG. Dies gibt keine Berechtigung für den Benutzercode
um Ausnahmen auszulösen, die die Ausnahmespezifikationen verletzen; der Compiler wird
immer noch basierend auf den Spezifikationen optimieren, so dass das Auslösen einer unerwarteten Ausnahme
zu undefiniertem Verhalten führen.
-ffor-Scope
-fno-for-Scope
If -ffor-Scope angegeben ist, der Gültigkeitsbereich der in a . deklarierten Variablen for-init-Anweisung
beschränkt sich auf die für Schleife selbst, 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++.
Der Standard, wenn keines der Flags angegeben ist, um dem Standard zu folgen, sondern zuzulassen und zu geben
Warnung für Code im alten Stil, der ansonsten ungültig wäre oder anders ist
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 Optimierung funktionieren
die gleiche Menge expliziter Instanzierungen benötigen.
-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 umständliche 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 so, als ob sie eine "noexcept"-Spezifikation wäre
um den Textgrößen-Overhead relativ zu einer Funktion ohne Ausnahme zu reduzieren oder zu eliminieren
Spezifikation. Wenn die Funktion lokale Variablen von Typen mit nicht-trivialem . hat
Destruktoren, die Ausnahmespezifikation wird die Funktion tatsächlich kleiner machen
weil die EH-Bereinigungen für diese Variablen wegoptimiert werden können. Die Semantik
Effekt ist, dass eine Ausnahme aus einer Funktion mit einer solchen Ausnahme geworfen wird
Spezifikation 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 alle 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 wird alle weglassen
Vorlagenargumente, die den Standardvorlagenargumenten für diese Vorlage entsprechen. Wenn
eines dieser Verhaltensweisen macht es schwieriger, die Fehlermeldung zu verstehen als
einfacher, verwenden -fno-hübsche-Vorlagen wird sie 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 nicht
Wenn Sie diese Teile der Sprache verwenden, können Sie mit diesem Flag etwas Platz sparen. Notiz
diese Ausnahmebehandlung verwendet dieselben Informationen, generiert sie jedoch nach Bedarf.
Die dynamic_cast Operator kann weiterhin für Casts verwendet werden, die keine Laufzeit benötigen
Typinformationen, dh Umwandlungen in "void *" oder in eindeutige Basisklassen.
-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-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 Ihr C
Bibliothek unterstützt "__cxa_atexit".
-fno-use-cxa-get-Exception-ptr
Verwenden Sie nicht die Laufzeitroutine "__cxa_get_exception_ptr". Dies wird verursachen
"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 aufgenommen wurden
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 Auswirkungen.
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 unterschiedlichen gemeinsamen Objekt definiert sind: diese
Deklarationen sind zulässig, wenn sie zulässig gewesen wären, wenn diese Option war
nicht benutzt.
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 demselben Namen, aber in verschiedenen gemeinsamen Objekten definiert, sind unterschiedlich, also
das eine zu ändern wird das andere nicht ändern; und dass Zeiger auf definierte Funktionselemente
in verschiedenen gemeinsam genutzten Objekten möglicherweise nicht gleich. Wenn dieses Flag angegeben ist, ist es a
Verletzung der ODR, Typen mit gleichem Namen unterschiedlich zu definieren.
-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:
-fno-default-inline
Nehmen Sie nicht an Inline- für Funktionen, die innerhalb eines Klassenbereichs definiert sind.
Beachten Sie, dass diese Funktionen wie Inline-Funktionen über Verknüpfungen verfügen; sie werden es einfach nicht
standardmäßig eingefügt werden.
-Wabi (Nur C, Objective-C, C++ und Objective-C++)
Warnen, wenn G++ Code generiert, der wahrscheinlich nicht mit dem herstellerneutralen . kompatibel ist
C++-ABI. 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++ generiert
inkompatibler Code. Es kann auch Fälle geben, in denen Warnungen ausgegeben werden, obwohl die
Der generierte Code 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.
Die bekannten Inkompatibilitäten in -fabi-version=2 (die Standardeinstellung) umfassen:
· Eine Vorlage mit einem typfremden Vorlagenparameter vom Referenztyp wird verstümmelt
falsch:
extern int N;
Vorlage strukt S {};
Leere n (S ) {2}
Dies ist behoben in -fabi-version=3.
· SIMD-Vektortypen, die mit "__attribute ((vector_size))" deklariert wurden, werden 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 wird geändert in -fabi-version=4.
Die bekannten Inkompatibilitäten in -fabi-version=1 umfasst:
· Falsche Handhabung von Tail-Padding für Bit-Felder. G++ versucht möglicherweise, Daten zu packen
in dasselbe Byte wie eine Basisklasse. Zum Beispiel:
struct A { virtuelle Leere f(); int f1 : 1; };
Struct B: öffentliches A {int f2: 1; };
In diesem Fall platziert G++ "B::f2" im selben Byte wie "A::f1"; andere Compiler
wird nicht. Sie können dieses Problem vermeiden, indem Sie "A" explizit auffüllen, damit seine Größe
ist ein Vielfaches der Byte-Größe auf Ihrer Plattform; das wird G++ und andere verursachen
Compiler zum Layout "B" identisch.
· Falsche Handhabung von Tail-Padding für virtuelle Basen. G++ verwendet kein Tail
Polsterung beim Auslegen virtueller Basen. Zum Beispiel:
struct A { virtuelle Leere f(); Zeichen c1; };
struct B { B(); Zeichen c2; };
struct C : öffentliches A, öffentliches virtuelles B {};
In diesem Fall wird "B" von G++ nicht in das Tail-Padding für "A" eingefügt; Sonstiges
Compiler werden. Sie können dieses Problem vermeiden, indem Sie "A" explizit auffüllen, damit es
size ist ein Vielfaches seiner Ausrichtung (wobei virtuelle Basisklassen ignoriert werden); das wird
bewirken, dass G++ und andere Compiler "C" identisch gestalten.
· Fehlerhafte Behandlung von Bitfeldern mit deklarierten Breiten größer als die ihrer
zugrunde liegende Typen, wenn die Bitfelder in einer Vereinigung erscheinen. Zum Beispiel:
Union U {int i: 4096; };
Angenommen, ein "int" hat keine 4096 Bits, macht G++ die Union zu klein
durch die Anzahl von Bits in einem "int".
· Leere Klassen können an falschen Offsets platziert werden. Zum Beispiel:
Struktur A {};
strukturieren B {
Aa;
virtuelle Leere f ();
};
struct C : öffentlich B, öffentlich A {};
G++ platziert die Basisklasse "A" von "C" an einem Offset ungleich null; es sollte platziert werden
bei Offset Null. G++ glaubt fälschlicherweise, dass das Datenelement "A" von "B" ist
bereits bei Offset Null.
· Namen von Vorlagenfunktionen, deren Typen "Typname" oder Vorlagenvorlage beinhalten
Parameter können falsch manipuliert werden.
Vorlage
void f(Typname Q::X) {}
Vorlage Klasse Q>
void f(Typname Q ::X) {}
Instanziierungen dieser Templates werden möglicherweise falsch manipuliert.
Es warnt auch psABI-bezogene Änderungen. Zu den bekannten psABI-Änderungen an dieser Stelle gehören:
· Bei SYSV/x86-64 wird beim Übergeben von union mit langem Double in übergeben in . geändert
Speicher wie in psABI angegeben. Zum Beispiel:
Gewerkschaft U {
langes Doppel-ld;
int i;
};
"union U" wird immer im Speicher übergeben.
-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.
-Wdelete-non-virtual-dtor (Nur C++ und Objective-C++)
Warnen, wenn löschen wird verwendet, um eine Instanz einer Klasse zu zerstören, die virtuelle Funktionen hat
und nicht virtueller Destruktor. Es ist unsicher, eine Instanz einer abgeleiteten Klasse zu löschen
durch einen Zeiger auf eine Basisklasse, wenn die Basisklasse kein virtuelles . hat
Zerstörer. Diese Warnung wird aktiviert von -Wand.
-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 Wurf() or keine Ausnahme)
aber der Compiler weiß, dass er nie eine Ausnahme auslöst.
-Wnicht-virtuelles-dtor (Nur C++ und Objective-C++)
Warnen, wenn eine Klasse über virtuelle Funktionen und einen zugänglichen nicht-virtuellen Destruktor verfügt, in
In diesem Fall wäre es möglich, aber unsicher, eine Instanz einer abgeleiteten Klasse zu löschen
durch einen Zeiger auf die Basisklasse. Diese Warnung ist auch aktiviert, wenn -Weffc++ is
spezifiziert.
-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 neu für i und j passend zum
Deklarationsreihenfolge der Mitglieder, die eine entsprechende Warnung ausgeben. Diese Warnung ist
aktiviert durch -Wand.
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 ++, Sekunde Ausgabe Buch:
· Punkt 11: Definieren Sie einen Kopierkonstruktor und einen Zuweisungsoperator für Klassen mit
dynamisch zugewiesener Speicher.
· Punkt 12: Bevorzugen Sie die Initialisierung gegenüber der Zuweisung in Konstruktoren.
· Punkt 14: Machen Sie Destruktoren in Basisklassen virtuell.
· Punkt 15: Lassen Sie "operator=" einen Verweis auf *this zurückgeben.
· Punkt 23: Versuchen Sie nicht, eine Referenz zurückzugeben, wenn Sie ein Objekt zurückgeben müssen.
Warnen Sie auch vor Verstößen gegen die folgenden Stilrichtlinien von Scott Meyers' Mehr
Effektiv C + + Buch:
· Punkt 6: Unterscheiden Sie zwischen Präfix- und Postfix-Formen von Inkrement und Dekrement
Operatoren.
· Punkt 7: Überladen Sie niemals "&&", "||", oder ",".
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 auch vor der Verwendung einer nicht gecasteten "NULL" als Sentinel. Beim Kompilieren nur mit
GCC ist dies ein gültiger Sentinel, da "NULL" als "__null" definiert ist. Obwohl es eine Null ist
Zeigerkonstante kein Nullzeiger, sie hat garantiert die gleiche Größe wie a
Zeiger. 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 Besetzungen (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();
wird nicht kompiliert.
-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++ würden versuchen, unsignedness zu bewahren, aber der Standard schreibt die
aktuelles Verhalten.
strukturiere A {
Operator int();
A&-Operator = (int);
};
Haupt ()
{
Aa,b;
a = b;
}
In diesem Beispiel wird G++ einen Standardwert synthetisieren A& Operator = (konst EIN&);, während cfront
verwendet die benutzerdefinierten Operator =.
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, aber Sie können auch die meisten sprachunabhängigen GNU
Compiler-Optionen. Sie können beispielsweise eine Datei "some_class.m" wie folgt kompilieren:
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 umgekehrter Reihenfolge.
Die so generierten Methoden "- (id) .cxx_construct" und "- (void) .cxx_destruct" werden
nur mit Instanzvariablen arbeiten, die in der aktuellen Objective-C-Klasse deklariert sind, und nicht
diejenigen, die von Superklassen geerbt wurden. Es liegt in der Verantwortung des Ziel-C
Runtime, um alle diese Methoden in der Vererbungshierarchie eines Objekts aufzurufen. Die ID)
.cxx_construct"-Methoden werden von der Laufzeit unmittelbar nach einem neuen Objekt aufgerufen
Instanz wird zugewiesen; die Methoden "- (void) .cxx_destruct" werden aufgerufen
unmittelbar 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.
-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
Der Compiler lässt solche Warnungen aus, wenn die gefundenen Unterschiede auf Typen beschränkt sind, die
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. Im Moment kann nur das C++-Frontend
ehren diese Möglichkeiten. Es wird jedoch erwartet, dass in naher Zukunft die verbleibende Front
Enden könnten sie richtig verdauen.
-fNachrichtenlänge=n
Versuchen Sie, Fehlermeldungen so zu formatieren, dass sie in Zeilen von etwa passen n Zeichen. Das
Standard ist 72 Zeichen für g ++ und 0 für den Rest der Frontends unterstützt von
GCC. Wenn n Null ist, wird kein Zeilenumbruch durchgeführt; jede Fehlermeldung wird angezeigt
auf einer einzigen Zeile.
-fdiagnostics-show-location=einmal
Nur sinnvoll im Zeilenumbruchmodus. Weist den Reporter für Diagnosemeldungen an,
emittieren einmal Quellenstandortinformationen; 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.
-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.
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 besondere 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, wobei die Optionen beginnen -WBeispielsweise -Wimplizit
Warnungen bei impliziten Erklärungen anzufordern. Jede dieser spezifischen Warnoptionen auch
hat 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.
Wenn eine nicht erkannte Warnoption angefordert wird (z. B. -Wunknown-Warnung), GCC emittiert
eine Diagnose, die besagt, dass die Option nicht erkannt wird. Wenn jedoch die -Wnein- Form ist
verwendet, ist das Verhalten 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 von
neu -Wnein- Optionen mit alten Compilern, aber wenn etwas schief geht, warnt der Compiler
dass eine nicht anerkannte Option genutzt wurde.
-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.
-pedantisch 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 -pedantisch 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
-pedantisch. 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 -pedantisch werden gegeben, wo sie sind
von der Grundnorm gefordert. (Es wäre 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
Like -pedantisch, außer dass Fehler statt Warnungen ausgegeben werden.
-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 (nur mit -O2) -Wc++11-kompatibel -Wchar-Indexe
-Wenum-vergleichen (in C/Objc; in C++ standardmäßig aktiviert) -Wimplicit-int (C und
Nur Ziel-C) -Wimplicit-Funktionsdeklaration (nur C und Ziel-C) -WKommentar
-Wformat -Wmain (nur für C/ObjC und es sei denn -freistehend) -Wvielleicht-nicht initialisiert
-Wmissing-Klammern -Wnonnull - 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 ganzzahliger Null verglichen mit <, <=, >, oder auch >=.
· (nur C++) Ein Enumerator und ein Nicht-Enumerator erscheinen beide in einer Bedingung
Ausdruck.
· (nur C++) Mehrdeutige virtuelle Basen.
· (nur C++) Subskription eines deklarierten Arrays Registrieren.
· (nur C++) Übernahme der Adresse einer deklarierten Variablen Registrieren.
· (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 wurde geändert zwischen -fprofile-gen und -fprofile-verwenden, die Dateien mit dem
Profil-Feedback stimmt möglicherweise nicht mit der Quelldatei überein und GCC kann das Profil nicht verwenden
Feedback-Informationen. Diese Warnung ist standardmäßig aktiviert und wird 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 Floating-
Punktliteral ist ein "double".
-Wformat
Ü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 -pedantisch 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).
Da -Wformat prüft auch auf Nullformatargumente für mehrere Funktionen, -Wformat
impliziert auch -Wnonnull.
-Wformat ist enthalten in -Wand. Für mehr Kontrolle über einige Aspekte der Formatprüfung,
die Optionen -Wformat-y2k, -Wno-format-extra-args, -Wno-Format-Null-Länge,
-Wformat-nicht literal, -Wformat-Sicherheit und -Wformat=2 sind vorhanden, aber nicht
enthalten in -Wand.
HINWEIS: In Ubuntu 8.10 und späteren Versionen ist diese Option standardmäßig für C, C++,
ObjC, ObjC++. Zum Deaktivieren verwenden Sie -Wformat=0.
-Wformat-y2k
If -Wformat angegeben ist, warnen Sie auch vor "strftime"-Formaten, die möglicherweise nur a
zweistellige Jahreszahl.
-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 "printf" oder "scanf"
Format Funktion. Der C-Standard gibt an, dass solche Argumente ignoriert werden.
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 die Single Unix Specification
sagt, 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-nicht literal
If -Wformat angegeben ist, warnen Sie auch, wenn die Formatzeichenfolge kein Zeichenfolgenliteral ist und
kann also nicht überprüft werden, es sei denn, die Formatfunktion nimmt ihre Formatargumente als a
"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 das Format
String kam von nicht vertrauenswürdiger Eingabe und enthält %n. (Dies ist derzeit eine Teilmenge von dem, was
-Wformat-nicht literal warnt vor, aber in Zukunft können Warnungen hinzugefügt werden
-Wformat-Sicherheit die nicht enthalten sind -Wformat-nicht literal.)
HINWEIS: In Ubuntu 8.10 und späteren Versionen ist diese Option standardmäßig für C, C++,
ObjC, ObjC++. Zum Deaktivieren verwenden Sie -Wno-Format-Sicherheit, oder deaktivieren Sie alle Formatwarnungen
mit -Wformat=0. Um Formatsicherheitswarnungen schwerwiegend zu machen, geben Sie
-Werror=Formatsicherheit.
-Wformat=2
Ermöglichen -Wformat plus Formatprüfungen nicht im Lieferumfang enthalten -Wformat. Derzeit äquivalent zu
-Wformat -Wformat-nicht literal -Wformat-Sicherheit -Wformat-y2k.
-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, dass "i" nicht initialisiert ist
wann -Winit-Selbst wurde angegeben:
Ganzzahl f()
{
int ich = ich;
Rückkehr ich;
}
-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 die Art von Haupt- ist verdächtig. Haupt- 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 -pedantisch.
-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, aber das für b ist voll
eingeklammert.
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.
Auch warnen, wenn ein Vergleich gefällt x<=y<=z erscheint; das ist gleichbedeutend mit (x<=y ? 1 : 0)
<= z, die eine andere Interpretation als die der gewöhnlichen mathematischen Notation ist.
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, wird GCC eine Warnung ausgeben, wenn dieses Flag gesetzt ist
spezifiziert. Um die Warnung zu beseitigen, fügen Sie explizite Klammern um das innerste "Wenn"
-Anweisung, so dass das "else" auf keinen Fall zum einschließenden "if" gehören kann. Die
resultierender Code würde so aussehen:
{
wenn eine)
{
wenn (b)
foo ();
sonst
Bar ();
}
}
Warnen Sie auch vor gefährlichen Verwendungen des ?: mit weggelassenem Mitteloperand GNU-Erweiterung. Wann
die Bedingung im ?: Operator ist ein boolescher Ausdruck der weggelassene Wert ist
immer 1. Der Benutzer erwartet 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++.
-Rückgabe-Typ
Warnen Sie, 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 Haupt- und Funktionen
in Systemheadern definiert.
Diese Warnung wird aktiviert von -Wand.
-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.
-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 die ungenutzt Attribut.
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 die ungenutzt Attribut.
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 die ungenutzt Attribut.
-Wunused-local-typedefs (Nur C, Objective-C, C++ und Objective-C++)
Warnen, wenn eine lokal in einer Funktion definierte typedef nicht verwendet wird.
-Wunused-Parameter
Warnen, wenn ein Funktionsparameter außer seiner Deklaration nicht verwendet wird.
Um diese Warnung zu unterdrücken, verwenden Sie die ungenutzt Attribut.
-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 die ungenutzt Attribut.
-Wunused-Wert
Warnen Sie, wenn eine Anweisung ein Ergebnis berechnet, das explizit nicht verwendet wird. Unterdrücken
Diese Warnung wandelt den nicht verwendeten Ausdruck in um ungültig. Dies beinhaltet eine Ausdruck-Anweisung
oder die linke Seite eines Kommaausdrucks, der keine Nebenwirkungen enthält. Zum
Beispiel: ein Ausdruck wie x[i,j] wird eine Warnung auslösen, während x[(leer)i,j] werden wir
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
statisch const Member 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
Welche 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, die die Variable nicht ist
initialisiert, gibt der Compiler eine Warnung aus, wenn er die nicht initialisierte nicht beweisen kann
Pfade finden nicht zur Laufzeit statt. Diese Warnungen sind optional, da GCC nicht
schlau genug, um alle Gründe zu erkennen, warum der Code trotz des Anscheins korrekt sein könnte
einen Fehler haben. 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, muss der Benutzer einen Standardfall angeben
mit 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 Warnungen sogar für unbekannte Pragmas ausgegeben in
System-Header-Dateien. Dies ist nicht der Fall, wenn die Warnungen nur durch den
-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 wie -O funktioniert. -Wstrict-Aliasing is
entspricht -Wstrict-Aliasing=n, mit n=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 trotzdem, da er nur sehr wenige false 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 benötigen wird, insbesondere wenn
ob eine Schleife überhaupt ausgeführt wird.
-Wstrict-overflow=1
Warnen Sie vor Fällen, die sowohl fragwürdig als auch leicht zu vermeiden sind. Zum Beispiel: "x +
1 > x"; mit -fstrict-Überlauf, wird der Compiler dies auf 1 vereinfachen. Dieses Level
of -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. Zum Beispiel: "x + 2 > y" wird vereinfacht zu "x + 1
>= y". Dies wird nur bei der höchsten Warnstufe gemeldet, da dies
Vereinfachung gilt für viele Vergleiche, daher wird diese Warnstufe ein sehr
große Anzahl falsch positiver Ergebnisse.
-Wsuggest-Attribut=[auch|const|keine Rückkehr]
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 noch abnormal durch Werfen, Aufrufen von "abort()" oder Trapping zurückkehrt. Dies
Analyse erfordert Option -fipa-pure-const, die standardmäßig aktiviert ist bei -O und
höher. Höhere Optimierungsstufen verbessern die Genauigkeit der Analyse.
-Warray-Grenzen
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.
-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
werden wir 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 Stück Daten oder Code, das beim Laufen erstellt wird
Zeit auf dem Stack, wenn die Adresse einer verschachtelten Funktion genommen wird, und
wird verwendet, um die verschachtelte Funktion indirekt aufzurufen. Für einige Ziele ist es
besteht nur aus Daten und bedarf daher keiner besonderen Behandlung. Aber,
für die meisten Ziele besteht es aus Code und benötigt daher den Stack
ausführbar gemacht werden, 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, würden 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 nicht
bei ISO-C.
· In traditionellem C existierten einige Präprozessordirektiven nicht. Traditionell
Präprozessoren würden eine Zeile nur dann als Direktive betrachten, wenn die # erschienen
Spalte 1 in der Zeile. Deswegen -Wtraditionell warnt vor Richtlinien, die
traditionelles C versteht es, würde es aber ignorieren, weil die # erscheint nicht als
erstes Zeichen in der Zeile. Es schlägt auch vor, dass Sie Anweisungen wie ausblenden #pragma
von traditionellem C nicht verstanden, indem man sie einrückt. Einige traditionelle
Implementierungen würden nicht erkannt #elif, also schlägt es vor, es ganz zu vermeiden.
· Ein funktionsähnliches Makro, das ohne Argumente erscheint.
· Der unäre Plus-Operator.
· Das 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 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 wird erkannt.
· Initialisierung von automatischen Aggregaten.
· Identifier-Konflikte 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 würde schwerwiegende Folgen haben
Probleme. Dies ist eine Teilmenge der möglichen Konvertierungswarnungen für den gesamten Satz
- -Wtraditionelle-Umwandlung.
· Verwendung von Funktionsdefinitionen im ISO-C-Stil. Diese Warnung ist absichtlich nicht ausgegeben
für Prototyp-Deklarationen oder variadische 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
wird von ISO C90 unterstützt und wurde von GCC-Versionen vor GCC 3.0 nicht unterstützt.
-Wundef
Warnen, wenn ein undefinierter Bezeichner in einem ausgewertet wird #wenn Richtlinie.
-Wno-Endif-Etiketten
Nicht warnen, wenn ein #else oder #endif gefolgt von Text.
-Schatten
Warnen, wenn eine lokale Variable oder Typdeklaration eine andere Variable überschattet,
Parameter, Typ oder Klassenmember (in C++) oder immer dann, wenn eine integrierte Funktion
beschattet. Beachten Sie, dass der Compiler in C++ nicht warnt, wenn eine lokale Variable Schatten a
struct/class/enum, warnt aber, wenn es eine explizite typedef verdeckt.
-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 konnte
die Grenzen der Schleifenindizes. Mit -funsafe-loop-optimierungen warnen, wenn der Compiler
solche Annahmen gemacht.
-Wno-pedantic-ms-Format (Nur MinGW-Ziele)
Deaktiviert die Warnungen über Nicht-ISO "printf" / "scanf" Formatbreitenspezifizierer "I32",
"I64" und "I" werden auf Windows-Zielen verwendet, abhängig von der MS-Laufzeit, wenn Sie verwenden
die Optionen -Wformat und -pedantisch ohne gnu-Erweiterungen.
-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 -pedantisch.
-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 gegen Null verglichen mit < or >=. 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
"int malloc()" wird in "anything *" umgewandelt.
-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.
-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 eines in einen Nicht-"const"-"char *"-Zeiger wird eine Warnung erhalten. Diese
Warnungen helfen Ihnen bei der Kompilierzeit Code zu finden, 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. Sonst wird es nur lästig. 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
Warnung vor Variablen, die geändert werden könnten durch langejmp or vgabel. Diese Warnung ist auch
aktiviert durch -Wextra.
-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", die
gleichen Typs, eine Basisklasse oder eine Referenz darauf. Warnungen zu Konvertierungen zwischen
vorzeichenbehaftete und vorzeichenlose Ganzzahlen sind in C++ standardmäßig deaktiviert, es sei denn -Wsign-Konvertierung
ist 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.
-Wempty-Körper
Warnen, wenn ein leerer Körper in einem auftritt if, sonst or do während Stellungnahme. Diese Warnung ist
auch aktiviert von -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.
-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.
-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-Attribute
Warnen Sie nicht, wenn ein unerwartetes "__Attribut__" verwendet wird, z. B. nicht erkannte Attribute,
Funktionsattribute, die auf Variablen angewendet werden usw. Dies stoppt keine Fehler 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. Das Ziel ist es,
globale Funktionen erkennen, die nicht in Header-Dateien deklariert sind.
-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
Funktionsvorlagen 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 würde eine solche Warnung verursachen, da "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
würde keine Warnung auslösen:
strukt s { int f, g, h; };
strukt sx = { .f = 3, .g = 4 };
Diese Warnung ist enthalten in -Wextra. Um andere zu bekommen -Wextra Warnungen ohne diese,
- -Wextra -Wno-missing-field-initializers.
-Wmissing-Format-Attribute
Warnen Sie vor Funktionszeigern, die Kandidaten für "Format"-Attribute sein könnten. Notiz
dies sind nur mögliche Kandidaten, keine absoluten. GCC wird diese Funktion erraten
Zeiger mit "format"-Attributen, die bei der Zuweisung, Initialisierung,
Parameterübergabe- oder Rückgabeanweisungen sollten ein entsprechendes "Format"-Attribut haben
im resultierenden Typ. Dh die linke Seite der Zuweisung oder Initialisierung,
der Typ der Parametervariablen oder der Rückgabetyp der enthaltenden Funktion
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 wird das "Format" erraten
Attribute können für jede Funktion geeignet sein, die eine Funktion wie "vprintf" aufruft
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.
-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.
-Wnormalized=
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.
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. Sie
würde dies nur tun wollen, wenn Sie ein anderes Normalisierungsschema verwenden (wie
"D"), weil Sie sonst leicht Fehler erstellen können, die buchstäblich unmöglich sind
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 Normalisierung
Schema, all dies auch in ein Standardformular umzuwandeln, und GCC warnt, wenn Sie
Code ist nicht in NFKC, wenn Sie verwenden -Wnormalisiert=nfkc. Diese Warnung ist vergleichbar mit
Warnung vor jedem Bezeichner, der den Buchstaben O enthält, da er verwechselt werden könnte
mit der Ziffer 0, ist also nicht die Vorgabe, kann aber als lokale Codierung nützlich sein
Konvention, wenn die Programmierumgebung nicht in der Lage ist, diese anzuzeigen
Charaktere deutlich.
-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.
-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 wird beispielsweise die Variable "fx" in "struct bar"
falsch ausgerichtet sein, 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.
-Winline
Warnen, wenn eine Funktion nicht inline eingebunden werden kann und als inline deklariert wurde. 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 von Warnungen beim Anwenden der Offsetvon Makro in einen Nicht-POD-Typ umwandeln. Entsprechend
den ISO C++-Standard von 1998, Anwendung Offsetvon zu einem Nicht-POD-Typ ist undefiniert. In
vorhandene C++-Implementierungen jedoch Offsetvon liefert in der Regel aussagekräftige Ergebnisse
auch bei Anwendung auf bestimmte Arten von Nicht-POD-Typen. (Wie ein einfaches struct zur Verbesserung der Gesundheitsgerechtigkeit
kann nur aufgrund eines Konstruktors kein POD-Typ sein.) Dieses Flag ist für
Benutzer, die sich bewusst sind, dass sie nicht tragbaren Code schreiben und die absichtlich
beschlossen, die Warnung darüber zu ignorieren.
Die Einschränkungen für Offsetvon 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 lange lange Typ verwendet wird. Dies wird durch entweder aktiviert -pedantisch 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 pedantischen ISO C90-Modus oder der alternativen GNU-Syntax verwendet werden
im pedantischen ISO C99-Modus. Dies ist die Standardeinstellung. Um die Warnmeldungen zu unterdrücken, verwenden Sie
-Wno-variadic-Makros.
-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.
-Wvla
Warnen, wenn im Code ein Array mit variabler Länge verwendet wird. -Wno-vla wird das verhindern
-pedantisch 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 waren nicht in der Lage, den Code effektiv zu verarbeiten. Das Problem ist oft, dass
Ihr Code ist zu groß oder zu komplex; GCC wird sich weigern, Programme zu optimieren, wenn die
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
-pedantisch, 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.
-Wno-Schmutzfänger
Warnungen vor Konstrukten unterdrücken, die nicht instrumentiert werden können -Schmutzfänger.
-Ü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 -pedantisch, und kann mit deaktiviert werden -Wno-Überlänge-Strings.
-Wunsuffixed-Float-Konstanten (nur C und Ziel-C)
GCC gibt eine Warnung für alle Floating-Konstanten aus, die kein Suffix haben. Wann
zusammen verwendet mit -Wsystem-Header es wird vor solchen Konstanten im Systemheader warnen
Dateien. Dies kann nützlich sein, wenn Sie Code für die Verwendung mit dem "FLOAT_CONST_DECIMAL64" vorbereiten.
Pragma aus der dezimalen Gleitkomma-Erweiterung zu C99.
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
wird wahrscheinlich andere Debugger zum Absturz bringen oder sich weigern, das Programm zu lesen. Falls Sie es wollen
Um sicher zu steuern, 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 lagen
Hand; Einige Anweisungen werden möglicherweise an verschiedenen Stellen ausgeführt, da sie aus verschoben wurden
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.
-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.
-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 erhöht
bis zu einem Faktor von zwei.
-fno-debug-types-Abschnitt
Standardmäßig werden DIEs vom Typ DWARF v4 oder höher in ihre eigenen gestellt.
.debug_types-Abschnitt, anstatt sie in den .debug_info-Abschnitt aufzunehmen. es ist
effizienter, sie in separate comdat-Abschnitte zu legen, da der Linker dann
in der Lage, Duplikate zu entfernen. Aber nicht alle DWARF-Konsumenten unterstützen .debug_types-Abschnitte
noch.
-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). Dies ist das
Format, das von DBX auf IRIX 6 verwendet wird. Der Wert von Version kann entweder 2, 3 oder 4 sein; das
Standardversion ist 2.
Beachten Sie, dass bei DWARF Version 2 einige Ports einige Nicht-
widersprüchliche DWARF 3-Erweiterungen in den Abwicklungstabellen.
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.
-gno-record-gcc-switches
Anhängen von Befehlszeilenoptionen an das DW_AT_producer-Attribut in DWARF nicht zulassen
Debugging-Informationen. Dies ist die Standardeinstellung.
-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.
-gvms
Erstellen Sie Debugging-Informationen im VMS-Debug-Format (sofern dies unterstützt wird). Dies ist das
Format, das von DEBUG auf 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, aber keine Informationen über lokale Variablen und keine Zeilennummern.
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 das Weglassen dieser Option sie generiert hätte,
oder schalten Sie es auf Stufe 2 ein. Die Position dieses Arguments in der Befehlszeile
spielt keine Rolle, es wird wirksam, nachdem alle anderen Optionen verarbeitet wurden, und zwar
nur einmal, egal wie oft es gegeben wird. Dies soll hauptsächlich verwendet werden
mit -fcompare-debug.
-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 in jedem Fall als ungültige Option ablehnt
eigentliche Kompilierung (anstatt Vorverarbeitung, Assemblierung oder Verlinkung). Um nur ein zu bekommen
Warnung, 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 DWARF2-Debugging-Informationen, indem Sie doppelte Informationen zu jedem eliminieren
Symbol. Diese Option ist nur sinnvoll, wenn DWARF2-Debugging-Informationen generiert werden
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 wurde.
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 wurde,
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 Absicht besteht darin, doppelte Debug-Informationen für Structs zwischen verschiedenen Objekten zu reduzieren
Dateien innerhalb desselben Programms.
Diese Option ist eine detaillierte Version von -femit-struct-debug-reduziert und
-femit-struct-debug-baseonly, die für die meisten Bedürfnisse dienen wird.
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 nutzung einer unvollständigen struktur legal wäre, ist die nutzung mittelbar. 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
gibt Debug-Informationen aus. 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 Typen in . deklariert sind foo.c und foo.h wird Debug-Informationen haben, aber
Typen, die in anderen Headern deklariert sind, werden dies nicht tun. Der Wert sys bedeutet 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.
-fpre-ipa-mem-bericht
-fpost-ipa-mem-bericht
Lässt den Compiler einige Statistiken über die permanente Speicherzuweisung ausgeben, bevor oder
nach interprozeduraler Optimierung.
-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 denselben
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 nicht optimieren.
-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 Obergrenze von UINT_MAXDAMIT dbg_cnt()
gibt immer true zurück, es sei denn, die Obergrenze wird durch diese Option festgelegt. zB mit
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) gibt nur für die ersten 10 . true zurück
Anrufungen
-abwehrbar-Art-passieren
-fdeaktiviert-Art-passieren=Bereichsliste
Dies ist eine Reihe von Debugging-Optionen, die verwendet werden, um explizit zu deaktivieren/aktivieren
Optimierung geht. Für Compiler-Benutzer regelmäßige Optionen zum Aktivieren/Deaktivieren von Pässen
sollte stattdessen verwendet werden.
*<-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 cgraph-Knoten der Funktion uid is
in einen der angegebenen Bereiche fallen, 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-tree-passieren>
*<-fenable-tree-passieren=Bereichsliste>
Baumpass aktivieren passieren. Sehen -fdisable-rtl für die Beschreibung von Optionsargumenten.
# 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
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. Beachten Sie, dass die Passnummer
statisch berechnet, wenn die Pässe im Pass-Manager registriert werden. Und so kam es dass der
Die Nummerierung hat nichts mit der dynamischen Reihenfolge der Ausführung von Durchgängen zu tun. Bestimmtes,
ein von einem Plugin installierter Pass könnte eine Nummer über 200 haben, selbst wenn er ziemlich ausgeführt wurde
früh. Dumpname wird aus dem Namen der Ausgabedatei generiert, wenn explizit
angegeben und es ist keine ausführbare Datei, ansonsten ist es der Basisname der Quelle
Datei. Diese Schalter können unterschiedliche Auswirkungen haben, wenn -E dient der 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 ermöglichen Dumping nach den beiden gemeinsamen Sub-
Ausdruck 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-regmove
Dump nach dem Passieren der Registerbewegung.
-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 und -fdump-rtl-sched2 Dumping nach dem Basisblock aktivieren
Terminplanung geht.
-fdump-rtl-sehen
Dump nach Eliminierung der Zeichenerweiterung.
-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
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 und
-fdump-rtl-split5 Aktivieren Sie 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
Alternative verwendet wurde. 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.
-dv Für jede der anderen angegebenen Dump-Dateien (-fdump-rtl-passieren), entsorgen a
Darstellung des Kontrollflussdiagramms geeignet zur Betrachtung mit VCG to
file.pass.vcg.
-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.
-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 führt dazu, dass Zähler über die gesamte Kompilierungseinheit summiert werden, während
-Einzelheiten wird jedes Ereignis ausgeben, wenn die Pässe sie generieren. Die Standardeinstellung mit nein
Option besteht darin, Zähler für jede kompilierte Funktion zu summieren.
-fdump-Baum-wechseln
-fdump-Baum-wechseln-Optionen
Steuern Sie das Dumping in verschiedenen Stadien der Verarbeitung des Zwischensprachenbaums, um
eine Datei. Der Dateiname wird generiert, indem ein switch-spezifisches Suffix an das . angehängt wird
Quelldateiname, und die Datei wird im selben Verzeichnis wie die Ausgabedatei erstellt.
Besitzt das -Optionen Formular verwendet wird, Optionen ist eine Liste von - getrennte Optionen, die steuern
die Details der Deponie. Nicht alle Optionen sind auf alle Dumps anwendbar; die, die sind
nicht aussagekräftig wird 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
Verhindern Sie Dumping von Mitgliedern eines Anwendungsbereichs oder einer Funktionsgruppe, nur weil dies
Umfang erreicht ist. Entsorgen Sie solche Gegenstände nur, wenn sie direkt erreichbar sind von
einen anderen Weg. Beim Dumping von hübsch gedruckten Bäumen verhindert diese Option das Dumping
die Organe der Kontrollstrukturen.
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).
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).
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.
alle Alle Optionen aktivieren, außer roh, schlank, ausführlich und Linie Nr.
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.
vcg Geben Sie das Kontrollflussdiagramm jeder Funktion in eine Datei im VCG-Format aus. Die Datei
Name entsteht durch Anhängen .vcg zum Quelldateinamen. Beachten Sie, dass, wenn die Datei
enthält mehr als eine Funktion, die generierte Datei kann nicht direkt verwendet werden von
VCG. Sie müssen das Diagramm jeder Funktion ausschneiden und in ein separates Diagramm einfügen
Datei zuerst.
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.
Schmutzfänger
Löschen Sie jede Funktion, nachdem Sie Schmutzfänger-Instrumente hinzugefügt haben. Der Dateiname wird erstellt von
anhängen .Schmutzfänger 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.
-ftree-vectorizer-verbose=n
Diese Option steuert den Umfang der Debugging-Ausgabe, die der Vektorizer ausgibt. Dies
Informationen werden in Standardfehler geschrieben, es sei denn -fdump-tree-all or -fdump-tree-vect
angegeben ist, wird in diesem Fall in die übliche Dump-Listing-Datei ausgegeben, .vect. For
n=0 Es werden keine Diagnoseinformationen gemeldet. Wenn n=1 der Vektorisierer meldet jede Schleife
die vektorisiert wurden, und die Gesamtzahl der Schleifen, die vektorisiert wurden. Wenn n=2 die
vectorizer meldet auch nicht vektorisierte Schleifen, die die erste Analysephase bestanden haben
(vect_analyze_loop_form) - dh zählbar, innerste, Single-BB, Single-Entry/Exit
Schleifen. Dies ist die gleiche Ausführlichkeitsstufe, die -fdump-tree-vect-stats Verwendet. Höher
Ausführlichkeitsstufen bedeuten, dass entweder mehr Informationen für jede gemeldete Schleife ausgegeben werden oder gleich
Menge an Informationen, die für weitere Schleifen gemeldet werden: if n=3, Vektorisierkostenmodell
Informationen werden gemeldet. Wenn n=4, Ausrichtungsbezogene Informationen werden dem hinzugefügt
berichtet. Wenn n=5, datenreferenzbezogene Informationen (z. B. Speicherabhängigkeiten, Speicher
Zugriffsmuster) wird den Berichten hinzugefügt. Wenn n=6, der Vektorisierer meldet auch Nicht-
vektorisierte innerste Schleifen, die die erste Analysephase nicht bestanden haben (dh möglicherweise nicht
zählbar sein oder einen komplizierten Kontrollfluss haben). Wenn n=7, der Vektorisierer meldet
auch nicht vektorisierte verschachtelte Schleifen. Wenn n=8, SLP-bezogene Informationen werden zu den hinzugefügt
berichtet. Zum n=9, alle Informationen, die der Vektorisierer während seiner Analyse erzeugt
und Transformation wird berichtet. Dies ist die gleiche Ausführlichkeitsstufe, die
-fdump-tree-vect-details verwendet.
-frandom-Seed=Schnur
Diese Option stellt einen Seed bereit, den GCC verwendet, wenn er ansonsten Zufallszahlen verwenden würde.
Es wird verwendet, um bestimmte Symbolnamen zu generieren, die in jedem anders sein müssen
kompilierte Datei. Es wird auch verwendet, um einzigartige Stempel in Deckungsdatendateien zu platzieren und die
Objektdateien, die sie erzeugen. Du kannst den ... benutzen -frandom-samen Möglichkeit zu produzieren
reproduzierbar identische Objektdateien.
Die Schnur 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 würde Dateien produzieren 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
würde erschaffen 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 werden Anmerkungen angezeigt
erstellt und gepflegt, aber am Ende verworfen.
-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 Shell-Verarbeitung.
-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 wird suchen---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
Geben Sie das Ziel-Sysroot-Verzeichnis aus, 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
Drucken Sie die Compiler-Version (z. B. 3.0)---und nichts anderes tun.
-Dumpspecs
Drucken Sie die eingebauten Spezifikationen des Compilers --- und tun Sie nichts anderes. (Dies wird verwendet, wenn
GCC selbst wird gebaut.)
-feiminate-unused-debug-types
Normalerweise gibt GCC beim Erstellen von DWARF2-Ausgaben Debugging-Informationen für alle aus
Typen, die in einer Kompilierungseinheit deklariert sind, unabhängig davon, ob sie es tatsächlich sind oder nicht
in dieser Kompilierungseinheit verwendet. Manchmal ist dies nützlich, z. B. wenn im Debugger
Sie möchten einen Wert in einen Typ umwandeln, der in Ihrem Programm nicht wirklich verwendet wird (aber
erklärt). Dies führt jedoch häufiger zu einer erheblichen Platzverschwendung.
Mit dieser Option vermeidet GCC die Ausgabe von Debug-Symbolen für Typen, die
nirgendwo in der zu kompilierenden Quelldatei verwendet.
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 würden.
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 -fvergleiche-elim -fcprop-register -fdce -fdefer-pop -fdelayed-branch
-fdse -fguess-Zweig-Wahrscheinlichkeit -fif-conversion2 -fif-Konvertierung -fipa-pure-const
-fipa-Profil -fipa-Referenz -fmerge-Konstanten -fsplit-breite Typen -ftree-bit-ccp
-ftree-eingebauter-Aufruf-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
-Ftree-Dominator-Opts -ftree-dse -ftree-forwprop -frei -ftree-phiprop -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 -Kostengünstige-Optimierungen -fgcse
-fgcse-lm -finline-kleine-Funktionen -findirect-Inlining -fipa-sra
-foptimize-Geschwisteranrufe -fpartielles Inlining -fGuckloch2 -fregmove -freorder-Blöcke
-freorder-Funktionen -frerun-cse-after-loop -fsched-interblock -fsched-spez
-fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-Überlauf
-Ftree-Switch-Umwandlung -ftree-tail-merge -ftree-pre -ftree-vrp
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-vektorisieren, -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 -ftree-vect-loop-version
-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.
Wenn Sie mehrere verwenden -O Optionen, mit oder ohne Levelnummern, die letzte Option ist
diejenige, die wirksam ist.
Optionen des Formulars -fFlagge spezifizieren maschinenunabhängige Flags. Die meisten Flaggen haben beides
positive und negative Formen; die Negativform von -ffoo wäre -fno-foo. In der Tabelle
Unten ist nur eines der Formulare aufgeführt – dasjenige, das Sie normalerweise verwenden. Du kannst es dir vorstellen
Entfernen Sie das andere Formular, 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-default-inline
Machen Sie Memberfunktionen nicht standardmäßig inline, nur weil sie darin definiert sind
den Klassenbereich (nur C++). Andernfalls, wenn Sie angeben -O, Memberfunktionen definiert
innerhalb des Klassenbereichs werden standardmäßig inline kompiliert; dh Sie müssen nicht hinzufügen Inline-
vor dem Memberfunktionsnamen.
-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.
Ab GCC-Version 4.6 ist die Standardeinstellung (wenn nicht auf Größe optimiert) für
32-Bit-Linux-x86- und 32-Bit-Darwin-x86-Ziele wurden geändert in
-fomit-Frame-Zeiger. Die Standardeinstellung kann wiederhergestellt werden -fno-Rahmenzeiger auslassen by
Konfigurieren von GCC mit dem --enable-frame-pointer Option konfigurieren.
Auf Stufen aktiviert -O, -O2, -O3, -Du.
-foptimize-Geschwisteranrufe
Optimieren Sie rekursive Aufrufe von Geschwistern und Tail.
Auf Stufen aktiviert -O2, -O3, -Du.
-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 die
auf die Variable verwiesen wurde, 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
Daher führt die Verwendung dieser Option 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 ausgelöst wird
die Generierung von Reg-Moves basierend auf der Life-Range-Analyse. Diese Option ist
nur wirksam 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.
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
gehe in den Datenbereich. 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.
-Schmutzfänger -Schmutzfänger -fmudflapir
Instrumentieren Sie für Frontends, die dies unterstützen (C und C++), alle riskanten Zeiger/Arrays
Dereferenzierungsoperationen, einige Standardbibliotheks-String-/Heap-Funktionen und einige andere
verknüpfte Konstrukte mit Bereichs-/Gültigkeitstests. So instrumentierte Module sollten
immun gegen Pufferüberläufe, ungültige Heap-Nutzung und einige andere Klassen von C/C++
Programmierfehler. Die Instrumentierung setzt auf eine separate Laufzeitbibliothek
(libSchlammklappe), die in ein Programm eingebunden wird, wenn -Schmutzfänger wird zur Linkzeit angegeben.
Das Laufzeitverhalten des instrumentierten Programms wird durch die MUDFLAP_OPTIONS
Umgebungsvariable. Siehe "env MUDFLAP_OPTIONS=-help a.out" für seine Optionen.
Verwenden Sie die -Schmutzfänger statt -Schmutzfänger zu kompilieren und zu verknüpfen, wenn Ihr Programm multi-
eingefädelt. Verwenden -fmudflapir, zusätzlich zu -Schmutzfänger or -SchmutzfängerWenn
Die Instrumentierung sollte Zeigerlesevorgänge ignorieren. Dies erzeugt weniger Instrumentierung (und
daher schnellere Ausführung) und bietet dennoch einen gewissen Schutz vor direktem Speicher
das Verfälschen von Schreibvorgängen, ermöglicht jedoch, dass sich irrtümlich gelesene Daten innerhalb eines Programms ausbreiten.
-fThread-Sprünge
Führen Sie Optimierungen durch, bei denen wir prüfen, ob ein Sprung zu einer Stelle verzweigt, an der
ein anderer Vergleich, der durch den ersten subsumiert wird, wird gefunden. Wenn ja, ist die erste Verzweigung
entweder zum Ziel der zweiten Abzweigung oder sofort zu einem Punkt umgeleitet
folgt, je nachdem, 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 gemeinsamer Unterausdrücke,
Lasten, die nur von Geschäften getötet werden, in sich selbst bewegen. Dies ermöglicht eine Schleife
eine Lade-/Speichersequenz enthält, die in eine Last außerhalb der Schleife geändert werden soll, und a
innerhalb der Schleife kopieren/speichern.
Standardmäßig aktiviert, wenn gcse aktiviert ist.
-fgcse-sm
Wann -fgcse-sm aktiviert ist, wird ein Speicherbewegungsdurchlauf nach dem globalen Common ausgeführt
Eliminierung von Unterausdrücken. Dieser Durchlauf versucht, Stores aus Loops zu entfernen. Wann
verwendet in Verbindung mit -fgcse-lm, Schleifen, die eine Lade-/Speichersequenz enthalten, können
in ein Laden vor der Schleife und ein Speichern nach der Schleife geändert.
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.
-funsafe-loop-optimierungen
Falls angegeben, geht der Schleifenoptimierer davon aus, dass Schleifenindizes nicht überlaufen, und dass
die Schleifen mit nichttrivialer Austrittsbedingung sind nicht unendlich. Dies ermöglicht eine größere Reichweite
von Schleifenoptimierungen, auch wenn der Schleifenoptimierer selbst nicht beweisen kann, dass diese
Annahmen sind gültig. Verwenden von -Wunsafe-Loop-Optimierungen, der Compiler warnt Sie
wenn es diese Art von Schleife findet.
-fCrossspringen
Führen Sie eine Cross-Spring-Transformation durch. Diese Transformation vereinheitlicht äquivalenten Code und
Codegröße speichern. 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. Dazu gehört die Nutzung
von bedingten Zügen, Min, Max, Setze Flags und ABS-Anweisungen und einige Tricks machbar
nach Standardarithmetik. Die Verwendung der bedingten Ausführung auf Chips, wo sie ist
verfügbar wird durch "if-conversion2" gesteuert.
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.
-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). Ermöglicht
auf Ebenen -O2, -O3, -Du.
-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 x86 auf Stufen -O2, -O3.
-foptimize-register-move
-fregmove
Versuchen Sie, Registernummern in Verschiebebefehlen und als Operanden anderer . neu zuzuweisen
einfache Anweisungen, um den Umfang der Registerbindung zu maximieren. Das ist
besonders hilfreich bei Maschinen mit Zwei-Operanden-Anweisungen.
Note -fregmove und -foptimize-register-move sind die gleichen Optimierungen.
Auf Stufen aktiviert -O2, -O3, -Du.
-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-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.
-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 Aktivierung der Registerzuordnung erfolgt, 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
der verfügbaren Hard-Register und als Folge von Registerüberläufen im Register
Zuweisung.
-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 verschoben werden,
-fsched-stalled-insns=0 bedeutet, dass es keine Begrenzung gibt, wie viele Insns in der Warteschlange verschoben werden können
vorzeitig. -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 einem blockierten . untersucht werden
insn, das ein Kandidat für das vorzeitige Entfernen aus der Warteschlange der blockierten insns ist. Dies
wirkt sich nur während des zweiten Fahrplandurchlaufs aus und nur wenn
-fsched-stalled-insns wird eingesetzt. -fno-sched-festgelegt-insns-dep entspricht
-fsched-stalled-insns-dep=0. -fsched-stalled-insns-dep ohne Wert ist äquivalent
zu -fsched-stalled-insns-dep=1.
-fsched2-use-superblocks
Verwenden Sie beim Scheduling nach der Registerzuweisung den Superblock-Scheduling-Algorithmus.
Superblock-Scheduling ermöglicht Bewegung über grundlegende Blockgrenzen hinweg, was zu einer schnelleren
Zeitpläne. Diese Option ist experimentell, da nicht alle Maschinenbeschreibungen von GCC verwendet werden
modellieren Sie die CPU genau genug, 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 kommt vor dem traditionellen Scheduling, wenn eine Schleife modulo . war
geplant, möchten wir möglicherweise verhindern, dass sich die späteren Planungsdurchläufe ändern
Zeitplan verwenden, verwenden wir diese Option, um dies zu steuern.
-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, bis eine von -fselektive-Planung or -fselektive Planung2 is
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 bis -fsel-sched-pipelining Ist eingeschaltet.
-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 in Registern, die von Funktionsaufrufen überlagert werden,
durch Ausgeben zusätzlicher Anweisungen zum Sichern und Wiederherstellen der Register um solche Aufrufe herum.
Eine solche Zuweisung wird nur vorgenommen, wenn sie zu einem besseren Code zu führen scheint, als dies der Fall wäre
sonst hergestellt werden.
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.
-fconserve-stack
Versuchen Sie, die Stapelnutzung zu minimieren. Der Compiler versucht, weniger Stack-Speicherplatz zu verwenden,
auch wenn das Programm dadurch langsamer wird. 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.
-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 können.
Standardmäßig aktiviert um -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 ist, 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-matrix-reorg
Führen Sie eine Matrixabflachung und -transponierung durch. Matrix-Abflachung versucht, ein . zu ersetzen
m-dimensionale Matrix mit ihrer äquivalenten n-dimensionalen Matrix, wobei n < m. Dies
reduziert den Grad der Indirektion, der für den Zugriff auf die Elemente der Matrix erforderlich ist. Die
Die zweite Optimierung ist die Matrixtransponierung, die versucht, die Reihenfolge der
die Dimensionen der Matrix, um die Cache-Lokalität zu verbessern. Beide Optimierungen benötigen die
-fganze-Programm Flagge. Das Transponieren ist nur aktiviert, wenn die Profilerstellungsinformationen
erhältlich.
-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.
-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-ppl und --mit-cloog zu
Aktivieren Sie die Graphite-Loop-Transformationsinfrastruktur.
-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
Der Schleifenaustausch transformiert die Schleife so, als ob der Benutzer Folgendes geschrieben hätte:
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-ppl
und --mit-cloog um die Graphite-Loop-Transformationsinfrastruktur zu aktivieren.
-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 so, als hätte der Benutzer Folgendes 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-ppl
und --mit-cloog um die Graphite-Loop-Transformationsinfrastruktur zu aktivieren.
-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
Das Blockieren von Schleifen verwandelt die Schleife so, als ob der Benutzer Folgendes geschrieben hätte:
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-ppl
und --mit-cloog um die Graphite-Loop-Transformationsinfrastruktur zu aktivieren.
-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 CLooG durchgeführt, wie index
Splitting und Dead Code Elimination in Schleifen.
-floop-flatten
Entfernt die Schleifenverschachtelungsstruktur: wandelt die Schleifenverschachtelung in eine einzelne Schleife um. Dies
Transformation kann als Aktivierungstransformation für die Vektorisierung nützlich sein und
Parallelisierung. Diese Funktion ist experimentell. Um diese Codetransformation zu verwenden, muss GCC
muss mit konfiguriert werden --mit-ppl und --mit-cloog um die Graphitschleife zu aktivieren
Transformationsinfrastruktur.
-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;
würde umgewandelt werden 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ühre eine schleifeninvariante Bewegung auf Bäumen aus. Dieser Pass verschiebt nur Invarianten, die
auf RTL-Ebene schwer zu handhaben (Funktionsaufrufe, Operationen, die sich auf nichttriviale erweitern
Folgen von inns). Mit -Funswitch-Schleifen es verschiebt auch Operanden von Bedingungen, die
sind außerhalb der Schleife invariant, so dass wir nur triviale Invarianzanalysen verwenden können
in 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 wurden. Es ist ein
eingeschränktere Form von -ftree-coalesce-vars. Dies kann die Debug-Informationen solcher
Inline-Variablen, aber es hält Variablen der inlined-in-Funktion getrennt von
einander, so dass sie mit größerer Wahrscheinlichkeit die erwarteten Werte in a . enthalten
Debugging-Sitzung. Dies war die Standardeinstellung in GCC-Versionen älter als 4.7.
-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-vektorisieren
Führen Sie eine Schleifenvektorisierung an Bäumen durch. Dieses Flag ist standardmäßig aktiviert bei -O3.
-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.
-ftree-vect-loop-version
Führen Sie die Schleifenversionierung durch, wenn Sie Schleifenvektorisierung für Bäume durchführen. Wenn eine Schleife erscheint
vektorisierbar sein, außer dass die Datenausrichtung oder Datenabhängigkeit nicht bestimmt werden kann
zur Kompilierzeit werden dann vektorisierte und nicht vektorisierte Versionen der Schleife generiert
zusammen mit Laufzeitprüfungen auf Ausrichtung oder Abhängigkeit, um zu kontrollieren, welche Version es ist
hingerichtet. Diese Option ist standardmäßig aktiviert, außer auf Ebene -Du wo es deaktiviert ist.
-fvect-cost-model
Kostenmodell für Vektorisierung aktivieren.
-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.
-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, bessere Arbeit zu leisten.
-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. Diese Option macht
Code größer und kann die Ausführung beschleunigen oder nicht.
-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,
-fsplit-ivs-in-unroller
Ermöglicht das Ausdrücken 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.
Kombination von -fweb und CSE reicht oft aus, um den gleichen Effekt zu erzielen. jedoch
in Fällen, in denen der Schleifenkörper komplizierter ist als ein einzelner Basisblock, ist dies nicht der Fall
zuverlässig. Es funktioniert auch bei 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
beim Abrollen einer Schleife, die 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 angegeben sind durch __eingebaut_erwarten, dann ist die
Heuristiken werden verwendet, um Verzweigungswahrscheinlichkeiten für den Rest des Kontrollflusses zu erraten
Grafik, unter der __eingebaut_erwarten Infos berücksichtigen. Die Wechselwirkungen zwischen den
Heuristiken und __eingebaut_erwarten kann komplex sein, und in einigen Fällen kann es nützlich sein,
deaktivieren Sie die Heuristiken, damit die Auswirkungen von __eingebaut_erwarten sind einfacher zu
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.
-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
dass ein Ausdruck wie "i + 10 > i" für vorzeichenbehaftetes "i" immer wahr ist. Dies
Annahme ist nur gültig, wenn Vorzeichenüberlauf undefiniert ist, da der Ausdruck falsch ist
wenn "i + 10" überläuft, wenn Zweierkomplementarithmetik verwendet wird. Wenn diese Option aktiviert ist
Führen Sie jeden Versuch durch, um festzustellen, ob eine Operation mit vorzeichenbehafteten Zahlen überläuft
müssen sorgfältig geschrieben werden, 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 würde sich nur an der nächsten 32-Byte-Grenze ausrichten, wenn
Dies kann durch Überspringen von 23 Bytes oder weniger erfolgen.
-fno-align-Funktionen und -falign-Funktionen=1 sind äquivalent und bedeuten, dass Funktionen
wird 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 die 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.
Die Hoffnung ist, dass die Schleife viele Male ausgeführt wird, was alle ausgleichen wird
Ausführung der Dummy-Operationen.
-fno-align-loops und -falign-loops=1 sind äquivalent und bedeuten, dass Schleifen nicht sein werden
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 sein werden
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.
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. Wenn Gold wird als Linker-Plugin verwendet,
"external_visible"-Attribute werden automatisch zu Funktionen hinzugefügt (noch nicht variabel
aufgrund eines Stroms Gold Problem), auf die außerhalb von LTO-Objekten gemäß
Auflösungsdatei produziert von Gold. Für andere Linker, die keine Auflösung erzeugen können
-Datei sind weiterhin explizite "externally_visible"-Attribute erforderlich. Während diese Option
entspricht der richtigen Verwendung des Schlüsselworts "static" für Programme bestehend aus a
Einzelfeile, in Kombination mit Option -flto dieses Flag kann verwendet werden, um viele zu kompilieren
kleinere Programme, da die Funktionen und Variablen für das Ganze lokal werden
kombinierte Kompilierungseinheit, nicht für die einzelne Quelldatei selbst.
Diese Option impliziert -fhole-Datei für Fortran-Programme.
-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 muss zur Kompilierzeit und während angegeben werden
der letzte Link. 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 beachten sollten, ist, dass zur Aktivierung der Link-Time-Optimierung die
-flto Flag muss sowohl an den Befehl zum Kompilieren als auch an den Link übergeben werden.
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.
Beachten Sie, dass beim Kompilieren einer Datei mit -flto, die generierte Objektdatei ist größer als
eine normale Objektdatei, da sie GIMPLE-Bytecodes und den üblichen endgültigen Code enthält.
Dies bedeutet, dass Objektdateien mit LTO-Informationen als normales Objekt verknüpft werden können
Dateien; wenn -flto wird nicht an den Linker übergeben, es werden keine interprozeduralen Optimierungen durchgeführt
angewendet.
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 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -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 ohne -flto und dann meinprog ist nicht optimiert.
Beim Erstellen der endgültigen Binärdatei mit -flto, GCC wendet nur Link-Time-Optimierungen an
zu den 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. Derzeit sind die folgenden Optionen
werden in den GIMPLE-Bytecode-Dateien gespeichert: -fPIC, -fgemein und die ganze -m Zielflaggen.
Zur Linkzeit werden diese Optionen eingelesen und erneut angewendet. Beachten Sie, dass der Strom
Die Implementierung versucht nicht, widersprüchliche Werte für diese Optionen zu erkennen. Wenn
verschiedene Dateien haben widersprüchliche Optionswerte (z. B. eine Datei wird kompiliert mit -fPIC
und ein anderer nicht), verwendet der Compiler einfach den zuletzt aus dem Bytecode gelesenen Wert
Dateien. Es wird daher empfohlen, dass Sie alle Dateien zusammenstellen, die an der
gleicher Link mit gleichen Optionen.
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.
Ein weiteres Merkmal von LTO ist, dass es möglich ist, interprozedurale Optimierungen anzuwenden
auf Dateien, die in verschiedenen Sprachen geschrieben sind. Dies erfordert Unterstützung an der Sprachfront
Ende. Derzeit können die Frontends von C, C++ und Fortran GIMPLE . ausgeben
Bytecodes, also sollte so etwas funktionieren:
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; alles was du hinzufügen musst ist -flto zu allen
Befehle kompilieren und verknüpfen.
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 diese Funktion zu aktivieren, verwenden Sie das Flag -fuse-linker-plugin
zur Linkzeit:
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.
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, daher werden Bytecode-Dateien, die in einer Version von GCC generiert wurden, nicht
mit einer älteren/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 falsch produzieren
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.
Diese Option ist standardmäßig deaktiviert
-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 anzugeben (wenn möglich).
Die Angabe von "none" als Algorithmus deaktiviert die Partitionierung und das Streaming vollständig. Die
Standardwert ist "ausgeglichen".
-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
-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
"-fgesamtes-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. Außerdem müssen nm, ar und ranlib Linker unterstützen
Plugins, um eine Build-Umgebung mit vollem Funktionsumfang zu ermöglichen (in der Lage, statische
Bibliotheken usw.).
Die Standardeinstellung ist -ffat-lto-Objekte aber diese Vorgabe soll sich in Zukunft ändern
Releases, wenn Linker-Plugin-fähige Umgebungen häufiger werden.
-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.
-fuse-ld=Gold
Verwenden Sie das Gold Linker anstelle des Standardlinkers.
-fuse-ld=bfd
Verwenden Sie das ld.bfd Linker anstelle des Standardlinkers.
-fcprop-register
Nach der Aufteilung der Registerzuweisung und der Befehlsaufteilung nach der Registerzuweisung werden wir
Führen Sie einen Copy-Propagation-Pass durch, um zu versuchen, Planungsabhängigkeiten zu reduzieren, und
Entfernen Sie gelegentlich die Kopie.
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, wird GCC
Verwenden Sie Heuristiken, um solche Inkonsistenzen zu korrigieren oder auszugleichen. Standardmäßig wird GCC
eine Fehlermeldung ausgeben, 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, daher wird die Profildatendatei in derselben angezeigt
Verzeichnis als 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-arcs", "-fprofile-values", "-fvpt".
If Weg angegeben ist, prüft GCC die Weg um die Profil-Feedback-Daten zu finden
Dateien. Sehen -fprofile-dir.
-fprofile-verwenden
-fprofile-use=Weg
Aktivieren Sie profilfeedbackgerichtete Optimierungen und Optimierungen im Allgemeinen gewinnbringend
nur mit Profil-Feedback verfügbar.
Die folgenden Optionen sind aktiviert: "-fbranch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer"
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, prüft GCC die Weg um die Profil-Feedback-Daten zu finden
Dateien. Sehen -fprofile-dir.
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, wird die übermäßige Genauigkeit den Regeln folgen
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
Sets -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 ERRNO nicht, nachdem Sie mathematische Funktionen aufgerufen haben, die mit einem einzelnen 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 das Programm mit kompiliert wurde -fprofile-Bögen verlässt es speichert
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.
-fvpt
In Kombination mit -fprofile-Bögen, weist es den Compiler an, einen Code zum Sammeln hinzuzufügen
Informationen über Werte von Ausdrücken.
Mit -fbranch-Wahrscheinlichkeiten, liest es die gesammelten Daten zurück und führt die
darauf basierende Optimierungen. Derzeit umfassen die Optimierungen die Spezialisierung von
Divisionsoperation 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
nach Registerzuordnung über. Von dieser Optimierung profitieren am meisten Verarbeiter mit
viele Register. Abhängig vom Debug-Informationsformat, das vom Ziel verwendet wird,
es kann jedoch das Debuggen unmöglich machen, da Variablen nicht mehr in a bleiben
"Heimregister".
Standardmäßig aktiviert mit -Funroll-Schleifen und -fpeel-Schleifen.
-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, 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 kleiner konstanter 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 ein größeres Objekt und
ausführbare Dateien und wird auch langsamer. Sie können "gprof" nicht für alle verwenden
Wenn Sie diese Option angeben, können Probleme beim Debuggen auftreten, wenn Sie
spezifizieren Sie sowohl diese Option als auch -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
registriert sich 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.
HINWEIS: In Ubuntu 6.10 und späteren Versionen ist diese Option standardmäßig für C, C++,
ObjC, ObjC++, wenn nichts davon -fno-Stack-Protektor, -nostdlib, Noch -freistehend sind
gefunden.
-fstack-protector-all
Like -stapelschutz außer dass alle Funktionen geschützt sind.
-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; }
würde normalerweise die Adressen aller drei Variablen berechnen, aber wenn Sie es kompilieren
mit -fsection-Anker, greift es von einem gemeinsamen Ankerpunkt aus auf die Variablen zu
stattdessen. 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 wird beispielsweise keine Inline-Funktionen verwenden, 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 in gegeben
die folgende Tabelle:
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 für das Crossjumping 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 Crossjumping 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 ist
gesucht wird, 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 zugewiesen wird, um
Führen Sie die globale Optimierung der Eliminierung gemeinsamer Unterausdrücke durch. Wenn mehr Speicher
als angegeben erforderlich 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 wird RTL PRE den Ausdruck einfügen oder entfernen und so verlassen
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 zulässt
den aktuellen Zustand und beginnen von vorne. Große Funktionen mit wenigen Nebenstellen oder Aufrufen
kann übermäßig große Listen erstellen, 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. Nur das
wirkt sich auf inline deklarierte Funktionen und in einer Klassendeklaration implementierte Methoden aus
(C++). Der Standardwert ist 400.
max-inline-insns-auto
Wenn Sie verwenden, -finline-Funktionen (enthalten in -O3), viele Funktionen, die
andernfalls 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.
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
dies könnte zu eng sein (betrachten Sie eine Einheit bestehend aus Funktion A, die inline ist und
B, der nur dreimal A anruft. Wenn B relativ zu A klein ist, ist das Wachstum von unit
beträgt 300\% und dennoch ist ein solches Inlining sehr vernünftig. Für sehr große Einheiten bestehend aus
kleine inlinefähige Funktionen, jedoch wird die Gesamteinheitswachstumsgrenze benötigt, um
Vermeiden Sie eine exponentielle Explosion der Codegröße. Für kleinere Einheiten beträgt die Größe also
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 30, wodurch das Einheitenwachstum auf das 1.3-fache der ursprünglichen Größe begrenzt wird.
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 außerhalb der Zeile von selbstrekursiven Inline-Kopien an
Funktion kann durch rekursives Inlining hineinwachsen.
Für inline deklarierte Funktionen --param max-inline-insns-rekursiv wird aufgenommen
Konto. Für Funktionen, die nicht inline deklariert sind, erfolgt rekursives Inlining nur, wenn
-finline-Funktionen (enthalten in -O3) ist aktiviert und --param max-inline-insns-
rekursiv-auto wird genutzt. Der Standardwert ist 450.
max-inline-rekursive-tiefe
max-inline-rekursive-tiefe-auto
Gibt die maximale Rekursionstiefe an, die vom rekursiven Inlining verwendet wird.
Für inline deklarierte Funktionen --param max-inline-rekursive-tiefe wird aufgenommen
Konto. Für Funktionen, die nicht inline deklariert sind, erfolgt rekursives Inlining nur, wenn
-finline-Funktionen (enthalten in -O3) ist aktiviert und --param max-inline-rekursiv-
Tiefenautomatik wird genutzt. 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 gegebenen Aufruf rekursiert
Ausdruck. Dieser Parameter beschränkt Inlining nur auf Aufrufe von Ausdrücken, deren
Wahrscheinlichkeit überschreitet einen bestimmten Schwellenwert (in Prozent). Der Standardwert ist 10.
Early-Inlining-Insns
Geben Sie das Wachstum an, das ein früher Inliner erzeugen kann. Tatsächlich erhöht es die Menge an
Inlining für Code mit großen Abstraktionseinbußen. Der Standardwert ist 10.
max-early-inliner-iterationen
max-early-inliner-iterationen
Limit der Iterationen des frühen Inliners. Dies begrenzt im Grunde die Anzahl der verschachtelten
indirekte Anrufe können frühe Inliner lösen. Tiefere Ketten werden noch bis spät gehandhabt
Inlining.
comdat-sharing-wahrscheinlichkeit
comdat-sharing-wahrscheinlichkeit
Wahrscheinlichkeit (in Prozent), dass die C++-Inline-Funktion mit comdat-Sichtbarkeit
über mehrere Kompilierungseinheiten freigegeben. Der Standardwert ist 20.
min-vect-schleifengebunden
Die minimale Anzahl von Iterationen, unter denen eine Schleife nicht vektorisiert wird, 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 wird 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 Standard
Wert 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 wird das Hochziehen von Code sein. Die Angabe von 0 erlaubt alle
Ausdrücke, um unbegrenzte Entfernungen zurückzulegen. 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 wird vermeiden
schränkt die Suche ein, kann aber die Kompilierung riesiger Funktionen verlangsamen. Der Standard
Wert 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 haben sollte, wenn diese Schleife ist
abgerollt, und wenn die Schleife abgerollt ist, bestimmt es, wie oft der Schleifencode
ist ausgerollt.
max-durchschnittliche-entrollte-insns
Die maximale Anzahl von Anweisungen, die durch Wahrscheinlichkeiten ihrer Ausführung beeinflusst werden, die
eine Schleife sollte haben, wenn diese Schleife abgerollt ist, und wenn die Schleife abgerollt ist, ist es
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 haben sollte, wenn diese Schleife abgezogen wird,
und wenn die Schleife abgezogen wird, bestimmt es, wie oft der Schleifencode abgezogen wird.
Max-Peel-Zeiten
Die maximale Anzahl von Peelings einer einzelnen Schleife.
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 darunter alle Kandidaten
werden für jede Verwendung bei der Optimierung von Induktionsvariablen berücksichtigt. Nur die meisten
relevante Kandidaten werden berücksichtigt, wenn es mehr Kandidaten gibt, um zu vermeiden
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 wir immer,
Entfernen Sie unnötige ivs aus dem Set während der Optimierung, wenn eine neue iv hinzugefügt wird
zum Set.
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-Löser verarbeiten kann
Einfügung. 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. Siehe Option ftree-vect-loop-version
.
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. Siehe Option ftree-vect-loop-version für
mehr Informationen.
Max-Iterationen-to-Track
Die maximale Anzahl von Iterationen einer Schleife den Brute-Force-Algorithmus zur Analyse
von # von Iterationen der Schleife versucht auszuwerten.
hot-bb-count-fraktion
Wählen Sie einen Bruchteil der maximalen Anzahl von Wiederholungen des Basisblocks im Programm
gegebener Basisblock muss als heiß betrachtet werden.
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 die Funktion eine einzelne Schleife mit bekannter Grenze und eine andere Schleife mit . enthält
Unbekannt. Wir sagen die bekannte Anzahl von Iterationen richtig voraus, während die unbekannte
Anzahl der Iterationen im Durchschnitt auf etwa 10. Dies bedeutet, dass die Schleife ohne
Grenzen würden relativ zur anderen künstlich kalt erscheinen.
ausrichten-schwelle
Wählen Sie den Bruchteil der maximalen Ausführungshäufigkeit des Basisblocks in Funktion
gegebener Basisblock wird ausgerichtet.
align-loop-iterationen
Eine Schleife, von der erwartet wird, dass sie mindestens die ausgewählte Anzahl von Iterationen durchlaufen 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 wird nur verwendet, wenn Profil-Feedback ist
erhältlich. Die realen Profile (im Gegensatz zu statisch geschätzten) sind viel
weniger ausgewogen, wodurch der Schwellenwert größer sein kann.
Tracer-Max-Code-Wachstum
Stoppen Sie die Endduplizierung, sobald das Codewachstum einen bestimmten Prozentsatz erreicht hat. Das ist
ziemlich schräges Argument, 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 niedriger ist
Schwelle.
ä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
Maximale Anzahl von Basisblöcken auf dem Pfad, die von cse berücksichtigt werden. Der Standardwert ist 10.
max-cse-insns
Die maximalen Anweisungen CSE-Prozess vor dem Spülen. Der Standardwert 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 die unbedingte Verzweigung verwendet werden soll
oder duplizieren Sie den Code an seinem Ziel. Code wird dupliziert, wenn er geschätzt wird
Größe ist kleiner als dieser Wert multipliziert mit der geschätzten Größe von unbedingten
springen Sie in die Hot Spots des Programms.
Die Nachbestellung-Block-Duplikat-Feedback wird nur verwendet, wenn Profil-Feedback ist
verfügbar und können 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. 0 - deaktivieren
Bereichserweiterung, N – höchstens N Iterationen ausführen. Der Standardwert ist 0.
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
insn geplant. Der Standardwert ist 40.
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.
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.
min-virtuelle-Zuordnungen
Gibt die Mindestanzahl virtueller Zuordnungen im inkrementellen SSA-Updater an
die registriert werden sollten, um die durch . definierte Heuristik der virtuellen Zuordnungen auszulösen
Virtual-Mappings-Verhältnis. Der Standardwert ist 100.
Virtual-Mapping-Verhältnis
Wenn die Anzahl der virtuellen Zuordnungen größer ist als die Anzahl
der zu aktualisierenden virtuellen Symbole, dann schaltet der inkrementelle SSA-Updater auf a
vollständiges Update für diese Symbole. Das Standardverhältnis ist 3.
ssp-Puffergröße
Die Mindestgröße von Puffern (dh Arrays), die Stack-Smashing erhalten
Schutz, wenn -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.
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 wir feldsensitiv behandeln
während der Zeigeranalyse. Der Standardwert ist Null für -O0 und -O1 und 100 für -Os.
-O2 und -O3.
Prefetch-Latenz
Schätzung der durchschnittlichen Anzahl von Anweisungen, die vor dem Prefetch ausgeführt werden
beendet. Die Distanz, die wir vorausholen, 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 Konvertierung der Switch-Initialisierung 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. Wenn Sie für diesen Parameter einen Wert von 0 einstellen, wird
erlauben eine unbegrenzte Set-Länge.
sccvn-max-scc-größe
Maximale Größe einer stark verbundenen Komponente (SCC) während der SCCVN-Verarbeitung. Wenn
diese Grenze erreicht ist, wird die SCCVN-Verarbeitung für die gesamte Funktion nicht durchgeführt und
Optimierungen, die davon abhängig sind, werden deaktiviert. Die standardmäßige maximale SCC-Größe ist
10000
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.
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 höher.
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 dann nicht von den
Optimierungen mit 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 durch einen oder mehrere neue Parameter
nur, wenn ihre kumulative Größe kleiner oder gleich ist ipa-sra-ptr-Wachstumsfaktor
mal die Größe des ursprünglichen Zeigerparameters.
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.
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.
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-load-data-races
Ermöglichen Sie es Optimierern, neue Data Races bei Lasten einzuführen. Auf 1 setzen, um zuzulassen,
andernfalls auf 0. Diese Option ist standardmäßig aktiviert, es sei denn, sie wird implizit vom
-fmemory-model= .
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 aktiviert, es sei denn, sie wird implizit vom
-fmemory-model= .
Allow-packed-load-data-races
Ermöglichen Sie es Optimierern, neue Data Races bei gepackten Datenladungen einzuführen. Auf 1 bis einstellen
erlauben, andernfalls auf 0. Diese Option ist standardmäßig aktiviert, es sei denn, sie wird implizit durch festgelegt
-fmemory-model= .
Allow-packed-store-data-races
Ermöglichen Sie es Optimierern, neue Data Races in gepackten Datenspeichern einzuführen. Auf 1 bis einstellen
erlauben, andernfalls auf 0. Diese Option ist standardmäßig aktiviert, es sei denn, sie wird implizit durch festgelegt
-fmemory-model= .
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.
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 zu erkennen weiß.
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.
-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 experimentell; in einem
zukünftigen Version von GCC wird es standardmäßig für C99 und C++ aktiviert sein.
-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.
-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. Aktuell der Befehl
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 zu erkennen weiß.
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.
-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, Optionen, die die Verknüpfung der Systembibliotheken spezifizieren, wie z
B. "-static-libgcc" oder "-shared-libgcc", werden ignoriert. Die Standard-Startup-Dateien
werden normalerweise verwendet, es sei denn -nostartfiles wird genutzt. Der Compiler kann Aufrufe von . generieren
"memcmp", "memset", "memcpy" und "memmove". Diese Einträge werden normalerweise aufgelöst durch
Einträge in libc. Diese Einstiegspunkte sollten über einen anderen Mechanismus bereitgestellt werden
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 übergeben, Optionen
Angeben der Verknüpfung der Systembibliotheken, wie "-static-libgcc" oder
"-shared-libgcc", wird ignoriert. Der Compiler kann Aufrufe von "memcmp" generieren,
"memset", "memcpy" und "memmove". Diese Einträge werden normalerweise durch Einträge in . aufgelöst
libc. Diese Einstiegspunkte sollten durch einen anderen Mechanismus bereitgestellt werden, wenn dies
Option ist angegeben.
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. (Zum Beispiel, __hauptsächlich, verwendet, um sicherzustellen, dass C++
Konstruktoren werden aufgerufen.)
-Kuchen
Erstellen Sie eine positionsunabhängige ausführbare Datei auf Zielen, die dies unterstützen. Für vorhersehbare
Ergebnisse, müssen Sie auch die gleichen Optionen angeben, die zum Generieren von Code verwendet wurden
(-fpie, -fpie, oder Modellunteroptionen), wenn Sie diese Option angeben.
-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 die gleichen Optionen an, die zum Generieren von Code verwendet wurden (-fpic, -fPIC, oder auch
model suboptions), wenn Sie diese 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
wird nicht immer mit dem geteilten verlinkt 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, wird die freigegebene Version von libgcc in gemeinsam genutzte Bibliotheken von
Ursprünglich. Andernfalls nutzt es den Linker und optimiert die
Verknüpfung mit der freigegebenen Version von libgcc, Verknüpfung mit der statischen Version von libgcc
standardmäßig. Dadurch können Ausnahmen über solche gemeinsam genutzten Bibliotheken verbreitet werden.
ohne Umzugskosten zur 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.
-static-libstdc++
Wenn das g ++ Programm verwendet wird, um ein C++-Programm zu verknüpfen, wird es normalerweise automatisch
Link gegen libstdc ++. Wenn libstdc ++ ist als gemeinsame Bibliothek verfügbar, und die
-statisch Option nicht verwendet wird, wird dies mit der freigegebenen Version von verknüpft
libstdc ++. Das ist normalerweise in Ordnung. Manchmal ist es jedoch sinnvoll, die
Version von libstdc ++ vom Programm verwendet, ohne vollständig statisch zu sein
Verknüpfung. Die -static-libstdc++ Option leitet die g ++ Treiber zum Verlinken libstdc ++
statisch, ohne unbedingt andere Bibliotheken statisch zu 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.
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 bleibt weiterhin
durchsucht, sondern als Systemverzeichnis an seiner normalen Position in der System-Include-Kette.
Dies soll sicherstellen, dass das Verfahren von GCC zum Beheben fehlerhafter Systemheader und der Bestellung
für die Anweisung include_next werden nicht versehentlich geändert. Wenn du es wirklich brauchst
Ändern Sie 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 von #einschließen "Datei"; sie werden nicht gesucht #einschließen <Datei>,
sonst genauso wie -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 wurde nicht angegeben, der Treiber versucht 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 der -B verweist auf ein Verzeichnis,
und bei Bedarf wird am Ende des Pfads ein Verzeichnistrennzeichen hinzugefügt.
-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 Include-Dateien im 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. Das soll helfen
Bootstrapping des Compilers.
-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 würde normalerweise nach Headern in suchen / usr / include und Bibliotheken in / Usr / lib,
es wird stattdessen suchen dir/usr/include und dir/usr/lib.
Wenn Sie sowohl diese Option als auch die -isysroot Option, dann die -Sysroot Option wird
für Bibliotheken gelten, 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.
-I- Diese Option ist veraltet. Bitte verwenden Sie -Ich zitiere anstatt von -I Verzeichnisse vor
-I- und entfernen Sie die -I-. Alle Verzeichnisse, die Sie mit angeben -I Optionen vor dem
-I- Option wird nur für den Fall von . gesucht #einschließen "Datei"; sie werden nicht gesucht
für #einschließen <Datei>.
Wenn zusätzliche Verzeichnisse mit . angegeben werden -I Optionen nach dem -I-, Diese
Verzeichnisse werden nach allen durchsucht #einschließen Richtlinien. (Gewöhnlich alle -I Verzeichnisse
werden so verwendet.)
Darüber hinaus ist die -I- Option verhindert die Verwendung des aktuellen Verzeichnisses (wo die
aktuelle Eingabedatei stammt) als erstes Suchverzeichnis für #einschließen "Datei".
Es gibt keine Möglichkeit, diesen Effekt von . zu überschreiben -I-. Mit -I. Sie können die Suche angeben
das Verzeichnis, das beim Aufruf des Compilers aktuell war. 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.
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, also wenn dies die Codegröße verringert oder erhöht
kann von Fall zu Fall variieren.
-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 jeder anderen generierten Anweisung.
-mno-soft-cmpsf
Geben Sie für Gleitkommavergleiche mit einfacher Genauigkeit einen fsub-Befehl aus und testen Sie die
Flaggen. Dies ist schneller als ein Softwarevergleich, kann jedoch zu falschen Ergebnissen führen
das Vorhandensein von NaNs, oder wenn zwei verschiedene kleine Zahlen so verglichen werden, dass ihre
Differenz wird als Null berechnet. Die Standardeinstellung ist -msoft-cmpsf, die langsamer verwendet, aber
IEEE-konform, 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 und ein Programm mit a . kompiliert
ein anderer Stack-Offset, als die Bibliotheken kompiliert wurden, wird 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 b / bl-Anweisungen, und laden Sie daher die Funktionsadresse in
registrieren, 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 b / bl-Anweisungen, verwenden Sie diese Anweisungen also für direkte Anrufe. Der Standard
is -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, auch wenn viele Bibliotheksfunktionsschnittstellen dies tun
bleiben unberührt, wenn sie keine SIMD-Vektormodi an Stellen verwenden, an denen sie die Größe beeinflussen
und/oder Ausrichtung relevanter Typen.
-msplit-vecmove-früh
Teilen Sie die Vektorbewegungen in einzelne Wortbewegungen, bevor Sie sie neu laden. Theoretisch könnte 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 angeben, dieses Register als festes Register zu verwenden, und keine, was bedeutet, dass nein
Zu diesem Zweck wird das Register verwendet. Die Standardeinstellung ist -m1reg-keine.
AAArch64 Optionen
Diese Optionen sind für AArch64-Implementierungen definiert:
-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 allgemeinen Register verwendet.
-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.
-marsch=Name
Geben Sie den Namen der Zielarchitektur an, optional mit einem oder mehreren Suffixen
Feature-Modifikatoren. Diese Option hat die Form -marsch=Bogen{+[nicht]-Funktion}*, bei dem die
nur Wert für Bogen is armv8-a. Die möglichen Werte für -Funktion sind in der dokumentiert
Unterabschnitt unten.
Wenn widersprüchliche Feature-Modifikatoren angegeben werden, wird das Feature ganz rechts verwendet.
GCC verwendet diesen Namen, um zu bestimmen, welche Art von Anweisungen es beim Generieren ausgeben kann
Assembler-Code. Diese Option kann in Verbindung mit oder anstelle von verwendet werden -mcpu=
.
-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}*, wo möglich
Werte für CPU sind Generika, grosse. Die möglichen Werte für -Funktion sind dokumentiert in
den Unterabschnitt unten.
Wenn widersprüchliche Feature-Modifikatoren angegeben werden, wird das Feature ganz rechts verwendet.
GCC verwendet diesen Namen, um zu bestimmen, welche Art von Anweisungen es beim Generieren ausgeben kann
Assembler-Code.
-mtune=Name
Geben Sie den Namen des Prozessors an, für den die Leistung optimiert werden soll. Der Code wird angepasst
als ob der Zielprozessor von dem in dieser Option angegebenen Typ wäre, aber immer noch verwendet würde
Anweisungen, die mit dem durch a angegebenen Zielprozessor kompatibel sind -mcpu= Möglichkeit. Dies
Der Option können keine Feature-Modifikatoren angehängt werden.
-März und -mcpu Merkmalsmodifikatoren
Feature-Modifikatoren, die mit verwendet werden -März und -mcpu kann einer der folgenden sein:
Krypto
Krypto-Erweiterung aktivieren. Dies bedeutet, dass Advanced SIMD aktiviert ist.
fp Gleitkomma-Anweisungen aktivieren.
simd
Aktivieren Sie die erweiterten SIMD-Anweisungen. Dies impliziert, dass Gleitkommaanweisungen sind
aktiviert. Dies ist die Standardeinstellung für alle derzeit möglichen Werte für Optionen -März und
-mcpu=.
ARM Optionen
Diese -m Optionen sind für Advanced RISC Machines (ARM)-Architekturen 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.
-maps
Dies ist ein Synonym für -maps-Rahmen.
-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 tatsächlich einer von a
Auswahl aus einer kleinen Menge verschiedener Funktionsprologe) und diese Informationen können
Wird verwendet, um die start if-Funktionen innerhalb eines ausführbaren Codes zu finden. Der Standard
is -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.
-mwords-little-endian
Diese Option gilt nur beim Generieren von Code für Big-Endian-Prozessoren. Generieren
Code für eine Little-Endian-Wortreihenfolge, aber eine Big-Endian-Bytereihenfolge. Das heißt, ein Byte
Reihenfolge des Formulars 32107654. Hinweis: Diese Option sollte nur verwendet werden, wenn Sie es benötigen
Kompatibilität mit Code für Big-Endian-ARM-Prozessoren, die von Versionen der
Compiler vor 2.8. Diese Option ist jetzt veraltet.
-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, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, iwmmxt, iwmmxt2, ep9312.
-marsch=einheimisch bewirkt, dass der Compiler die Architektur des Builds automatisch erkennt
Rechner. Derzeit wird diese Funktion nur unter Linux und nicht allen unterstützt
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, Cortex-a5, Cortex-a7, Cortex-a8, Cortex-a9,
Cortex-a15, Kortex-r4, Kortex-r4f, Kortex-r5, Cortex-m4, Cortex-m3, Cortex-m1,
Cortex-m0, xscale, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.
-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 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 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
-mfpe=Anzahl
-mfp=Anzahl
Dies gibt an, auf welcher Gleitkomma-Hardware (oder Hardware-Emulation) verfügbar ist
das Ziel. Zulässige Namen sind: fpa, fpe2, fpe3, Einzelgänger, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, Neon, Neon-FP16, vfpv4, vfpv4-d16,
fpv4-sp-d16 und neon-vfpv4. -mfp und -mfpe sind Synonyme für -mfpu=fpeAnzahlZ.
Kompatibilität mit älteren Versionen von GCC.
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 vom Auto-Vektorisierungspass von GCC nicht verwendet 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öße aller Strukturen und Gewerkschaften wird auf ein Vielfaches der Zahl aufgerundet
von 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 wird
ausgeführt werden, 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, die die Kurzanruf Attribut,
Funktionen, die im Geltungsbereich von a . liegen #pragma keine_langen_Anrufe Direktive und Funktionen
deren Definitionen bereits in der aktuellen Kompilationseinheit kompiliert wurden, wird
nicht in lange Anrufe umgewandelt werden. Die Ausnahme von dieser Regel ist die schwache Funktion
Definitionen, Funktionen mit dem langer Anruf Attribut oder die Abschnitt Attribut, und
Funktionen, die in den Anwendungsbereich von a . fallen #pragma lange_anrufe Direktive, wird es immer sein
in lange Anrufe verwandelt.
Diese Funktion ist standardmäßig nicht aktiviert. Angabe -mno-lange-Anrufe wird die wiederherstellen
Standardverhalten, ebenso wie das Platzieren der Funktionsaufrufe im Rahmen von a #pragma
long_calls_off Richtlinie. 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. Der Standardwert ist R10, es sei denn, Stapel-
Die Überprüfung ist aktiviert, wenn R9 verwendet wird.
-mcirrus-fix-ungültige-insns
Fügen Sie NOPs in den Befehlsstrom ein, um Probleme mit . zu umgehen
ungültige Maverick-Befehlskombinationen. Diese Option ist nur gültig, wenn die
-mcpu=ep9312 Option wurde verwendet, um die Generierung von Anweisungen für die Cirrus . zu ermöglichen
Maverick-Gleitkomma-Coprozessor. Diese Option ist standardmäßig nicht aktiviert, da
das Problem tritt nur in älteren Maverick-Implementierungen auf. Die Standardeinstellung kann
aktiviert durch die Verwendung des -mno-cirrus-fix-ungültige-insns Schalter.
-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.
-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 Dialekte 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
ein Byte nach dem anderen.
Das ARM-Attribut "Tag_CPU_unaligned_access" wird in der generierten Objektdatei gesetzt
auf true oder false, abhängig von der Einstellung dieser Option. Wenn nicht ausgerichtet
Zugriff aktiviert ist, wird auch das Präprozessorsymbol "__ARM_FEATURE_UNALIGNED" angezeigt
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.
AVR Optionen
-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{}= "ata6289", "attiny13", "attiny13a", "attiny2313",
"attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
"attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45", "attiny461",
"attiny461a", "attiny48", "attiny84", "attiny84a", "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{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".
"avr4"
"Erweiterte" Geräte mit bis zu 8@tie{}KiB Programmspeicher. MCU@Krawatte{}=
"atmega48", "atmega48a", "atmega48p", "atmega8", "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{}= "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646", "at90usb647", "at94k", "m3000".
"avr51"
"Erweiterte" Geräte mit 128@tie{}KiB Programmspeicher. MCU@tie{}= "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
"at90usb1286", "at90usb1287".
"avr6"
"Erweiterte" Geräte mit 3-Byte-PC, dh mit mehr als 128@tie{}KiB Programm
Speicher. MCU@tie{}= "atmega2560", "atmega2561".
"avrxmega2"
"XMEGA"-Geräte mit mehr als 8@tie{}KiB und bis zu 64@tie{}KiB Programmspeicher.
MCU@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1".
"avrxmega4"
"XMEGA"-Geräte mit mehr als 64@tie{}KiB und bis zu 128@tie{}KiB Programm
Speicher. MCU@tie{}= "atxmega64a3", "atxmega64d3".
"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", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".
"avrxmega7"
"XMEGA"-Geräte mit mehr als 128@tie{}KiB Programmspeicher und mehr als
64@tie{}KiB RAM. MCU@tie{}= "atxmega128a1", "atxmega128a1u".
"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.
-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. Die Einstellung "-mrelax" fügt nur die Option "--relax" zum
Linker-Befehlszeile, wenn der Linker aufgerufen wird.
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.
-mkurze-Anrufe
Diese Option ist veraltet und wird in GCC 4.8 entfernt. Siehe "-mrelax" für a
Ersatz.
Verwenden Sie die Anweisungen "RCALL"/"RJMP" sogar auf Geräten mit 16@tie{}KiB oder mehr Programm
Speicher, dh auf Geräten, die die Anweisungen "CALL" und "JMP" haben.
-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" oder "-mmcu=avr25" muss der Compiler-Treiber
wird diese Option in der Befehlszeile des eigentlichen Compilers hinzufügen oder entfernen, da die
Der Compiler weiß dann, ob das Gerät oder die Architektur einen 8-Bit-Stack-Pointer hat und somit
keine "SPH"-Registrierung 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.
"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 Startup-Codes oder während des
Anwendung. Insbesondere wird "EIND" nicht in Funktion oder Unterbrechung gespeichert/wiederhergestellt
Service Routine Prolog/Epilog.
· Für indirekte Aufrufe von Funktionen und berechneten 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 generiert
richtig eine alle situation. Siehe die Compiler-Option "-mrelax" und die Linler-Option
"--Entspannen Sie sich". Es gibt Eckfälle, in denen der Linker Stubs generieren soll, aber
bricht ohne Entspannung und ohne hilfreiche Fehlermeldung ab.
· 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 nie "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 benutzerspezifischer Startup-Code "EIND" frühzeitig einrichtet, z. B. 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 mit "-Wl,--defsym,func_4=0x4" verknüpft werden. 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 eine 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 speziellen "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 wird daher durch die Befehlszeilenoption "-mmcu=" ausgelöst.
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
hängt vom "-mmcu= ." abmcu" Möglichkeit. Mögliche Werte sind:
2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107
für MCU="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7". Wenn MCU
ein Gerät angibt, wird dieses eingebaute Makro entsprechend eingestellt. Zum Beispiel mit
"-mmcu=atmega8" wird das Makro auf 4 definiert.
"__AVR_Gerät__"
Einstellung "-mmcu=Gerät" definiert dieses eingebaute Makro, das den Namen des Geräts widerspiegelt.
"-mmcu=atmega8" definiert beispielsweise 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 wird
nicht definiert werden.
"__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 und wenn "-mshort-calls" nicht gesetzt ist.
"__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 durch "-mtiny-stack" beeinflusst.
"__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 bei "-mmcu=avr2" und "-mmcu=avr25" auch durch "-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 Befehlszeilenoption "-mno-interrupts" wider.
"__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_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" Konfigurationsoption.
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. Die Wahl vatervision spezifiziert das
Silizium-Revision des Blackfin-Zielprozessors. Alle verfügbaren Problemumgehungen für die
gezielte Silikonrevision wird aktiviert. Wenn vatervision is keine, es gibt keine Problemumgehungen
aktiviert. Wenn vatervision is jedem, werden alle Problemumgehungen für den Zielprozessor
aktiviert. Das Makro "__SILICON_REVISION__" ist auf zwei hexadezimale Ziffern definiert
die die Major- und Minor-Nummern in der Siliziumrevision darstellen. Wenn vatervision is
keine, die "__SILICON_REVISION__" ist nicht definiert. Wenn vatervision is jedem, der
"__SILICON_REVISION__" ist als 0xffff definiert. Wenn dies optional vatervision ist nicht
verwendet, geht GCC von der neuesten bekannten Silizium-Revision der anvisierten Blackfin
Prozessor.
Unterstützung für bf561 ist unvollständig. Zum bf561, Nur das Prozessormakro ist definiert.
Ohne diese Möglichkeit bf532 wird standardmäßig als Prozessor verwendet. Die entsprechende
vordefinierte Prozessormakros für CPU ist zu definieren. Und für bfin-elf Werkzeugkette,
dies bewirkt, dass das von libgloss bereitgestellte Hardware-BSP eingebunden wird, wenn -msim ist nicht
gegeben.
-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 . enthält
oder 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 einen kompakteren Code, die Angabe anderer Werte wird
erzwingt die Zuordnung dieser Nummer zur aktuellen Bibliothek, aber es ist kein Platz mehr vorhanden oder
zeiteffizienter 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 wird die wiederherstellen
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 den Multicore-Blackfin-Prozessor. Richtige Startdateien und
Link-Skripte werden verwendet, um Multicore zu unterstützen. Diese Option definiert
"__BFIN_MULTICORE". Es kann nur mit verwendet werden -mcpu=bf561[-vatervision]. Es kann benutzt werden
mit -mcorea or -mcoreb. Wenn es ohne verwendet wird -mcorea or -mcoreb, Einzel-
Anwendung/Dual-Core-Programmiermodell verwendet wird. In diesem Modell ist die Hauptfunktion von
Core B sollte coreb_main heißen. Wenn es mit verwendet wird -mcorea or -mcoreb, eins
Anwendung pro Kern-Programmiermodell verwendet wird. Wenn diese Option nicht verwendet wird, einzeln
Kernanwendungsprogrammiermodell verwendet wird.
-mcorea
Eigenständige Anwendung für Core A von BF561 erstellen, wenn eine Anwendung pro Kern verwendet wird
ein Programmiermodell. Zur Unterstützung von Core A werden die richtigen Startdateien und Linkskripts verwendet.
Diese Option definiert "__BFIN_COREA". Es muss mit verwendet werden -mmulticore.
-mcoreb
Eigenständige Anwendung für Core B von BF561 erstellen, wenn eine Anwendung pro Kern verwendet wird
ein Programmiermodell. Zur Unterstützung von Core B werden die richtigen Startdateien und Linkskripts verwendet.
Diese Option definiert "__BFIN_COREB". Wenn diese Option verwendet wird, sollte coreb_main
anstelle von main verwendet. Es muss mit verwendet werden -mmulticore.
-msdram
Eigenständige Anwendung für SDRAM erstellen. Die richtigen Startdateien und Linkskripte werden
verwendet, um die Anwendung in SDRAM zu speichern. Loader sollte SDRAM vor dem Laden initialisieren
die Anwendung in SDRAM. Diese Option definiert "__BFIN_SDRAM".
-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
Legen Sie kleine globale und statische Daten in die .neardata Abschnitt, auf den mit verwiesen wird
"B14" registrieren. Legen Sie kleine nicht initialisierte globale und statische Daten in die .bss Sektion,
das grenzt an die .neardata Sektion. Fügen Sie kleine schreibgeschützte Daten in die .rodata
Sektion. 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. Legen Sie alle initialisierten globalen und statischen Daten in die .fardata Sektion,
und alle nicht initialisierten Daten im .far Sektion. Setzen Sie alle konstanten Daten in die .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 die Wirkung, 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 (keine Optionen) ordnet (beseitigt Anordnungen) für den Stapelrahmen,
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
Stack-Frame, beschreibbare Daten und Konstanten müssen 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 Variable 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, wenn die Option -mcr16c gewählt wird, da die CR16C-Architektur dies nicht tut
Unterstützung des Ferndatenmodells.
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 es entwickelt wurde. Apples GCC auf Darwin schafft
"fette" Dateien, wenn mehrere -Bogen Optionen werden verwendet; es tut dies, indem es den Compiler ausführt oder
mehrfach verlinken und die Ergebnisse zusammenfügen 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, wie -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 von . gültig sind
die Datei, die es generiert, daher können Sie keine 64-Bit-Anweisungen in a einfügen ppc750 Objektdatei.
Der Linker für gemeinsam genutzte Bibliotheken, /usr/bin/libtool, schlägt fehl und gibt einen Fehler aus, wenn Sie gefragt werden
um eine gemeinsam genutzte Bibliothek mit einem weniger restriktiven Untertyp als ihre Eingabedateien zu erstellen (für
zum Beispiel versuchen, a ppc970 Objektdatei in a ppc7400 Bücherei). Der Linker für
ausführbare Dateien, ld, wird der ausführbaren Datei den restriktivsten Untertyp von allen geben
seine 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 "Überschriften" und / oder "PrivateHeader" direkt darin enthaltenes Verzeichnis
das endet in ".Rahmen". Der Name eines Frameworks ist der Name dieses Verzeichnisses
ohne die ".Rahmen". Mit dem Framework verknüpfte Header befinden sich in einem von
diese beiden Verzeichnisse, mit "Überschriften" zuerst gesucht wird. Ein Subframework ist a
Framework-Verzeichnis, das sich im eines Frameworks befindet "Rahmen" Verzeichnis. Enthält von
Subframework-Header können nur in einem Header eines Frameworks erscheinen, das die
Subframework oder in einem gleichgeordneten Subframework-Header. Zwei Subframeworks sind Geschwister, wenn
sie treten im gleichen Rahmen auf. Ein Subframework sollte nicht den gleichen Namen haben wie a
Rahmen wird bei Verstößen eine Warnung ausgegeben. Derzeit ein Unterrahmen
kann keine Subframeworks haben, in Zukunft kann der Mechanismus erweitert werden, um zu unterstützen
Dies. Die Standard-Frameworks finden Sie in "/System/Bibliothek/Frameworks" und
"/Bibliothek/Frameworks". Ein Beispiel-Include sieht aus wie "#include ",
woher Unser Ansatz bezeichnet den Namen des Frameworks und header.h befindet sich im
"PrivateHeader" or "Überschriften" 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-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 Standardeinstellungen für bool damit sizeof(bool)==1. Standardmäßig Größe von (bool) is 4
beim Kompilieren für Darwin/PowerPC und 1 beim Kompilieren für Darwin/x86, also diese 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 Entwicklung geeignet ist. Erforderlich, um gdb zu aktivieren
dynamisch ".o"-Dateien in bereits laufende Programme laden. -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
beim Verlinken 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 wird daran gewöhnt sein
Gleitkommaoperationen ausführen. Es sei denn, sie werden durch Routinen ersetzt, die emulieren
die Gleitkommaoperationen oder so kompiliert, dass solche Emulationen aufgerufen werden
Routinen geben diese Routinen Gleitkommaoperationen aus. Wenn Sie kompilieren
Für eine Alpha ohne Gleitkommaoperationen müssen Sie sicherstellen, dass die Bibliothek
gebaut, 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. Unter DEC Unix hat dies den Effekt, dass
IEEE-konforme mathematische Bibliotheksroutinen werden eingebunden.
-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, wird die
Konstante als Literal und generieren Sie 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 zum Erstellen eines dynamischen Ladeprogramms für gemeinsam genutzte Bibliotheken. Selbst
eine gemeinsam genutzte Bibliothek, muss sie sich im Speicher verlagern, bevor sie die Variablen finden kann
und Konstanten in einem eigenen Datensegment.
-malpha-wie
-mg
Wählen Sie aus, ob Code generiert werden soll, der vom vom Hersteller bereitgestellten Assembler assembliert werden soll
(-malpha-wie) oder vom GNU-Assembler -mg.
-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 war
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 des von Ihnen angegebenen Prozessors aus.
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.
Dezember Alpha/VMS Optionen
Diese -m Optionen sind für die DEC Alpha/VMS-Implementierungen definiert:
-mvms-Rückgabecodes
VMS-Bedingungscodes von main zurückgeben. Die Standardeinstellung ist die Rückgabe einer Bedingung im POSIX-Stil
(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.
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* und
*-*-linux-*android* Ziele.
-muclibc
Verwenden Sie die uClibc C-Bibliothek. Dies ist die Standardeinstellung für *-*-linux-*uclibc* 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.
-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.
-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.
-mSprung in Verzögerung
Füllen Sie Verzögerungsschlitze von Funktionsaufrufen mit unbedingten Sprunganweisungen durch Modifizieren
der Rückgabezeiger für den Funktionsaufruf als Ziel des bedingten Sprungs.
-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
Verwenden Sie GNU ld-spezifische Optionen. Das geht vorbei -geteilt zu ld beim Bauen einer geteilten
Bücherei. Dies ist die Standardeinstellung, wenn GCC explizit oder implizit mit dem
GNU-Linker. Diese Option hat keinen Einfluss darauf, welcher ld aufgerufen wird, sondern nur
ändert, welche Parameter an dieses ld übergeben werden. Das aufgerufene ld wird bestimmt durch
--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`.
Diese Option ist nur auf dem 64-Bit HP-UX GCC verfügbar, dh konfiguriert mit
hppa*64*-*-hpux*.
-mhp-ld
Verwenden Sie HP ld-spezifische Optionen. Das geht vorbei -b zu ld beim Aufbau einer gemeinsam genutzten Bibliothek und
leitet +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 nicht
Jeder Affekt, auf den ld aufgerufen wird, ändert nur die Parameter, die an ihn übergeben werden
lt. Das aufgerufene ld wird bestimmt durch --mit-ld Konfigurationsoption, GCCs
Programmsuchpfad und schließlich durch den Benutzer PATH. Der von GCC verwendete Linker kann
gedruckt mit welche `ggc -print-prog-name=ld`. Diese Option ist nur auf dem
64-Bit HP-UX 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 dies die Leistung beeinträchtigt.
Es kann jedoch in großen Anwendungen nützlich sein, insbesondere wenn die teilweise Verknüpfung
verwendet, um die Anwendung zu 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,
setze und stelle die Variable wieder her __xpg4_extended_mask wie angemessen. 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.
Intel 386 und AMD x86-64 Optionen
Diese -m Optionen sind für die Computerfamilie i386 und x86-64 definiert:
-mtune=CPU-Typ
Stellen Sie ein CPU-Typ alles Zutreffende über den generierten Code, außer dem ABI
und die verfügbaren Anweisungen. Die Auswahl für CPU-Typ sind:
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 Option statt -mtune=generisch. Aber wenn Sie nicht genau wissen, welche CPU
Benutzer Ihrer Anwendung haben, sollten Sie diese Option 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, wird der Code
generierte Option ändert sich, um die Prozessoren widerzuspiegeln, die am häufigsten verwendet wurden, wenn
diese Version von GCC wurde veröffentlicht.
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.
nativen
Dies wählt die CPU aus, auf die zur Kompilierungszeit abgestimmt werden soll, indem der Prozessor bestimmt wird
Art der Compilermaschine. Verwenden von -mtune=einheimisch erzeugt Code optimiert
für die lokale Maschine unter den Beschränkungen des ausgewählten Befehlssatzes.
Die richtigen -marsch=einheimisch aktiviert alle Befehlsuntermengen, die vom lokalen . unterstützt werden
(daher wird das Ergebnis möglicherweise nicht auf verschiedenen Computern ausgeführt).
i386
Original Intel i386-CPU.
i486
Intels i486-CPU. (Für diesen Chip ist kein Scheduling implementiert.)
i586 Pentium
Intel Pentium CPU ohne MMX-Unterstützung.
Pentium-mmx
Intel PentiumMMX-CPU basierend auf Pentium-Kern mit MMX-Befehlssatzunterstützung.
Pentiumpro
Intel PentiumPro-CPU.
i686
Wie "generisch", aber bei Verwendung als "March"-Option, PentiumPro-Befehlssatz
verwendet werden, so dass der Code auf allen Chips der i686-Familie läuft.
Pentium2
Intel Pentium2-CPU basierend auf PentiumPro-Kern mit MMX-Befehlssatzunterstützung.
Pentium3, Pentium3m
Intel Pentium3-CPU basierend auf PentiumPro-Kern mit MMX- und SSE-Befehlssatz
unterstützen.
Pentium-m
Low-Power-Version der Intel Pentium3-CPU mit MMX-, SSE- und SSE2-Befehlssatz
Unterstützung. Wird von Centrino-Notebooks verwendet.
Pentium4, Pentium4m
Intel Pentium4 CPU mit MMX-, SSE- und SSE2-Befehlssatzunterstützung.
Prescott
Verbesserte Version der Intel Pentium4 CPU mit MMX-, SSE-, SSE2- und SSE3-Anweisung
Unterstützung einstellen.
nocona
Verbesserte Version der Intel Pentium4 CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2 und
Unterstützung von SSE3-Befehlssätzen.
core2
Intel Core2-CPU mit 64-Bit-Erweiterungen, MMX-, SSE-, SSE2-, SSE3- und SSSE3-Anweisung
Unterstützung einstellen.
corei7
Intel Core i7 CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 und
Unterstützung von SSE4.2-Befehlssätzen.
corei7-avx
Intel Core i7 CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Unterstützung von SSE4.2, AVX, AES und PCLMUL-Befehlssätzen.
core-avx-i
Intel Core CPU mit 64-Bit-Erweiterungen, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND und F16C Befehlssatzunterstützung.
Atom
Intel Atom CPU mit 64-Bit-Erweiterungen, MMX-, SSE-, SSE2-, SSE3- und SSSE3-Anweisung
Unterstützung einstellen.
k6 AMD K6 CPU mit MMX-Befehlssatzunterstützung.
k6-2, k6-3
Verbesserte Versionen der AMD K6 CPU mit MMX und 3DNow! Befehlssatzunterstützung.
athlet, 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
AMD K8-Core-basierte CPUs mit Unterstützung für x86-64-Befehlssätze. (Dies überlagert MMX,
SSE, SSE2, 3DNow!, erweitertes 3DNow! und 64-Bit-Befehlssatzerweiterungen.)
k8-sse3, opteron-sse3, athlon64-sse3
Verbesserte Versionen von k8, opteron und athlon64 mit SSE3-Befehlssatzunterstützung.
amdfam10, Barcelona
CPUs der AMD-Familie 10h-Core 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 der AMD-Familie 15h-Core 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, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM und 64-Bit-Befehlssatzerweiterungen.)
btver1
CPUs der AMD-Familie 14h-Core mit Unterstützung für x86-64-Befehlssätze. (Dies
Supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM und 64-Bit-Befehlssatz
Erweiterungen.)
winchip-c6
IDT Winchip C6 CPU, wie i486 mit zusätzlichem MMX-Befehlssatz
unterstützen.
winchip2
IDT Winchip2 CPU, wie i486 mit zusätzlichem MMX und 3DNow!
Befehlssatzunterstützung.
c3 Über C3-CPU mit MMX und 3DNow! Befehlssatzunterstützung. (Keine Terminplanung ist
für diesen Chip implementiert.)
c3-2
Über C3-2 CPU mit MMX- und SSE-Befehlssatzunterstützung. (Keine Terminplanung ist
für diesen Chip implementiert.)
Geode
Embedded AMD CPU mit MMX und 3DNow! Befehlssatzunterstützung.
Bei der Auswahl eines bestimmten CPU-Typ werde die Dinge entsprechend planen
bestimmten Chip erzeugt der Compiler keinen Code, der nicht auf dem
Standardmaschinentyp ohne die -marsch=CPU-Typ Option verwendet wird. Zum Beispiel, wenn
GCC ist dann für i686-pc-linux-gnu konfiguriert -mtune=pentium4 wird Code generieren, der
ist auf Pentium4 abgestimmt, läuft aber weiterhin auf i686-Rechnern.
-marsch=CPU-Typ
Anweisungen für den Maschinentyp generieren CPU-Typ. Die Auswahl für CPU-Typ sind die
das gleiche wie für -munt. Darüber hinaus ist die Angabe -marsch=CPU-Typ impliziert -mtune=CPU-Typ.
-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 den i386-Compiler.
sse Verwenden Sie skalare Gleitkommabefehle, die im SSE-Befehlssatz vorhanden sind. Dies
Befehlssatz wird von Pentium3 und neueren Chips unterstützt, in der AMD-Reihe von
Athlon-4-, Athlon-xp- und Athlon-mp-Chips. Die frühere Version der SSE-Anweisung
set unterstützt nur einfache Arithmetik, also die doppelte und erweiterte
Präzisionsarithmetik wird immer noch mit 387 durchgeführt. Eine spätere Version, nur in
Pentium4 und die zukünftigen AMD x86-64-Chips unterstützen Double-Precision-Arithmetik
Auch.
Für den i386-Compiler müssen Sie -marsch=CPU-Typ, -miss or -msse2 Switches
um SSE-Erweiterungen zu aktivieren und diese Option wirksam zu machen. 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 einer instabilen Leistung führt.
-masm=Dialekt
ASM-Anweisungen mit ausgewählten . ausgeben Dialekt. Unterstützte Auswahlmöglichkeiten sind Intel or zu
(die Standardeinstellung). 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: das Erfordernis
Bibliotheken sind nicht Bestandteil von GCC. Normalerweise sind die Einrichtungen des maschinenüblichen C
Compiler verwendet werden, dies kann jedoch nicht direkt bei der Kreuzkompilierung erfolgen. Du musst
eigene Vorkehrungen treffen, um geeignete Bibliotheksfunktionen für Cross-
Zusammenstellung.
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 FreeBSD, OpenBSD und NetBSD. Diese Option wird überschrieben, wenn -März
zeigt an, dass die Ziel-CPU immer über eine FPU verfügt und der Befehl daher nicht
Emulation brauchen. Ab Revision 2.6.1 werden diese Anweisungen nur generiert, wenn Sie
Verwenden Sie 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 a etwas schneller läuft Pentium auf Kosten von mehr
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
wird anders ausgerichtet als die Binärschnittstelle der veröffentlichten Anwendung
Spezifikationen für den 386 und sind nicht binärkompatibel mit Strukturen im Code
ohne diesen Schalter kompiliert.
-m96bit-long-double
-m128bit-long-double
Diese Schalter steuern die Größe des Typs "Long Double". Die Binärdatei der i386-Anwendung
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 werden soll.
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, werden die Strukturen und
Arrays, die "long double"-Variablen enthalten, ändern sowohl ihre Größe als auch ihre Funktion
Aufrufkonvention für Funktion mit "long double" wird geändert. Daher sie
ist nicht binärkompatibel mit Arrays oder Strukturen in Code, der ohne dies kompiliert wurde
Schalter.
-mlarge-data-threshold=Anzahl
Wann -mcmodel=mittel angegeben ist, sind die Daten größer als Schwelle sind groß angelegt
Datenabschnitt. Dieser Wert muss für alle mit der Binärdatei verknüpften Objekte gleich sein
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" zurückgegeben werden num 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 Aufrufe dieser Funktionen.
Darüber hinaus führt der Aufruf einer Funktion mit zu vielen zu stark fehlerhaftem Code
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
seregparm.
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 Intel x86 ist die -mstackrealign Option generiert
ein alternativer Prolog und Epilog, der den Laufzeitstapel bei Bedarf neu ausrichtet.
Dies unterstützt das Mischen von Legacy-Codes, die einen 4-Byte-ausgerichteten Stapel mit modernen Codes beibehalten
die einen 16-Byte-Stack für SSE-Kompatibilität beibehalten. 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 zur 8-Byte-Grenze. Sie müssen alle Module mit erstellen -mpreferred-stack-boundary=3,
einschließlich aller Bibliotheken. Dazu gehören 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 werden verwendet.
Bei Pentium und PentiumPro sollten die Werte "double" und "long double" an einem
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 wird den Stapel höchstwahrscheinlich falsch ausrichten. 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
-mno-mmx
-miss
-mno-se
-msse2
-mno-sse2
-msse3
-mno-sse3
-mssse3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-avx
-Mavx2
-mno-avx2
-maes
-mno-ae
-mpclmul
-mno-pclmul
-MFSGSBASE
-mno-fsgsbase
-mrdrnd
-mno-rdrnd
-Mf16c
-mno-f16c
-mfma
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-mabm
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-MTBM
-mno-tbm
Diese Schalter aktivieren oder deaktivieren die Verwendung von Anweisungen in MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT oder 3DNow!
erweiterte Befehlssätze. Diese Erweiterungen sind auch als Built-in verfügbar
Funktionen: siehe X86 Eingebaut Funktionen, für Einzelheiten zu den aktivierten Funktionen und
durch diese Schalter deaktiviert.
Um SSE/SSE2-Anweisungen automatisch aus Gleitkommacode generieren zu lassen (wie
im Gegensatz zu 387 Anweisungen), 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 im generierten Code zu verwenden.
auch ohne -mfpmath=sse. Anwendungen, die Laufzeit-CPU-Erkennung durchführen, müssen
Kompilieren Sie separate Dateien für jede unterstützte Architektur, indem Sie die entsprechenden Flags verwenden.
Insbesondere sollte die Datei mit dem CPU-Erkennungscode ohne kompiliert werden
diese Optionen.
-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 die Übergangsstrafe von AVX zu SSE zu minimieren sowie
Entfernen Sie unnötige intrinsische Zeroupper.
-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, den Befehl CMPXCHG16B im generierten Code zu verwenden.
CMPXCHG16B ermöglicht atomare Operationen an 128-Bit-Doppel-Quadword- (oder Oword-)Daten
Typen. Dies ist nützlich für Zähler mit hoher Auflösung, die um mehrere aktualisiert werden könnten
Prozessoren (oder Kerne). Diese Anweisung wird als Teil von Atomic Built-in generiert
Funktionen: siehe __sync Eingebaute or __atomar Eingebaute .
-msahf
Diese Option ermöglicht es GCC, den SAHF-Befehl in generiertem 64-Bit-Code zu verwenden. Früh
Intel-CPUs mit Intel 64 fehlten LAHF- und SAHF-Anweisungen, die von AMD64 unterstützt wurden, bis
Einführung des Pentium 4 G1-Schritts im Dezember 2005. LAHF und SAHF sind Laden und Speichern
Anweisungen für bestimmte Status-Flags. Im 64-Bit-Modus, SAHF
Anweisung wird verwendet, um eingebaute Funktionen von "fmod", "drem" oder "remainder" zu optimieren: siehe
Andere Eingebaute .
-mmovbe
Diese Option ermöglicht es GCC, die movbe-Anweisung zu verwenden, um "__builtin_bswap32" zu implementieren.
und "__builtin_bswap64".
-mcrc32
Diese Option aktiviert die integrierten Funktionen "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" und "__builtin_ia32_crc32di" zu
Generieren Sie die Maschinenanweisung crc32.
-mrecip
Mit dieser Option kann GCC RCPSS- und RSQRTSS-Anweisungen (und deren
vektorisierte Varianten RCPPS und RSQRTPS) mit einem zusätzlichen Newton-Raphson-Schritt zu
Erhöhen Sie die Präzision anstelle von DIVSS und SQRTSS (und ihren vektorisierten Varianten) für
Gleitkommaargumente mit einfacher Genauigkeit. 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
Mit dieser Option können Sie steuern, welche Anweisungen zur gegenseitigen Schätzung verwendet werden dürfen. wählen
ist eine durch Kommas getrennte Liste von Optionen, denen ein "!" die umkehren
Option: "all": alle Schätzungsanweisungen aktivieren, "default": Standardeinstellung aktivieren
Anweisungen, äquivalent zu -mrecip, "keine": alle Schätzungsanweisungen deaktivieren,
entspricht -mno-rezept, "div": aktiviert die Approximation für die Skalardivision,
"vec-div": aktiviert die Approximation für die vektorisierte Division, "sqrt": aktiviert die
Approximation für skalare Quadratwurzel, "vec-sqrt": aktiviert die Approximation für
vektorisierte Quadratwurzel.
Also zum Beispiel, -mrecip=alle,!sqrt würde alle gegenseitigen Näherungen ermöglichen,
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 Typen sind "svml" für die Intel Short Vector Math Library und "acml" für die
Schnittstellenart der AMD Math-Core-Bibliothek. GCC sendet derzeit Anrufe 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
entsprechender Funktionstyp, wenn -mveclibabi=svml verwendet wird 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 entsprechenden Funktionstyp, wenn
-mveclibabi=acml wird genutzt. Beide -ftree-vektorisieren und -funsafe-mathematik-optimierungen haben
aktiviert werden. Eine SVML- oder ACML-ABI-kompatible Bibliothek muss unter Link angegeben werden
Zeit.
-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. Der Standard
besteht darin, die Microsoft ABI zu verwenden, wenn Sie auf Windows abzielen. Auf allen anderen Systemen ist die Standardeinstellung
ist die SYSV-ABI. Sie können dieses Verhalten für eine bestimmte Funktion steuern, indem Sie die
Funktionsattribut ms_abi/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, beträgt der maximale Speicherplatzbedarf für ausgehende Argumente
im Funktionsprolog berechnet. Dies ist auf den meisten modernen CPUs schneller, da
reduzierte Abhängigkeiten, verbessertes Scheduling und reduzierte Stack-Nutzung beim bevorzugten Stack
Boundary ist nicht gleich 2. Der Nachteil ist eine merkliche Zunahme der Codegröße. Dies
Schalter impliziert -mno-push-args.
-m Threads
Thread-sichere Ausnahmebehandlung unterstützen auf Mingw32. Code, der auf Thread-sicher basiert
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 das bereinigt pro Thread Ausnahmebehandlungsdaten.
-mno-align-stringops
Richten Sie das Ziel von Inline-String-Operationen nicht aus. Dieser Schalter reduziert die Codegröße
und verbessert die Leistung für den Fall, dass das Ziel bereits ausgerichtet ist, GCC dies jedoch nicht tut
davon wissen.
-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, erhöht die Codegröße,
kann aber die Leistung von Code verbessern, der von schnellem memcpy, strlen und memset abhängt
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 einen bestimmten Algorithmus in einen Inline-String
Betrieb mit. Die zulässigen Werte sind "rep_byte", "rep_4byte", "rep_8byte" für
Erweitern mit i386 "rep"-Präfix der angegebenen Größe, "byte_loop", "loop",
"unrolled_loop" zum Erweitern der Inline-Schleife, "libcall" zum ständigen Erweitern der Bibliothek
Anruf.
-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.
-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 legal 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 GNU libc verwenden, ist die Voreinstellung 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 Profiling aktiv ist -S Stellen Sie den Profiling-Zähleraufruf vor den Prolog. Hinweis: Ein
x86-Architekturen ist das Attribut "ms_hook_prologue" derzeit nicht möglich für
-Mfentry und -S.
-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.
Diese -m Switches werden zusätzlich zu den oben genannten auf AMD x86-64-Prozessoren unterstützt in
64-Bit-Umgebungen.
-m32
-m64
-MX32
Generieren Sie Code für eine 32-Bit- oder 64-Bit-Umgebung. Die -m32 Option setzt int, long und
Zeiger auf 32 Bit und generiert Code, der auf jedem i386-System läuft. Die -m64 zu erhalten
setzt int auf 32 Bit und long und Pointer auf 64 Bit und generiert Code für AMDs
x86-64-Architektur. Die -MX32 Option setzt int, long und pointer auf 32 Bit und
generiert Code für die x86-64-Architektur von AMD. Für Darwin nur die -m64 Option dreht
aus der -fno-pic und -mdynamic-no-pic Optionen.
-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 Stack-Zeigers, der
nicht durch Signal- oder Interrupt-Handler modifiziert werden und daher verwendet werden können für
temporäre Daten, ohne den Stack-Pointer 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ß
Code für das große Modell generieren: 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.
i386 und x86-64 Windows Optionen
Diese zusätzlichen Optionen sind für Windows-Ziele verfügbar:
-mconsole
Diese Option ist für Cygwin- und MinGW-Ziele verfügbar. Es gibt an, dass eine Konsole
Anwendung generiert werden soll, indem der Linker angewiesen wird, den PE-Header zu setzen
Subsystemtyp, der für Konsolenanwendungen erforderlich ist. Dies ist das Standardverhalten für
Cygwin- und MinGW-Ziele.
-mdll
Diese Option ist für Cygwin- und MinGW-Ziele verfügbar. Es gibt an, dass eine DLL - a
Dynamic Link Library - ist zu generieren, 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
dllimport-Attribut 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 gibt an, dass das UNICODE-Makro
vordefiniert wird und der Unicode-fähige Runtime-Startcode gewählt wird.
-mwin32
Diese Option ist für Cygwin- und MinGW-Ziele verfügbar. Es legt fest, dass die typischen
Vordefinierte Windows-Makros sind im Präprozessor zu setzen, haben aber keinen Einfluss
die Wahl der Laufzeitbibliothek/des Startcodes.
-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 Stapel ist nicht festgelegt. Dies ist für Binärdateien erforderlich, die in ausgeführt werden
Kernel-Modus von Windows, da es die user32-API gibt, die verwendet wird, um ausführbare Dateien zu setzen
Privilegien, ist nicht verfügbar.
-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 wird standardmäßig aktiviert, wenn GCC erkennt
dass der während der Konfiguration gefundene Zielassembler das Feature unterstützt.
Siehe auch unter i386 und x86-64 Optionen für Standardoptionen.
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
Generiere (oder tue) keinen Assembler-Code für die DWARF2-Zeilennummer-Debugging-Informationen. 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,
itanium1, merced, itanium2 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 zu
Generierung der ld.a-Anweisungen und der entsprechenden Prüfanweisungen (ld.c /
chk.a). Die Standardeinstellung ist 'deaktivieren'.
-msched-ar-data-spec
-mno-sched-ar-data-spec
(Aktivieren/Deaktivieren) spekulatives Daten-Scheduling nach dem Neuladen. Dies führt zur Generation
der ld.a-Anweisungen und der 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 des 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 diese Option aktiviert ist, werden datenspekulative Anweisungen nur dann für den Zeitplan ausgewählt, wenn es
gibt es im Moment keine andere Wahl. Dies wird die Datenspekulation nutzen
viel konservativer. Die Standardeinstellung ist 'deaktivieren'.
-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Wenn aktiviert, werden spekulative Kontrollanweisungen nur dann für den Zeitplan ausgewählt, wenn es
gibt es im Moment keine andere Wahl. Damit wird die Kontrollspekulation ausgenutzt
viel konservativer. 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 wird die Spekulation ein bisschen mehr nutzen
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
Verbieten Sie mehr als `msched-max-memory-insns' in der Befehlsgruppe. Ansonsten begrenzen
ist "weich", was bedeutet, dass wir Nicht-Speicher-Operationen bevorzugen würden, wenn das Limit erreicht ist, aber
kann noch Speicheroperationen planen.
IA-64/VMS Optionen
Diese -m Optionen sind für die IA-64/VMS-Implementierungen definiert:
-mvms-Rückgabecodes
VMS-Bedingungscodes von main zurückgeben. Die Standardeinstellung ist die Rückgabe einer Bedingung im POSIX-Stil
(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.
LM32 Optionen
Diese -m Optionen sind für die Lattice Mico32-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 des Codes verwendet
Generation. Diese Pseudoregister werden wie echte Register verwendet, daher gibt es
Kompromiss zwischen der Fähigkeit von GCC, den Code in verfügbare Register einzupassen, und den
Leistungseinbußen bei der Verwendung von Speicher anstelle von Registern. Beachten Sie, dass alle Module in a
Programm muss mit dem gleichen Wert für diese Option kompiliert werden. Aus diesem Grund bist du
darf diese Option nicht mit den Standard-Laufzeitbibliotheken-gcc-Builds verwenden.
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 auch
.rodata (es sei denn, das Attribut "section" wurde angegeben). Dies ist die Standardeinstellung.
Der kleine Datenbereich besteht aus Abschnitten .sdata und .sbss. Objekte können explizit sein
in den kleinen Datenbereich mit dem Attribut "Abschnitt" mit einem dieser Abschnitte 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 Zweige bevorzugt
Bedingungscode, wenn es 2 ist, 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 ist
erhältlich.
-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__ wenn es Code für ein ColdFire-Ziel generiert.
Die 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 51cn 51em 51qe
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_CPU 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 durch -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 für eine Reihe von Architekturen optimiert wird, 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 Aufrufe dieser Funktionen.
Darüber hinaus führt der Aufruf einer Funktion mit zu vielen zu stark fehlerhaftem Code
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 wechseln, richtet GCC Strukturen aus, die die
obige Typen unterscheiden sich von den meisten veröffentlichten Anwendungsbinärschnittstellen
Spezifikationen für den 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 die Ausführung an Ort und Stelle und gemeinsam genutzte Bibliotheken 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 einen kompakteren Code, die Angabe anderer Werte wird
erzwingt die Zuordnung dieser Nummer zur aktuellen Bibliothek, aber es ist kein Platz mehr vorhanden oder
zeiteffizienter 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 - Mittelwert, 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 im Abschnitt ".based" platziert von
Ursprünglich. Basierende Variablen verwenden das $tp-Register als Basisregister, und es gibt a
128-Byte-Grenze für den 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 welche Abschnittskonstantendaten platziert werden. Name kann "winzig", "in der Nähe" oder . sein
"weit".
-McLip
Aktiviert die Anweisung "clip". Beachten Sie, dass "-mclip" nur dann nützlich ist, wenn Sie auch
Geben Sie "-mminmax" an.
-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 "default".
-mcop
Aktiviert die Coprozessor-Anweisungen. Standardmäßig ist dies ein 32-Bit-Coprozessor. Notiz
dass der Coprozessor normalerweise über die Option "-mconfig=" aktiviert wird.
-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 "-mall-opts" aktiviert werden.
-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 Simulator-Laufzeitbibliotheken.
-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 weniger 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 Funktionen von und planen Sie Code für eine bestimmte CPU. Unterstützte Werte haben das Format
vX.YY.Z, Wobei X ist eine Hauptversion, YY ist die Nebenversion, und Z ist kompatibel
Code. 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 Sie stattdessen -fstack-check.
-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.
-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 soll 0x800 sein.
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, mips64 und mips64r2. 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, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1,
1004kf1_1, longson2e, longson2f, longson3a, m4k, Okteon, Okteon+, Octeon2, Orion,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 und xlr. Der besondere Wert von-abi wählt das kompatibelste aus
Architektur für die ausgewählte ABI (d. h. mips1 für 32-Bit-ABIs und mips3 für 64-Bit
ABI).
Native Linux/GNU- und IRIX-Toolchains unterstützen ebenfalls den Wert nativen, die die . auswählt
beste Architekturoption für den Hostprozessor. -marsch=einheimisch hat keine Wirkung, wenn GCC
erkennt den Prozessor nicht.
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. Das erste ist _MIPS_ARCH,
was den Namen der Zielarchitektur als String angibt. Die zweite hat die Form
_MIPS_ARCH_foo, Wobei foo ist der kapitalisierte Wert von _MIPS_ARCH. Beispielsweise,
-marsch=r2000 wird einstellen _MIPS_ARCH zu "r2000" und definiere das Makro _MIPS_ARCH_R2000.
Beachten Sie, dass die _MIPS_ARCH Makro verwendet die oben angegebenen Prozessornamen. Mit anderen Worten,
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" or "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 die Nutzung -März und -munt zusammen ist es möglich, Code zu generieren, der auf
eine Familie von Prozessoren, aber optimieren Sie den Code für ein bestimmtes Mitglied davon
Familie.
-munt definiert die Makros _MIPS_TUNE und _MIPS_TUNE_foo, die genauso funktionieren wie
-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.
-mips32r2
Gleichwertig -march=mips32r2.
-Mips64
Gleichwertig -marsch=mips64.
-mips64r2
Gleichwertig -march=mips64r2.
-Mips16
-mno-mips16
Generieren (nicht generieren) MIPS16-Code. Wenn GCC auf MIPS32 oder MIPS64 abzielt
Architektur wird es die MIPS16e ASE verwenden.
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-mips16
-mno-interlink-mips16
Erfordern (nicht erforderlich), dass Nicht-MIPS16-Code mit MIPS16-Code verbindungskompatibel ist.
Nicht-MIPS16-Code kann beispielsweise nicht direkt zu MIPS16-Code springen; es muss entweder a . verwenden
Aufruf oder ein indirekter Sprung. -minterlink-mips16 deaktiviert daher direkte Sprünge, es sei denn
GCC weiß, dass das Sprungziel nicht MIPS16 ist.
-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
stützt sich auf die mthc1 und mfhc1 Anleitung und wird daher nur unterstützt für
MIPS32R2-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 ebenfalls gleich, aber alle 64 Bits
werden gespeichert.
-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 werden wir
machen 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, funktioniert es nur, wenn die GOT kleiner als etwa 64k ist.
Alles, was größer ist, 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. Dann sollte es funktionieren mit
sehr große GOTs, obwohl es auch weniger effizient sein wird, da es drei dauert
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.
-mhard-float
Verwenden Sie Gleitkomma-Koprozessoranweisungen.
-msoft-float
Verwenden Sie keine Gleitkomma-Koprozessoranweisungen. Gleitkommazahlen implementieren
Berechnungen stattdessen mit Bibliotheksaufrufen.
-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.
-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 die
Zielarchitektur 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äprozessor-Makro __mips_dsp. Es definiert auch
__mips_dsp_rev um 1.
-mdspr2
-mno-dspr2
Verwenden (nicht verwenden) Revision 2 der MIPS DSP ASE.
Diese Option definiert die Präprozessormakros __mips_dsp und __mips_dspr2. Außerdem
definiert __mips_dsp_rev um 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.
-MMT
-mno-mt
Verwenden (nicht verwenden) MT-Multithreading-Anweisungen.
-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 effizienter auf die Daten zugreifen; sehen -mgpopt für
Details.
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
Angenommen (nicht annehmen), dass extern definierte Daten in einem kleinen Datenabschnitt liegen, wenn
diese Daten sind 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, Programme, die Boot-Monitor-Routinen aufrufen, übergeben einen unbekannten Wert in $gp.
(In solchen Situationen würde der Bootmonitor selbst normalerweise mit kompiliert werden - 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. Der Standard
is -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.
-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.
Bei Verwendung von Multiplikations-Akkumulations-Anweisungen wird das Zwischenprodukt berechnet
auf unendliche Genauigkeit und unterliegt nicht dem FCSR Flush to Zero-Bit. Das mag sein
unter Umständen unerwünscht.
-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-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 eines Nop zwischen bestimmten Paaren 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 anstelle 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 war. 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 Handbuch des R10K-Prozessors
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 or __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 wirkt sich darauf aus, wie wir FP planen
Anweisungen für einige Prozessoren. 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, wird GCC
Anweisungspaare ausrichten, von denen es glaubt, 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()" wird kompiliert.
Diese Option ist standardmäßig "-mno-synci", aber der Standard kann durch Konfigurieren überschrieben werden
mit "--mit-synci".
Beim Kompilieren von Code für Einprozessorsysteme ist es im Allgemeinen sicher, "synci" zu verwenden.
Auf vielen Multi-Core-Systemen (SMP) wird 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" ist 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:
· Zurückgeben 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 würden zu Fehlern führen. 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äprozessor-Makro __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__.
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
auf einem der anderen AE-Typen laufen. Der Code wird nicht so effizient sein, wie er wäre, wenn
kompiliert für einen bestimmten AE-Typ und einige Operationsarten (z. B. Multiplikation)
funktioniert nicht bei allen AE-Typen richtig.
-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 vorhanden ist
Gebraucht. Die Ergebnisse variieren jedoch von Programm zu Programm, daher bleibt es einem Benutzer überlassen
Option, 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 es wird eine Warnung generiert, die den
Programmierer, dass sie den Code neu schreiben sollten, um Byte-Operationen zu vermeiden oder um
AE-Typ, der über die erforderliche Hardwareunterstützung verfügt. Mit dieser Option kann die Warnung
ausgeschaltet werden.
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", die Software-Multiplikationsfunktionen verwendet. Die Option "g13" ist für die
Hardware multiplizieren/dividieren Sie nur Peripheriegeräte auf den RL78/G13-Targets. Die Option "rl78"
ist für die Standard-Hardware-Multiplikation, die im RL78-Softwarehandbuch definiert ist.
IBM RS / 6000 und PowerPC Optionen
Diese -m Optionen sind für IBM RS/6000 und PowerPC definiert:
-Macht
-mno-macht
-Macht2
-mno-power2
-mpowerpc
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-Mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
GCC unterstützt zwei verwandte Befehlssatzarchitekturen für RS/6000 und PowerPC.
Die MagXNUMX Befehlssatz sind die Befehle, die von der Flüsse Chipsatz gebraucht
in den ursprünglichen RS/6000-Systemen und den PowerPC Befehlssatz ist die Architektur von
die Freescale-Mikroprozessoren MPC5xx, MPC6xx, MPC8xx und die IBM 4xx, 6xx und
Nachfolge-Mikroprozessoren.
Keine Architektur ist eine Teilmenge der anderen. Es gibt jedoch eine große gemeinsame Untermenge
von beiden unterstützten Anweisungen. Ein MQ-Register ist in Prozessoren enthalten
Unterstützung der POWER-Architektur.
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.
Die -Macht Option ermöglicht es GCC, Anweisungen zu generieren, die nur im
POWER-Architektur und die Verwendung des MQ-Registers. Angabe -Macht2 impliziert -Macht und
ermöglicht es GCC auch, Anweisungen zu generieren, die in der POWER2-Architektur vorhanden sind
aber nicht die ursprüngliche POWER-Architektur.
Die -mpowerpc Option ermöglicht es GCC, Anweisungen zu generieren, die nur im
32-Bit-Teilmenge der PowerPC-Architektur. Angabe -mpowerpc-gpopt impliziert
-mpowerpc und ermöglicht GCC auch die Verwendung der optionalen PowerPC-Architekturanweisungen in
die Gruppe "Allgemeine Zwecke", einschließlich der Gleitkomma-Quadratwurzel. Angabe
-mpowerpc-gfxopt impliziert -mpowerpc und ermöglicht GCC auch die Verwendung des optionalen PowerPC
Architekturanweisungen 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.
Wenn Sie beide angeben -mno-macht und -mno-powerpc, GCC verwendet nur die Anweisungen in
die gemeinsame Teilmenge beider Architekturen plus einige spezielle AIX-Common-Mode-Aufrufe und
wird das MQ-Register nicht verwenden. Beides angeben -Macht und -mpowerpc lässt GCC zu
einen beliebigen Befehl von einer der beiden Architekturen zu verwenden und die Verwendung des MQ-Registers zu ermöglichen;
geben Sie dies für das Motorola MPC601 an.
-mnew-mnemonik
-Schimmel-Mnemonik
Wählen Sie aus, welche Mnemonik im generierten Assemblercode verwendet werden soll. Mit -mnew-mnemonik,
GCC verwendet die Assembler-Mnemonik, die für die PowerPC-Architektur definiert ist. Mit
-Schimmel-Mnemonik es verwendet die Assembler-Mnemonik, die für die POWER-Architektur definiert ist.
Anweisungen, die in nur einer Architektur definiert sind, haben nur eine Mnemonik; GCC verwendet das
mnemonik unabhängig davon, welche dieser Optionen angegeben ist.
GCC verwendet standardmäßig die Mnemonik, die für die verwendete Architektur geeignet ist. Angabe
-mcpu=CPU_Typ überschreibt manchmal den Wert dieser Option. Es sei denn du baust
einen Cross-Compiler, sollten Sie normalerweise auch nicht angeben -mnew-mnemonik or
-Schimmel-Mnemonik, sondern sollte stattdessen die Standardeinstellung akzeptieren.
-mcpu=CPU_Typ
Legen Sie den Architekturtyp, die Registernutzung, die Auswahl der Mnemonik und die Befehlsplanung fest
Parameter 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, ec603e, G3, G4, G5, Titan, Werkzeuge, power2, power3, power4, power5,
Leistung5+, power6, Leistung6x, power7, verbreitet, PowerPC, powerpc64, Flüsse, rios1, rios2, rsc,
und rs64.
-mcpu=allgemein wählt einen vollständig generischen Prozessor aus. Unter dieser Option generierter Code
läuft auf jedem POWER- oder PowerPC-Prozessor. GCC verwendet nur die Anweisungen in der
gemeinsame Teilmenge beider Architekturen und verwendet das MQ-Register nicht. GCC geht davon aus, dass a
generisches Prozessormodell für Planungszwecke.
-mcpu=Leistung, -mcpu=power2, -mcpu=powerpc und -mcpu=powerpc64 generische POWER angeben,
POWER2, reine 32-Bit-PowerPC-Architektur (dh nicht MPC601) und 64-Bit-PowerPC-Architektur
Maschinentypen, wobei ein geeignetes, generisches Prozessormodell für die Planung angenommen wird
Zwecke.
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 -mnew-mnemonik -mpopcntb
-mpopcntd -Macht -Macht2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-float -mdouble-float -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx
Die bestimmten 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, die Registernutzung oder die Wahl der Mnemonik, sowie -mcpu=CPU_Typ
möchten. Die gleichen Werte für CPU_Typ werden verwendet für -munt wie für -mcpu. Wenn beides ist
angegeben, verwendet der generierte Code die Architektur, Register und Mnemonik-Sets
by -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.
-mvrsave
-mno-vrsave
Generieren Sie VRSAVE-Anweisungen, wenn Sie AltiVec-Code generieren.
-mgen-cell-microcode
Generieren Sie Zellen-Mikrocode-Anweisungen
-mwarn-cell-Mikrocode
Warnung, wenn ein Cell-Mikrocode-Befehl ausgegeben wird. Ein Beispiel für eine Zelle
Mikrocode-Befehl ist eine variable Verschiebung.
-msecure-plt
Generieren Sie Code, mit dem ld und ld.so ausführbare Dateien und gemeinsam genutzte Bibliotheken erstellen können
nicht-exec .plt- und .got-Abschnitte. Dies ist eine PowerPC 32-Bit SYSV ABI-Option.
-mbss-plt
Generieren Sie Code, der einen BSS-.plt-Abschnitt verwendet, den ld.so ausfüllt und der .plt und . erfordert
.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.
-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
weist jeder eindeutigen nichtautomatischen Variablenreferenz mindestens einen TOC-Eintrag zu
in Ihrem Programm. GCC fügt auch Gleitkommakonstanten in das Inhaltsverzeichnis ein. Jedoch,
Im Inhaltsverzeichnis sind nur 16,384 Einträge 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 ist und
größer, benötigt aber extrem wenig TOC-Platz. Möglicherweise möchten Sie diese Option nutzen
nur für 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 und
-mpowerpc, während -maix32 deaktiviert die 64-Bit-ABI und impliziert -mno-powerpc64. GCC
Standardmäßig ist -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
Geben Sie den Typ der Gleitkommaeinheit an. Gültige Werte sind sp_lite (gleichwertig
-msingle-float -msimple-fpu), dp_lite (entspricht -mdouble-float -msimple-fpu),
sp_voll (entspricht -msingle-float) und dp_voll (entspricht -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
Wird standardmäßig generiert, wenn diese Prozessoren als Ziel ausgewählt werden.
-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
gezielt 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/2 zuweisen nein/höchste/zweithöchste Priorität für den Dispatch-Slot eingeschränkt
Anweisungen.
-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 kostspielig,-
true_store_to_load: eine echte Abhängigkeit vom Laden zum Laden ist kostspielig, store_to_load: irgendein
Die Abhängigkeit vom Laden zur Ladung ist kostspielig, Anzahl: jede Abhängigkeit, für die Latenz >=
Anzahl ist teuer.
-Minsert-gesteuerte Nops =Schema
Diese Option steuert, welches Nop-Einfügungsschema während der zweiten verwendet wird
Planungsdurchlauf. Das Argument Schema nimmt einen der folgenden Werte an: nicht: Nicht
Nops einfügen. Unterlage: Füllen Sie alle Dispatch-Gruppen, die freie Issue-Slots haben, mit Nops auf.
entsprechend der Gruppierung des Planers. regroup_exact: Nops einfügen, um kostspielig zu erzwingen
abhängige Insns in separate Gruppen. Fügen Sie genau so viele Knoten ein, wie zum Erzwingen erforderlich sind
ein insn zu einer neuen Gruppe, entsprechend der geschätzten Prozessorgruppierung. Anzahl: Einfügen
nops, um kostspielige abhängige Gasthöfe in getrennte Gruppen zu zwingen. Einfügung Anzahl nops zu
Erzwinge ein Insn für eine neue Gruppe.
-mcall-sysv
Auf System V.4 und eingebetteten PowerPC-Systemen kompilieren Sie Code unter Verwendung von Aufrufkonventionen, die
hält sich an den Entwurf des System V Application Binary Interface, PowerPC, vom März 1995
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.
-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 die Booke SPE ABI-Erweiterungen für das 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.
-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 prototypischen Aufruf zum Setzen oder Löschen von Bit 6 des Bedingungscoderegisters
(CR), um anzugeben, ob Gleitkommawerte im Gleitkomma übergeben wurden
registriert, falls die Funktion variable Argumente verwendet. Mit -mprototyp, nur Anrufe
Bei prototypisierten Variablenargumentfunktionen wird das Bit gesetzt oder gelöscht.
-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
Stellen Sie auf eingebetteten PowerPC-Systemen die PPC_EMB Bit 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 Änderungen am System V.4
Spezifikationen. Auswählen -meabi bedeutet, dass der Stack auf ein 8-Byte ausgerichtet ist
Grenze, eine Funktion „__eabi“ wird 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 Stapel an einer 16-Byte-Grenze ausgerichtet ist
Rufen Sie keine Initialisierungsfunktion von „main“ auf und die -msdaten Option wird nur verwendet
"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 .sdata2 Abschnitt, auf den das Register "r2" zeigt. klein setzen
initialisierte nicht-"const" globale und statische Daten im .sdata Abschnitt, der spitz ist
nach Register "r13". Legen Sie kleine nicht initialisierte globale und statische Daten in die .sbss
Abschnitt, der neben dem .sdata Sektion. Die -msdata=eabi Option 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
.sdata Abschnitt, auf den das Register "r13" zeigt. Setzen Sie kleine nicht initialisierte globale
und statische Daten im .sbss Abschnitt, der neben dem .sdata 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
Legen Sie auf System V.4 und eingebetteten PowerPC-Systemen kleine globale Daten in die .sdata
Sektion. Legen Sie kleine nicht initialisierte globale Daten in die .sbss Sektion. 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 das .data
Abschnitt und alle nicht initialisierten Daten im .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
Standardmäßig wird davon ausgegangen, dass alle Anrufe weit entfernt sind, so dass ein längerer Anruf teurer ist
Reihenfolge erforderlich ist. Dies ist für Anrufe mit mehr als 32 Megabyte erforderlich
(33,554,432 Bytes) 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
„Zweiginsel“ (Klebecode). Die beiden Zieladressen repräsentieren den Angerufenen und den
„Zweiginsel“. Der Darwin/PPC-Linker bevorzugt die erste Adresse und generiert eine
„bl callee“, wenn die PPC-Anweisung „bl“ den Angerufenen direkt erreicht; ansonsten der
Der Linker generiert „bl L42“, um die „Zweiginsel“ aufzurufen. Die „Zweiginsel“ ist
an den Hauptteil der aufrufenden Funktion angehängt; Es berechnet die vollständige 32-Bit-Adresse von
den Angerufenen und springt zu ihm.
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 können wir GCC dazu veranlassen, alle Longcall-Spezifikationen beim Linker zu ignorieren
Es ist bekannt, dass es Leim erzeugt.
-mtls-marker
-mno-tls-marker
Markieren (nicht markieren) Aufrufe von "__tls_get_addr" mit einer Verschiebung, die die Funktion angibt
Streit. Durch die Verschiebung kann ld den Funktionsaufruf zuverlässig mit dem Argument verknüpfen
Setup-Anweisungen für die TLS-Optimierung, was wiederum eine bessere Planung durch gcc ermöglicht
die Sequenz.
-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
Mit dieser Option kann GCC die reziproke Schätzung und die reziproke Quadratwurzel verwenden
Schätzen Sie Anweisungen mit zusätzlichen Newton-Raphson-Schritten, um die Präzision zu erhöhen
anstatt eine Division oder Quadratwurzel und Division für Gleitkommaargumente durchzuführen. Du
sollte die verwenden -ffast-mathe Option bei Verwendung -mrecip (oder zumindest
-funsafe-mathematik-optimierungen, -nur-endlich-mathematik, -Reziproke-Mathematik und
-fno-trapping-mathe). Beachten Sie, dass der Durchsatz der Sequenz im Allgemeinen gleich ist
höher als der Durchsatz der nicht reziproken Anweisung, die Präzision der
Die Sequenz kann um bis zu 2 ulp verringert werden (d. h. der Kehrwert von 1.0 entspricht 0.99999994).
für reziproke Quadratwurzeln.
-mrecip=wählen
Mit dieser Option können Sie steuern, welche Anweisungen zur gegenseitigen Schätzung verwendet werden dürfen. wählen
ist eine durch Kommas getrennte Liste von Optionen, denen ein "!" die umkehren
Option: "all": alle Schätzungsanweisungen aktivieren, "default": Standardeinstellung aktivieren
Anweisungen, äquivalent zu -mrecip, "keine": alle Schätzungsanweisungen deaktivieren,
entspricht -mno-rezept; „div“: aktiviert die reziproken Approximationsanweisungen für
sowohl einfache als auch doppelte Präzision; „divf“: Aktiviert den Reziprokwert mit einfacher Genauigkeit
Näherungsanweisungen; „divd“: Aktiviert den Kehrwert mit doppelter Genauigkeit
Näherungsanweisungen; „rsqrt“: aktiviert die reziproke Quadratwurzelnäherung
Anweisungen für einfache und doppelte Genauigkeit; „rsqrtf“: Aktivieren Sie die Single-
Präzisionsanweisungen für die reziproke Quadratwurzelnäherung; „rsqrtd“: Aktivieren Sie das
Anweisungen zur reziproken Quadratwurzelnäherung mit doppelter Genauigkeit;
Also zum Beispiel, -mrecip=alle,!rsqrtd würde die gesamte reziproke Schätzung ermöglichen
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 or
-mcpu=power7 wählt automatisch aus -mrecip-Präzision. Das Quadrat mit doppelter Genauigkeit
Wurzelschätzungsanweisungen werden auf Maschinen mit geringer Genauigkeit nicht standardmäßig generiert.
da sie keine Schätzung liefern, die nach drei Schritten konvergiert.
-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 "mass", der die Verwendung von IBMs
Mathematical Acceleration Subsystem (MASS)-Bibliotheken für die Vektorisierung intrinsischer Elemente mit
externe Bibliotheken. GCC sendet derzeit Aufrufe 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 müssen aktiviert sein. Die MASS-Bibliotheken müssen es sein
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) wann
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
Registrieren r2, und statischer Kettenwert, der in Register geladen werden soll r11dem „Vermischten Geschmack“. Seine
-mZeiger-auf-verschachtelte-Funktionen ist standardmäßig aktiviert. Sie werden nicht in der Lage sein, durchzurufen
Zeiger auf verschachtelte Funktionen oder Zeiger auf Funktionen, die in anderen Sprachen kompiliert wurden
Verwenden Sie die statische Kette, wenn Sie die 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.
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 aktiviert für die RX600 Serie und deaktiviert für die RX200 Serie.
Gleitkommaanweisungen werden nur für 32-Bit-Gleitkommawerte generiert
jedoch, also wenn die -m64bit-doubles Wenn die Option verwendet wird, wird die FPU-Hardware nicht verwendet
für Doppel verwendet.
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, die früher im reservierten Register hätten gehalten werden können, jetzt vorhanden sind
auf den Stapel geschoben.
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 libgloss-Board-spezifische Laufzeit verwendet.
-mas100-Syntax
-mno-as100-Syntax
Verwenden Sie beim Generieren von Assembler-Ausgaben eine Syntax, die mit Renesas AS100 . kompatibel ist
Assembler. Diese Syntax kann auch vom GAS-Assembler verarbeitet werden, hat aber einige
Einschränkungen, daher ist die Generierung nicht die Standardoption.
-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-Entspannung. Linker-Relaxation ist ein Prozess, bei dem der Linker dies tut
Versuchen Sie, die Größe eines Programms zu reduzieren, indem Sie kürzere Versionen verschiedener Programme finden
Anweisungen. 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 Register „r13“ sein wird
ist ausschließlich der Verwendung schneller Interrupt-Handler vorbehalten. Ein Wert von 2 Reserven
„r13“ und „r12“. Ein Wert von 3 reserviert „r13“, „r12“ und „r11“ und ein Wert von 4
reserviert „r13“ bis „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 werden über einen Offset von einer in einem Register gehaltenen Basisadresse erstellt. Das
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.
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 verwendet werden
Register „r10“, „r11“, „r12“ und/oder „r13“ und nur unter der Voraussetzung, dass die normale Verwendung 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 wird verwendet
um Gleitkommaoperationen durchzuführen. Wenn -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
wird zur Durchführung von Dezimal-Gleitkomma-Operationen verwendet. Wenn -mhard-dfp is
angegeben, generiert der Compiler Dezimal-Gleitkomma-Hardwareanweisungen. Das
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
verstehe die DWARF-2-Call-Frame-Informationen nicht. Wenn -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 und z10. Beim Generieren von Code unter Verwendung der Anweisungen auf
z/Architektur, 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
Gibt eine Warnung aus, wenn die Funktion alloca aufruft oder Arrays mit dynamischer Größe verwendet. Das 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 S390-Backend zusätzliche Anweisungen im aus
Funktionsprolog, der eine Falle auslöst, wenn die Stapelgröße beträgt Stapelschutz Bytes oben
Stapelgrösse (Denken Sie daran, dass der Stapel auf s390 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
daher auch in produktionsähnlichen Systemen ohne größere 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.
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 Anweisung „bcnz generieren“.
-Muls
Aktivieren Sie die Generierung einer nicht ausgerichteten Lade- und Speicheranweisung.
-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.
-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.
-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.
-mhitachi
Halten Sie sich an die von Renesas definierten Aufrufkonventionen.
-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 -mhitachi 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 aktiviert und ausgewählt ist
Die Codegenerierungsoption (z. B. -m4) erlaubt die Verwendung des ICBI-Befehls nicht. Wenn
Die ausgewählte Codegenerierungsoption erlaubt die Verwendung der ICBI-Anweisung nicht.
und -musermode nicht wirksam ist, wird der Inline-Code die Anweisung manipulieren
Adressarray direkt mit einem assoziativen Schreibvorgang zwischenspeichern. Dies erfordert nicht nur
Im privilegierten Modus wird jedoch auch fehlgeschlagen, wenn die Cache-Zeile über den TLB zugeordnet wurde
und ist nicht mehr zugeordnet.
-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.
-msoft-atomar
Generieren Sie GNU/Linux-kompatible gUSA-Software-Atomarsequenzen für die integrierte Atomic-Umgebung
Funktionen. Die generierten atomaren Sequenzen benötigen Unterstützung durch den Interrupt /
Ausnahmebehandlungscode des Systems und sind nur für Single-Core-Systeme geeignet.
Auf Multicore-Systemen funktionieren sie nicht korrekt. Diese Option wird aktiviert durch
Standard, wenn das Ziel „sh-*-linux*“ ist. Einzelheiten zum integrierten Atomic
Funktionen siehe __atomar Eingebaute.
-mspace
Optimieren Sie auf Platz statt auf Geschwindigkeit. Behauptet von -Du.
-mrefergot
Wenn Sie positionsunabhängigen Code generieren, senden Sie Funktionsaufrufe mit dem Global Offset
Tabelle anstelle der Prozedurverknüpfungstabelle.
-musermode
Generieren Sie keinen Code nur für den privilegierten Modus. impliziert -mno-inline-ic_invalidate, wenn die
Inline-Code würde im Benutzermodus nicht funktionieren. Dies ist die Standardeinstellung, wenn das Ziel vorhanden ist
„sh-*-linux*“.
-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 wird 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.
Wenn Sie dies für Ziele angeben, die keine dynamischen Umschaltbefehle haben, wird
Standardwert ist "call-div1".
Wenn keine Aufteilungsstrategie angegeben wurde, wird die Standardstrategie ausgewählt
basierend auf dem aktuellen Ziel. Für SH2A besteht die Standardstrategie darin, die "Divs" zu verwenden und
"divu"-Anweisungen anstelle von Bibliotheksfunktionsaufrufen.
-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
wirken sich nur auf den Namen aus, der in den Aufteilungsstrategien call und inv:call verwendet wird, und die
Der Compiler erwartet immer noch die gleichen Sätze von Eingabe-/Ausgabe-/überfüllten Registern wie wenn
diese Option war 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.
-madjust-unroll
Lösen Sie den Gashebel, um eine Überlastung der Zielregister zu vermeiden. Diese Option hat nur eine
Auswirkung, wenn die GCC-Codebasis den Ziel-Hook TARGET_ADJUST_UNROLL_MAX unterstützt.
-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
Legen Sie die für die gettr-Anweisung angenommenen Kosten auf fest Anzahl. Der Standardwert ist 2, wenn
-mpt-behoben ist wirksam, sonst 100.
-mpt-behoben
Gehen Sie davon aus, dass pt*-Anweisungen nicht abfangen. Dies führt im Allgemeinen zu einer besseren Planung
Code, ist aber auf aktueller Hardware unsicher. Die aktuelle Architekturdefinition sagt
dass Ptabs und Ptrel Trap, wenn das mit 3 anded Ziel 3 ist. Dies hat das
unbeabsichtigter Effekt, der es unsicher macht, Ptabs/Ptrel vor einer Verzweigung zu planen, oder
Heben Sie es aus einer Schleife. Zum Beispiel __do_global_ctors, ein Teil von libgcc, der ausgeführt wird
Konstruktoren rufen beim Programmstart Funktionen in einer Liste auf, die durch -1 getrennt ist.
Mit der Option -mpt-fixed werden die Ptabs vor dem Testen gegen -1 erstellt. Das
bedeutet, dass alle Konstruktoren etwas schneller ausgeführt werden, aber wenn die Schleife erreicht ist
Am Ende der Liste stürzt das Programm ab, weil ptabs -1 in ein Ziel lädt
registrieren. Da diese Option für jede Hardware, die den Strom implementiert, unsicher ist
Architekturspezifikation, der Standardwert ist -mno-pt-fixed. Es sei denn, der Benutzer gibt a an
spezifische Kosten mit -mgettrkost, -mno-pt-fixed impliziert auch -mgettrkosten=100; Dies
verhindert die Registerzuweisung mithilfe von Zielregistern zum Speichern gewöhnlicher Ganzzahlen.
-minvalid-Symbole
Angenommen, Symbole sind möglicherweise ungültig. Vom Compiler generierte normale Funktionssymbole
wird immer gültig sein, um mit movi/shori/ptabs oder movi/shori/ptrel zu laden, aber mit
Mithilfe von Assembler- und/oder Linker-Tricks ist es möglich, Symbole zu generieren, die dazu führen
ptabs / ptrel zur Falle. Diese Option ist nur dann sinnvoll, wenn -mno-pt-behoben in
Wirkung. Es verhindert dann Cross-Basic-Block-CSE, Heben und die meisten Planungen
Symbol lädt. Die Standardeinstellung ist -mno-ungültige-Symbole.
-filialkosten=num
Annehmen num die Kosten für eine Zweiganweisung sein. Höhere Zahlen machen das
Der Compiler versucht, wenn möglich, mehr verzweigungsfreien Code zu generieren. Wenn nicht angegeben, die
Der Wert wird abhängig vom Prozessortyp ausgewählt, für den kompiliert wird.
-mcbranchdi
Aktivieren Sie das Anweisungsmuster „cbranchdi4“.
-mcmpeqdi
Geben Sie das Befehlsmuster „cmpeqdi_t“ aus, auch wenn -mcbranchdi ist in Kraft.
-verwirrt-wahnsinnig
Erlauben Sie die Verwendung der „fmac“-Anweisung (Gleitkomma-Multiplikation-Akkumulierung), wenn die
welcher Prozessortyp dies unterstützt. Durch die Aktivierung dieser Option wird möglicherweise Code generiert, der Folgendes erzeugt
unterschiedliche numerische Gleitkommaergebnisse im Vergleich zur strengen IEEE 754-Arithmetik.
-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:
-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 notwendigen Verschiebungen lösen jedoch das Kopieren aus.
beim Schreiben, und das gemeinsam genutzte Objekt wird nicht tatsächlich von allen Prozessen gemeinsam genutzt. Anstatt
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.
Geben Sie Folgendes an, um eine vollständige SVR4-ABI-Konformität auf Kosten eines gewissen Leistungsverlusts zu gewährleisten
-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 „aufrufgespeicherte“ Register behandelt und bei Bedarf auf dem Stapel 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.
-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 den resultierenden Code anerkennt
wird nicht direkt mit den Regeln des ABI übereinstimmen.
-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, 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
v8 Supersparc, Hypersparc, Leon
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 würde.
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, f930, f934, spartclite86x, tsc701, Ultrasparz,
ultrasparc3, Niagara, Niagara2, Niagara3 und Niagara4. Mit nativem 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 wenn man auf eine CPU abzielt
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 wenn man auf eine CPU abzielt
unterstützt solche Anweisungen, wie z. B. niagara-3 und höher. Einstellung -mvis3 auch setzt
-mvis2 und -mvis.
-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 dies 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 wenn man auf eine CPU abzielt
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).
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 Verschiebungen. Standardmäßig gibt GCC eine aus
Fehler beim Generieren von Code, der eine dynamische Verlagerung erfordert. -mno-error-reloc
deaktiviert den Fehler, -mwarn-reloc wird stattdessen eine Warnung generieren.
-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. Benutzer normalerweise
Beheben Sie dieses Problem mit dem Schlüsselwort volatile, aber das kann zu ineffizientem Code führen
an Orten, an denen sich die Erinnerung bekanntermaßen nicht verändert. Anstatt die Erinnerung als zu markieren
Volatilität Wir behandeln die DMA-Anweisungen so, dass sie sich potenziell auf den gesamten Speicher auswirken. Mit
-munsafe-dma Benutzer müssen das Schlüsselwort volatile verwenden, um Speicherzugriffe zu schützen.
-Filiale-Hinweise
Standardmäßig generiert GCC eine Verzweigungshinweisanweisung, um Pipeline-Störungen zu vermeiden
immer genommene oder wahrscheinlich genommene Äste. 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 wird verlinkt
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 es sich um eine ABI-Änderungsoption handelt, 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
Der benannte Adressraumqualifizierer „__ea“ beeinträchtigt Änderungen an anderen PPUs nicht
Variablen, die sich in derselben Cache-Zeile vom PPU-Code befinden. Wenn Sie kein Atom verwenden
Aktualisierungen können solche Störungen auftreten; Es werden jedoch mehr Cache-Zeilen zurückgeschrieben
effizient. Das Standardverhalten besteht darin, atomare Updates zu verwenden.
-mdual-nops
-mdual-nops=n
Standardmäßig fügt GCC nops ein, um das Doppelproblem zu erhöhen, wenn eine Zunahme erwartet wird
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 dem Zweig, den sie bewirken. GCC fügt bis zu ein n nops zu
Erzwingen Sie dies, sonst wird der Verzweigungshinweis nicht generiert.
-mhint-max-distanz=n
Die Codierung des Verzweigungshinweisbefehls begrenzt den Hinweis auf 256
Anweisungen des Zweigs, auf den es wirkt. Standardmäßig stellt GCC sicher, dass es innerhalb ist
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:
-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.
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
Der Compiler lädt die Funktionsadresse immer in ein Register und ruft sie indirekt auf
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.
-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.
Diese Einstellung ist die Standardeinstellung.
-Mno-App-Regs
Diese Option bewirkt, dass r2 und r5 als feste Register behandelt werden.
-mv850e2v3
Geben Sie an, dass der Zielprozessor der V850E2V3 ist. Die Präprozessorkonstanten
__v850e2v3__ wird definiert, wenn diese Option verwendet wird.
-mv850e2
Geben Sie an, dass der Zielprozessor der V850E2 ist. Die Präprozessorkonstanten
__v850e2__ wird definiert, wenn diese Option verwendet wird.
-mv850e1
Geben Sie an, dass der Zielprozessor der V850E1 ist. Die Präprozessorkonstanten
__v850e1__ und __v850e__ wird 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 sind festgelegt
Anschließend wird ein Standardzielprozessor und der entsprechende ausgewählt __v850*__ Präprozessor
Konstante wird definiert.
Die Präprozessorkonstanten __v850 und __v851__ sind immer definiert, egal welche
Prozessorvariante ist das Ziel.
-mdisable-callt
Diese Option unterdrückt die Generierung des CALLT-Befehls für v850e, v850e1,
v850e2- und v850e2v3-Varianten der v850-Architektur. Der Standardwert ist
-mno-disable-callt Dadurch kann die CALLT-Anweisung verwendet 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 Sprunganweisungen aus, unter der Annahme, dass Sie mit dem zusammenbauen
GNU-Assembler.
-mg Ausgabecode für Gleitkommazahlen im G-Format statt im D-Format.
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-64 Optionen
Diese sind aufgelistet unter
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
Kontrollieren Sie die Behandlung von wörtlichen Pools. Die Standardeinstellung ist -mno-text-section-literals,
wodurch Literale in einem separaten Abschnitt in der Ausgabedatei platziert werden. Dies ermöglicht die
Literal-Pool, der in einem Daten-RAM/ROM platziert werden kann, und ermöglicht dem Linker auch das Kombinieren
Literalpools aus separaten Objektdateien, um redundante Literale zu entfernen und Code zu verbessern
Größe. Mit -mtext-Abschnittsliterale, die Literale sind im Textabschnitt eingestreut
um sie so nah wie möglich an ihren Referenzen zu halten. Dies kann notwendig sein
für große Baugruppendateien.
-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
Wenn Sie zum Ausrichten eines Ziels keine Dichteanweisungen verwenden, 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 Erweitern
Dichteanweisungen oder durch Einfügen von No-Op-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 weiterhin den direkten Aufruf anzeigt
Anweisungen --- Sehen Sie sich den zerlegten Objektcode an, um die tatsächlichen Anweisungen zu sehen.
Beachten Sie, dass der Assembler nicht nur für jeden dateiübergreifenden Aufruf einen indirekten Aufruf verwendet
diejenigen, die wirklich außerhalb des Bereichs liegen.
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 wäre
-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.
-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 bedeutet dies, dass GCC Frame-Abwicklungsinformationen für alle generiert
Funktionen, die zu einem erheblichen Datenvolumen-Overhead führen können, obwohl dies nicht der Fall ist
Auswirkungen auf die Ausführung haben. Wenn Sie diese Option nicht angeben, wird sie von GCC standardmäßig aktiviert
für Sprachen wie C++, die normalerweise eine Ausnahmebehandlung erfordern, und deaktivieren Sie diese für
Sprachen wie C, die dies normalerweise nicht erfordern. Möglicherweise müssen Sie es jedoch aktivieren
Diese Option wird beim Kompilieren von C-Code verwendet, der ordnungsgemäß mit Ausnahmen zusammenarbeiten muss
In C++ geschriebene Handler. Möglicherweise möchten Sie diese Option auch deaktivieren, wenn dies der Fall ist
Kompilieren älterer C++-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".
-Funwind-Tische
Ähnlich -fAusnahmen, außer dass es nur alle benötigten statischen Daten generiert, aber
hat keinerlei Auswirkungen auf den generierten Code. Normalerweise wird dies nicht aktiviert
diese Option; Stattdessen würde ein Sprachprozessor, der diese Behandlung benötigt, sie aktivieren
in Ihrem Namen.
-fasynchrone-unwind-Tabellen
Erzeugen Sie eine Abwickeltabelle im Dwarf2-Format, sofern 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).
-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“ dem kleinsten
Integer-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 für wchar_t sein kurz ohne Vorzeichen int anstatt der
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
Wenn dieselbe Variable (ohne „extern“) in zwei verschiedenen Kompilierungen deklariert wird, werden Sie dies tun
erhalten Sie einen Mehrfachdefinitionsfehler, wenn Sie sie verknüpfen. In diesem Fall müssen Sie kompilieren
mit -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
Ignoriere das #ident Richtlinie.
-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 wurde, angezeigt wird
in der zu erstellenden Objektdatei aufgezeichnet. Dieser Schalter ist nur implementiert
Auf einigen Zielen ist das genaue Format der Aufzeichnung das Ziel- und 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 auf dem SPARC und 32k
auf m68k und RS/6000. Der 386 hat kein solches Limit.)
Positionsunabhängiger Code erfordert spezielle Unterstützung und funktioniert daher nur auf
bestimmte Maschinen. Für den 386er unterstützt GCC PIC für System V, aber nicht für die 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 auf m68k, PowerPC und SPARC einen Unterschied.
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
Die 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-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
Forderung. Auf diese Weise kompilierte Funktionen speichern und wiederherstellen das Register nicht reg.
Es ist ein Fehler, dieses Flag mit dem Frame-Zeiger oder Stapelzeiger zu verwenden. Verwendung davon
Flag für andere Register, die feste, durchdringende Rollen bei der Ausführung der Maschine haben
Modell wird katastrophale Ergebnisse liefern.
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 wird das Register gespeichert und wiederhergestellt reg wenn sie es benutzen.
Es ist ein Fehler, dieses Flag mit dem Frame-Zeiger oder Stapelzeiger zu verwenden. Verwendung davon
Flag für andere Register, die feste, durchdringende Rollen bei der Ausführung der Maschine haben
Modell wird katastrophale Ergebnisse liefern.
Eine andere Art von Katastrophe wird aus der Verwendung dieses Flags für ein Register resultieren
welche Funktionswerte zurückgegeben werden dürfen.
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 nicht ausgerichtet ausgegeben
am nächsten Einbauort.
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 unmittelbar vor Funktionsbeendigung werden die folgenden Profilierungsfunktionen aufgerufen
mit der Adresse der aktuellen Funktion und ihrer 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 ging hinaus. Das bedeutet, dass adressierbare Versionen solcher Funktionen verfügbar sein müssen.
Wenn alle Ihre Verwendungen einer Funktion inline erweitert werden, kann dies eine zusätzliche Bedeutung haben
Erweiterung der Codegröße. Wenn du benutzt extern Inline- in Ihrem C-Code ein adressierbarer
Es muss eine entsprechende Version dieser Funktionen bereitgestellt werden. (Das ist normalerweise sowieso der Fall, aber
Wenn Sie Glück haben und der Optimierer die Funktionen immer inline erweitert, haben Sie das vielleicht
entkommen, ohne statische Kopien bereitzustellen.)
Einer Funktion kann das Attribut "no_instrument_function" gegeben werden, in diesem Fall ist dies
Eine Instrumentierung erfolgt nicht. Dies kann beispielsweise für das Profiling genutzt 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
von "-finstrument-functions"). 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 „/bits/stl“ enthalten.
oder „include/sys“.
Wenn Sie aus irgendeinem Grund den Buchstaben ',' in eines der sym, schreiben ','. Zum
Beispiel, "-finstrument-functions-exclude-file-list=',,tmp'" (beachten Sie das einfache Anführungszeichen
um die Option).
-finstrument-functions-exclude-function-list=sym,sym, ...
Dies ähnelt "-finstrument-functions-exclude-file-list", aber diese Option setzt
die Liste der Funktionsnamen, die von der Instrumentierung ausgeschlossen werden sollen. Der Funktionsname zu
abgeglichen werden soll, ist der für den Benutzer sichtbare Name, z bla(const vektor &)",
nicht der interne verstümmelte Name (zB "_Z4blahRSt6vectorIiSaIiEE"). Das Spiel ist geschafft
auf Teilzeichenfolgen: wenn die sym Parameter ist ein Teilstring des Funktionsnamens, es ist
als Übereinstimmung betrachtet. Bei erweiterten C99- und C++-Bezeichnern ist der Funktionsname
muss in UTF-8 angegeben werden und darf 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 muss es jedoch seit dem Stapel nur selten angegeben werden
Ü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: "no" bedeutet keine Prüfung, "generic"
bedeutet, die Verwendung von Überprüfungen im alten Stil zu erzwingen, "spezifisch" bedeutet, die beste Überprüfung zu verwenden
Methode und entspricht bare -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 Leistung des Codes beeinträchtigt.
Beachten Sie, dass die Stapelprüfung im alten Stil auch die Fallback-Methode für "spezifisch" ist, 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 der Stapel darüber hinaus wachsen würde
Unterschreitet der Wert den Wert, wird ein Signal ausgelöst. Bei den meisten Zielen wird das Signal vor dem ausgelöst
Der Stapel überschreitet die Grenze, sodass es möglich ist, das Signal abzufangen, ohne es zu nehmen
Spezielle Vorkehrungen.
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 i386- und x86_64-Backends 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-dynamic“, „local-dynamic“, „initial-exec“ oder „local-exec“.
Die Standardeinstellung ohne -fpic ist "initial-exec"; mit -fpic Der Standardwert ist
"global-dynamisch".
-fsichtbarkeit=Standard|intern|versteckt|geschützt
Legen Sie die Standardsichtbarkeit von ELF-Bildsymbolen auf die angegebene Option fest – alle Symbole werden angezeigt
werden damit gekennzeichnet, sofern sie nicht im Code überschrieben werden. 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 bedeutet "default" immer öffentlich; dh, verfügbar, um verlinkt zu werden
gegen von außerhalb des gemeinsamen Objekts. "geschützt" und "intern" sind ziemlich nutzlos
Im realen Gebrauch wird die einzige andere häufig verwendete Option daher „versteckt“ sein. Der
Standard wenn -fSichtbarkeit nicht angegeben ist „Standard“, dh jedes Symbol erstellen
öffentlich – dies verursacht das gleiche Verhalten wie frühere Versionen von GCC.
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://people.redhat.com/~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 ist ausgeblendet und markiert Dinge als öffentlich. 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 vorhandenem Code hinzufügen, finden Sie möglicherweise #pragma GCC
Sichtbarkeit von Nutzen. Dies funktioniert, indem Sie die Deklarationen, die Sie einstellen möchten, beifügen
Sichtbarkeit für mit (zum Beispiel) #pragma GCC Sichtbarkeit drücken (versteckt) 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 er
ist nicht die Standardeinstellung; dh, Deklarationen, die nur innerhalb des lokalen VNB verwendet werden, sollten immer
explizit als ausgeblendet markiert werden, um indirekte PLT-Overheads zu vermeiden
reichlich übersichtlich hilft auch bei der Lesbarkeit und Selbstdokumentation des Codes. Beachten Sie, dass
Aufgrund der ISO C++-Spezifikationsanforderungen müssen Operator new und Operator delete verwendet werden
immer von Standardsichtbarkeit sein.
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 sagen #pragma GCC
Sichtbarkeit drücken (Standard) bevor Sie solche Header einfügen.
extern Erklärungen sind nicht betroffen von -fSichtbarkeit, also kann viel Code sein
neu kompiliert mit -fvisibility=versteckt ohne Modifikationen. Dies bedeutet jedoch, dass
ruft an extern Funktionen ohne explizite Sichtbarkeit verwenden das PLT, es ist also mehr
effektiv zu nutzen __Attribut ((Sichtweite)) und / oder #pragma GCC Sichtbarkeit um es zu sagen
Compiler, der extern Deklarationen sollten als versteckt behandelt werden.
Beachten Sie, dass -fSichtbarkeit wirkt sich auf vage Verknüpfungsentitäten in C++ aus. Dies bedeutet, dass z
Beispielsweise muss eine Ausnahmeklasse, die zwischen DSOs ausgelöst wird, explizit sein
mit Standardsichtbarkeit markiert, damit die typ_info Knoten werden zwischen den vereinheitlicht
DSOs.
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 müssen 16 Bit breit sein; Mit diesem Flag könnte der Benutzer alle peripheren Bits deklarieren.
Felder als „unsigned short“ (vorausgesetzt, short beträgt auf diesen Zielen 16 Bit), um GCC zu erzwingen
16-Bit-Zugriffe anstelle eines möglicherweise effizienteren 32-Bit-Zugriffs zu verwenden.
Wenn diese Option deaktiviert ist, verwendet der Compiler die effizienteste Anweisung. In
Im vorherigen Beispiel könnte es sich um einen 32-Bit-Ladebefehl handeln, obwohl dies der Fall ist
Greifen Sie auf Bytes zu, die keinen Teil des Bitfelds enthalten oder im Speicher abgebildet sind
Register, die nichts mit dem zu tun haben, das aktualisiert wird.
Wenn das Ziel eine strikte Ausrichtung erfordert und die Berücksichtigung des Feldtyps erforderlich wäre
Bei einem Verstoß gegen diese Ausrichtung wird eine Warnung ausgegeben. Wenn das Feld das Attribut „gepackt“ hat,
Der Zugriff erfolgt ohne Berücksichtigung des Feldtyps. Wenn das Feld nicht vorhanden ist
Wenn Sie das Attribut „packed“ verwenden, erfolgt der Zugriff unter Berücksichtigung des Feldtyps. In beiden Fällen GCC
geht davon aus, dass der Benutzer etwas über die Zielhardware weiß, das ihm nicht bekannt ist.
Der Standardwert dieser Option wird durch die binäre Schnittstelle der Anwendung für . bestimmt
der Zielprozessor.
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 andernfalls interpretiert würden
als 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 festgelegt ist, wird GCC versuchen, ein geeignetes Präfix für herauszufinden
Verwendung basierend auf dem Pfadnamen, mit dem es aufgerufen wurde.
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 wird suchen foo/bar wo es normalerweise suchen würde
/usr/local/lib/bar. Diese alternativen Verzeichnisse werden zuerst durchsucht; Der Standard
Als nächstes kommen die Verzeichnisse. Wenn ein Standardverzeichnis mit dem konfigurierten beginnt Präfix dann
der Wert 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, wird der Compiler ihn verwenden
mblen und mbtowc wie im 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-gcc-4.7 online über die Dienste von onworks.net