Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen aarch64-linux-gnu-g++-4.8 komutudur.
Program:
ADI
gcc - GNU projesi C ve C++ derleyicisi
SİNOPSİS
[-c|-S|-E] [-std=standart]
[-g] [-pg] [-Oseviye]
[-Wuyarmak...] [-Wpedantik]
[-Idir...] [-Ldir...]
[-Dmakro[=tanım]...] [-Umakro]
[-fseçenek...] [-mmakine seçeneği...]
[-o dış dosya] [@dosya] dosyadaKendi ID’n ile mağazalarını oluştur
Burada yalnızca en kullanışlı seçenekler listelenmiştir; geri kalanı için aşağıya bakın. g ++ kabul eder
çoğunlukla aynı seçenekler gcc.
TANIM
GCC'yi çağırdığınızda, normalde ön işleme, derleme, derleme ve bağlama işlemlerini yapar.
"Genel seçenekler", bu süreci ara bir aşamada durdurmanıza izin verir. İçin
örnek -c seçenek, bağlayıcıyı çalıştırmamayı söylüyor. Sonra çıktı nesneden oluşur
derleyici tarafından dosya çıktısı.
Diğer seçenekler, işlemenin bir aşamasına geçirilir. Bazı seçenekler kontrol
önişlemci ve diğerleri derleyicinin kendisi. Yine de diğer seçenekler montajcıyı kontrol eder ve
bağlayıcı; bunların çoğu burada belgelenmemiştir, çünkü bunlardan herhangi birini nadiren kullanmanız gerekir.
GCC ile kullanabileceğiniz komut satırı seçeneklerinin çoğu C programları için kullanışlıdır; ne zaman
bir seçenek yalnızca başka bir dilde (genellikle C++) kullanışlıdır, açıklama öyle diyor
açıkça. Belirli bir seçeneğin açıklaması bir kaynaktan bahsetmiyorsa
dil, bu seçeneği desteklenen tüm dillerde kullanabilirsiniz.
The gcc program, seçenekleri ve dosya adlarını işlenen olarak kabul eder. Birçok seçeneğin çoklu
harf isimleri; bu nedenle birden fazla tek harfli seçenek değil gruplandırılabilir: -dv olan çok
farklıdır -d -v.
Seçenekleri ve diğer argümanları karıştırabilirsiniz. Çoğunlukla, kullandığınız sipariş
Önemli olmak. Aynı türden birkaç seçeneği kullandığınızda sıra önemlidir; örneğin, eğer
sen belirt -L birden fazla, dizinler belirtilen sırada aranır. Ayrıca,
yerleştirilmesi -l seçenek önemlidir.
Birçok seçeneğin ile başlayan uzun adları vardır. -f veya -W---Örneğin,
-fmove-loop-değişmezleri, -W biçimi ve bunun gibi. Bunların çoğu hem olumlu hem de olumsuz
formlar; olumsuz biçimi -ffoo is -fno-foo. Bu kılavuz bunlardan yalnızca birini belgelemektedir.
hangisi varsayılan değilse iki form.
SEÇENEKLER
seçenek ÖZET
İşte türe göre gruplandırılmış tüm seçeneklerin bir özeti. Açıklamalar aşağıdadır
bölümleri.
Genel Opsiyonlar
-c -S -E -o dosya -kanonik olmayan önekler -boru -geçiş-çıkış-kodları -x dil -v
-### --yardım et[=sınıf[, ...]] --hedef-yardım --versiyon -sarmalayıcı @dosya -feklenti=dosya
-fplugin-arg-isim=arg -fdump-ada-spec[-ince] -fada-spec-ebeveyn=birim
-fdump-go-spec=dosya
C Dil Opsiyonlar
-ansi -std=standart -fgnu89-satır içi -yardımcı bilgi Dosya
-nadas-parametresiz-variadik-fonksiyonlar -fno-asm -fno-yerleşik -fno-yerleşik-işlev
-Fhosted -bağımsız -fopenmp -fms-uzantıları -fplan9-uzantıları -trigraflar
-geleneksel -geleneksel-cpp -nadas-tek-hassasiyet -fcond-uyumsuzluğu
-keten-vektör-dönüşümleri -fsigned-bit alanları -fsigned-char -funsigned-bit alanları
-funsigned-char
C + + Dil Opsiyonlar
-fabi-sürüm=n -fno-erişim-kontrolü -fcheck-yeni -fconstexpr-derinlik=n
-arkadaş-enjeksiyon -fno-elide-yapıcılar -fno-enforce-eh-özellikleri -ffor-kapsam
-fno-kapsam için -fno-gnu-anahtar kelimeler -fno-örtük-şablonlar
-fno-implicit-inline-şablonları -fno-uygulama-satır içi -fms-uzantıları
-fno-nonansi-yerleşikler -fnothrow-opt -fno-operatör-adları -fno-isteğe bağlı-diags
-fmüsamahakar -fno-güzel-şablonlar -frepo -fno-rtti -fstats
-ftemplate-backtrace-limit=n -fşablon derinliği=n -fno-threadsafe-statik
-sigorta-cxa-atexit -fno-zayıf -nostdinc++ -fno-varsayılan-satır içi
-fvisibility-satır içi-gizli -fvisibility-ms-uyumluluğu -fext-sayısal-literaller -Wabi
-Wconversion-null -Wctor-dtor-gizlilik -Wdelete-sanal olmayan-dtor -Wliteral-soneki
- Daralma -Wnohariç -Wnon-sanal-dtor -İhracatçı -Weffc++ -Wstrict-null-nöbetçi
-Wno-şablon olmayan-arkadaş -Wold tarzı oyuncular -Woverloaded-sanal -Wno-pmf-dönüşümleri
-Wsign-promosyon
Objective-C ve Objective-C ++ Dil Opsiyonlar
-fconstant-string-sınıfı=sınıf adı -fgnu-çalışma zamanı -fnext-çalışma zamanı -fno-nil-alıcıları
-fobjc-abi-sürüm=n -fobjc-call-cxx-cdtor'lar -fobjc-doğrudan-gönderme -fobjc-istisnalar
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -yersiz-objc-sınıfları -fzero-bağlantı
-gen-bildirimleri -Wata-kesişme -Wno-protokol -Wselektör -Wstrict-seçici-eşleştirme
-Wundeclared-selektör
Dil Bağımsız Opsiyonlar
-fmessage-uzunluğu=n -fdiagnostics-göster-konum=[bir Zamanlar|her hat]
-fno-diagnostics-show-seçeneği -fno-diagnostics-göster-işareti
uyarı Opsiyonlar
-fsyntax-yalnızca -fmax-hataları=n -Wpedantik -pedantik-hatalar -w -Ekstra -Duvar
-Waddress -Waggregate-dönüş -Ağır döngü optimizasyonları -Warray sınırları
-Wno-özellikleri -Wno-yerleşik-makro-yeniden tanımlanmış -Wc++-uyumlu -Wc++11-uyumluluk -Wcast hizalama
-Wcast-kaliteli -Wchar-abonelikleri -Yıkılmış -Wyorum -Wdönüşüm -Wkapsam-uyumsuzluğu
-Wno-cpp -Wno-kullanımdan kaldırıldı -Wno-kullanımdan kaldırılmış-bildirimler -Wdevre dışı-optimizasyon
-Wno-div-sıfır -Wdouble-promosyon -boş-vücut -Wenum-karşılaştırma -Wno-endif-etiketleri
-Whata -Hata=* -Wfatal-hatalar -Wfloat-eşit -W biçimi -W biçimi=2
-Wno-format-nul içerir -Wno-format-ekstra argümanlar -Wformat-değişmez -Wformat-güvenlik
-Wformat-y2k -Wframe-büyük-tan=len -Wno-free-yığın olmayan-nesne -Wjump-ıskalar-init
-Wigned-eleyenler -Wimplicit -Wimplicit-fonksiyon-bildirimi -Wimplicit-int
-Winit-öz -Kazanma hattı -Wbelki-başlatılmamış -Wno-in-to-pointer-cast
-Wno-geçersiz-offsetof -Winvalid-pch -daha büyük-tan=len -Wunsafe-loop optimizasyonları
-Wlojik-operasyon -uzun-uzun -Wana -Wbelki-başlatılmamış -Weksis-parantez
-Wmissing-alan-başlatıcıları -Wmissing-include-dirs -Wno-paçalık -Wno-çok karakterli
-Wonnull -Wno-taşma -Woverlength-dizeleri -Paketlenmiş -Wpacked-bitfield-uyumluluğu
-Wpadded -W parantezler -Wpedantic-ms-formatı -Wno-pedantik-ms-formatı -Wpointer-arith
-Wno-işaretçi-int-cast -Gereksiz-decls -Wno-dönüş-yerel-addr -Wreturn-tipi
-Sıra noktası -Gölge -Wsign-karşılaştırma -Wsign-dönüşüm
-Wsizeof-işaretçi-memaccess -Wstack-koruyucu -Wstack-kullanımı=len - Kısıtlı yumuşatma
-Wstrict-aliasing=n -Wstrict-taşma -Wstrict-taşma=n
-Wöner-özellik=[saf|const|iade yok|biçim] -Wmissing-format-özniteliği -W anahtarı
-Wswitch-varsayılan -Wswitch-enum -Wsync-nand -Wsystem-başlıkları -Wtrambolinler
-Wtrigraflar -Wtype-limitleri -Wundef -Başlatıldı -Bilinmeyen-pragmalar -Wno-pragmalar
-Wunson eklenmiş-şamandıra-sabitleri -Kullanılmamış -Wunused-fonksiyonu -Wunused-etiket
-Wunused-yerel-tip tanımları -Wunused-parametre -Wno-kullanılmayan-sonuç -Wunused-değer
-Wunused-değişken -Wunused-but-set-parametresi -Wunused-but-set-değişkeni -Beceriksiz-döküm
-Wvariadic-makrolar -Wvektör-işlem-performans -Wvla -Wvolatile-kayıt-var
-Wwrite-dizeleri -Sıfır-boş-işaretçi-sabiti
C ve Yalnızca Objective-C uyarı Opsiyonlar
-Wbad-fonksiyon dökümü -Wmissing-beyanlar -Wmissing-parametre tipi
-Wmissing-prototipleri -Wnested-dışlar -Wold-style-deklarasyonu -Wold-tarzı-tanımı
-Wstrict-prototipler -Geleneksel -Geleneksel-dönüşüm
-Wdeclaration-sonra-ifadesi -Wişaretçi-işareti
Hata ayıklama Opsiyonlar
-dharfler -dumpspec'ler -aptal makinesi -döküm -fsanitize=stil -fdbg-cnt-listesi
-fdbg-cnt=karşı-değer-listesi -fdisable-ipa-geçiş_adı -fdisable-rtl-geçiş_adı
-fdisable-rtl-geçiş adı=menzil listesi -fdisable-ağacı-geçiş_adı -fdisable-ağacı-parolalar
isim=menzil listesi -fdump-noaddr -fdump-numarasız -fdump-numarasız-bağlantılar
-fdump-çeviri-birimi[-n] -fdump-sınıfı-hiyerarşisi[-n] -fdump-ipa-hepsi
-fdump-ipa-cgraph -fdump-ipa-satır içi -fdump-geçişler -fdump-istatistikleri -fdump-tree-hepsi
-fdump-tree-orijinal[-n] -fdump-tree-optimize edilmiş[-n] -fdump-ağaç-cfg -fdump-ağaç-takma adı
-fdump-ağaç-ch -fdump-ağaç-ssa[-n] -fdump-ağaç-ön[-n] -fdump-ağaç-ccp[-n]
-fdump-ağaç-dce[-n] -fdump-ağaç-gimple[-çiğ] -fdump-ağaç-çamurluk[-n]
-fdump-ağaç-dom[-n] -fdump-ağacı-dse[-n] -fdump-ağacı-phiprop[-n] -fdump-ağaç-phiopt[-n]
-fdump-ağaç-forwprop[-n] -fdump-ağaç-kopya adı[-n] -fdump-ağacı-nrv -fdump-ağaç-vect
-fdump-ağaç-lavabo -fdump-ağacı-sra[-n] -fdump-ağaç-forwprop[-n] -fdump-ağaçsız[-n]
-fdump-ağaç-vrp[-n] -ftree-vektörleştirici-ayrıntılı=n -fdump-ağaç-storeccp[-n]
-fdump-son-insns=dosya -fcompare-hata ayıklama[=tercih] -fcompare-debug-saniye
-feliminate-cüce2-dups -fno-kullanılmayan-hata ayıklama-türlerini ortadan kaldırın
-feliminate-kullanılmayan-hata ayıklama-sembolleri -femit-sınıfı-hata ayıklama-her zaman -savunabilir-tür-geçmek
-savunabilir-tür-geçmek=menzil listesi -fdebug-types-bölümü -fmem-rapor-wpa -fmem-raporu
-fpre-ipa-mem-raporu -fpost-ipa-mem-raporu -fprofile-yayları -fopt-bilgi
-fopt-bilgi-seçenekleri[=dosya] -frandom-tohum=dizi -fsched-ayrıntılı=n -fsel-planlı-ayrıntılı
-fsel-zamanlanmış-döküm-cfg -fsel-sched-pipeling-ayrıntılı -fstack-kullanımı -ftest-kapsama
-ftime-raporu -fvar-izleme -fvar-izleme-atamaları
-fvar-izleme-ödevleri-değiştirme -g -gseviye -gtoggle -gcoff -gdwarf-versiyon -ggdb
-grecord-gcc-anahtarları -gno-kayıt-gcc-anahtarları -gstab'lar -gstabs+ -gstrict-cüce
-gno-katı-cüce -gvm'ler -gxcoff -gxcoff+ -fno-birleştirme-hata ayıklama-dizeleri
-fno-cüce2-cfi-asm -fdebug-prefix-harita=eski=yeni -femit-struct-debug-baseonly
-femit-struct-debug-azaltılmış -femit-struct-debug-detaylı[=özellik listesi] -p -pg
-baskı-dosya-adı=kütüphane -print-libgcc-dosya-adı -baskı-çoklu-dizin
-baskı-çoklu kitaplık -baskı-çoklu-işletim-dizini -baskı-prog-adı=program
-baskı-arama-dir'leri -Q -print-sysroot -print-sysroot-headers-soneki -kaydet-temps
-save-temps=cwd -save-temps=nesne Zamanlı[=dosya]
Optimizasyon Opsiyonlar
-fagresif döngü optimizasyonları -falign-fonksiyonları[=n] -falign-atlar[=n]
-falign-etiketleri[=n] -falign-döngüleri[=n] -fasosiyatif-matematik -fauto-inc-dec
-fbranch-olasılıklar -fbranch-hedef-yükleme-optimize etme -fdal-hedef-yük-optimize2
-fbtr-bb-özel -fcaller-kaydeder -fcheck-veri-deps -fcombine-yığın ayarlamaları
-fconserve-yığın -fkarşılaştır-elim -fcprop-kayıtları -fçapraz atlama -fcse-takip-atlayışları
-fcse-atlama-blokları -fcx-fortran-kuralları -fcx-sınırlı-aralık -fdata-bölümleri -fdce
-fgecikmeli-dal -fdelete-null-işaretçi-kontrolleri -fsanallaştırma -fdse -korkuyla satır içi
-fipa-sra -çok pahalı-optimizasyonlar -ffat-lto-nesneleri -fffast-matematik -ffinite-matematik-sadece
-float-mağaza -fexcess-hassasiyet=stil -ileriye-yayılmak -ffp-kontrat=stil
-fonksiyon-bölümler -fgcse -fgcse-sonra-yeniden yükleme -fgcse-las -fgcse-lm
-fgrafit-kimlik -fgcse-sm -fhoist-bitişik-yükler -fif-dönüşüm -fif-dönüşüm2
-findirect-satır içi -finline-fonksiyonlar -finline-fonksiyonlar-bir kez çağrılır -finline-limit=n
-finline-küçük-fonksiyonlar -fipa-cp -fipa-cp-klonu -fipa-pta -fipa-profil
-fipa-saf-const -fipa-referans -fira-algoritma=algoritma -fira-bölge=bölge
-fira-kaldırma-basıncı -fira-döngü-basıncı -fno-ira-paylaş-kaydet yuvaları
-fno-ira-share-spill-yuvaları -fira-ayrıntılı=n -beş nokta -fkeep-satır içi-işlevler
-fkeep-statik-consts -floop-blok -floop-değişimi -floop-şerit-mayın
-floop-yuva-optimize -floop-paralelleştir-hepsi -flto -flto-sıkıştırma düzeyi
-flto-bölümü=alg -flto-rapor -fmerge-all-sabitleri -fmerge-sabitleri
-fmodulo-zamanlanmış -fmodulo-schedule-allow-regmoves -fmove-loop-değişmezleri çamurluk
-fmudflapir -fçamurluk -fno-dal-sayısı-reg -fno-varsayılan-satır içi -fno-erteleme-pop
-fno-işlev-cse -fno-tahmin-dal-olasılığı -fno-satır içi -fno-matematik-errno
-fno-gözetleme deliği -fno-gözetleme deliği2 -fno-zamanlanmış-ara blok -fno-zamanlanmış-spec -fno-imzalı-sıfırlar
-fno-üst düzey-yeniden sıralama -fno-trapping-matematiği -fno-sıfır-başlatıldı-in-bss
-fomit-frame-işaretçi -foptimize-kayıt-taşı -foptimize-kardeş-çağrıları
-fkısmi-satır içi -fpeel-döngüler -föngörücü-ortak -fprefetch-loop-dizileri
-fprofile-raporu -fprofile-düzeltme -fprofil-dir=yol -fprofile-oluşturma
-fprofile-oluştur =yol -fprofile-kullanımı -fprofile-kullanımı=yol -fprofile-değerleri
-karşılıklı-matematik -Ücretsiz -fregmove -frename-kayıtları -freorder-blokları
-freorder-blokları-ve-bölümü -freorder-fonksiyonları -frerun-cse-sonrası döngü
-freschedule-modulo-programlanmış-döngüler -frounding-matematik -fsched2-use-superblock'lar
-fsched-basınç -fsched-spec-load -fsched-spec-load-tehlikeli
-fsched-staled-insns-dep[=n] -fsched-durmuş-insns[=n] -fsched-group-sezgisel
-fsched-kritik-yol-sezgisel -fsched-spec-insn-sezgisel -fsched-rank-sezgisel
-fsched-son-insn-sezgisel -fsched-dep-count-sezgisel -fschedule-insns
-fschedule-insns2 -fsection-ankrajlar -fseçici-zamanlama -fseçici-zamanlama2
-fsel-planlama-boru hattı -fsel-planlanmış-boru hattı-dış döngüler -fshrink-sarma
-fsignaling-Nans -fsingle-hassas-sabit -fsplit-ivs-unroller
-fsplit-geniş-türler -fstack-koruyucu -fstack-koruyucu-tümü -fstrict-aliasing
-fstrict-taşma -fthread-atlar -tracer -ftree-bit-ccp -ftree-yerleşik-çağrı-dce
-ftree-ccp -ftree-ch -fttree-coalesce-inline-vars -fttree-coalesce-vars -ftree-kopya-prop
-ftree-telif adı -ftree-dce -ftree-dominator-seçenekleri -ftree-dse -ftree-forwprop
-ağaçsız -ftree-loop-if-dönüştürme -ftree-loop-if-convert-mağazaları -ftree-döngü-im
-ftree-phiprop -ftree-loop-dağıtım -ftree-loop-dağıtım-desenleri
-ftree-döngü-ivcanon -ftree-döngü-doğrusal -ftree-döngüsü optimizasyonu -ftree-paralelleştirme-döngüleri=n
-ftree-ön -ftree-kısmi-ön -ftree-pta -ftree-reassoc -ftree-lavabo -ftree-slsr
-ftree-sra -ftree-switch-dönüşüm -ftree-tail-birleştirme -ftree-ter -ftree-vektörize
-ftree-vrp -her seferinde eğlence -funroll-all-döngüler -funroll-döngüler
-funsafe-loop optimizasyonları -funsafe-matematik-optimizasyonları -funswitch-döngüler
-fvariable-genişleme-in-roller -fvct-maliyet-modeli -fvpt -fweb -bütün-program -fwpa
-sigorta-ld=bağlantılar -sigorta-bağlayıcı-eklenti --param isim=değer -O -O0 -O1 -O2 -O3 -İşletim sistemi
-Ofast -Og
Preprocessor Opsiyonlar
-Asoru=cevap -A-soru[=cevap] -C -dd -di -dM -dN -Dmakro[=tanım] -E -H
-dirafter dir -Dahil etmek dosya -ikrolar dosya -iprefix dosya -iwithprefix dir
-iön eki ile dir -isistem dir -imultilib dir -isysroot dir -M -MM -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-makro-genişletme -fworking-dizini
-yeniden eşle -trigraflar -undef -Umakro -Wp,seçenek -X önişlemci seçenek -tümleşik olmayan-cpp
montajcı seçenek
-WA,seçenek -X birleştirici seçenek
bağlantılar Opsiyonlar
nesne-dosya-adı -lkütüphane -nostartfiles -nodefaultlib'ler -nstdlib -turta -rdinamik -s
-statik -statik-libgcc -statik-libstdc++ -statik-libasan -statik-libtsan -paylaşılan
-paylaşılan-libgcc -simgesel -T senaryo -WI,seçenek -Xlinker seçenek -u sembol
rehber Opsiyonlar
-Bönek -Idir -iplugindir=dir -Alıntı yaparımdir -Ldir -özellikler=dosya -BEN- --sysroot=dir
--no-sysroot-soneki
makine Bağımlı Opsiyonlar
AAAArch64 Opsiyonlar -big-endian -küçük endian -mgeneral-regs-yalnızca -mcmodel=küçük
-mcmodel=küçük -mcmodel=büyük -mstrict-hizalama -momit-yaprak-çerçeve-işaretçi
-mno-omit-yaprak-çerçeve-işaretçi -mtls-lehçesi=az -mtls-lehçesi=geleneksel
-mfix-korteks-a53-835769 -mno-fix-korteks-a53-835769 -mart=isim -mcpu=isim
-mtune=isim
Adapteva Epifani Opsiyonlar -mhalf-reg-dosyası -mprefer-kısa-insn-regs -mbranch-maliyet=num
-mcmove -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-değiştir
-mstack-offset=num -mround-en yakın -mlong-çağrıları -mshort-çağrıları -msmall16 -mfp-modu=kip
-mvect-çift -max-vect-hizalama=num -msplit-vecmove-erken -m1reg-reg
ARM Opsiyonlar -mapcs-çerçevesi -mno-apcs-çerçevesi -mabi=isim -mapcs-yığın-kontrol
-mno-apcs-yığın-kontrol -mapcs-şamandıra -mno-apcs-şamandıra -mapcs-yeniden giren
-mno-apcs-yeniden giriş yapan -msched-prolog -mno-schedule-prolog -küçük endian -big-endian
-mwords-küçük-endian -mfloat-abi=isim -mfp16-formatı=isim -mthumb-interwork
-mno-başparmak-interwork -mcpu=isim -mart=isim -mfpu=isim -myapı-boyut-sınır=n
-dönüşte çalışma -mlong-çağrıları -çok uzun aramalar -msingle-pic-base
-mno-tek resim-tabanı -mpic-kayıt=reg -mnop-eğlenceli-dll içe aktarma -mpoke-işlev-adı
-mparmak -marm -mtpcs-çerçevesi -mtpcs-yaprak-çerçeve -mcaller-süper-birlikte çalışma
-mcallee-süper-birlikte çalışma -mtp=isim -mtls-lehçesi=diyalekt -mword-yer değiştirmeler
-mfix-korteks-m3-ldrd -unaligned-erişim -64 bit için-mneon -mrestrict-it
AVR Opsiyonlar -mmcu=mcu -maccumulate-arg'lar -mbranch-maliyet=maliyet -mcall-prologları -nane8
-mno-kesmeler -mrelax -mstrict-X -mtiny-yığın -Waddr-boşluk-dönüştürme
Blackfin Opsiyonlar -mcpu=cpu[-sirevizyon] -msim -momit-yaprak-çerçeve-işaretçi
-mno-omit-yaprak-çerçeve-işaretçi -mspecld-anomali -mno-specld-anomali -mcsync-anomali
-mno-csync-anomali -mlow-64k -mno-düşük64k -mstack-kontrol-l1 -orta-paylaşılan-kütüphane
-mno-id-paylaşılan-kütüphane -mshared-library-id=n -mleaf-id-paylaşılan-kütüphane
-mno-leaf-id-paylaşılan-kütüphane -msep-veri -mno-eylül-veri -mlong-çağrıları -çok uzun aramalar
-mfast-fp -minline-plt -multicore -mcorea -mcoreb -msdram -micplb
C6X Opsiyonlar -big-endian -küçük endian -mart=cpu -msim -msveri=sdata tipi
CRIS Opsiyonlar -mcpu=cpu -mart=cpu -mtune=cpu -mmax-yığın-çerçevesi=n
-melinux-yığın boyutu=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-yan etkiler
-mstack-hizalama -mdata hizalama -mconst-hizalama -m32-bit -m16-bit -m8-bit
-mno-prolog-sonsöz -mno-gotplt -melf -maout -melinux -mlinux -sim -sim2
-mmul-hata-geçici çözüm -mno-mul-bug-geçici çözüm
CR16 Opsiyonlar -mmac -mcr16cplus -mcr16c -msim -nane32 -mbit-op'lar -mdata-modeli=model
Darwin Opsiyonlar -tüm_yükler -izin verilebilir_istemci -ARCH -arch_errors_fatal -arch_only
-bind_at_load Bundle -paket_yükleyici -Müşteri Adı -uyumluluk_versiyonu
-şimdiki versiyonu -dead_strip -bağımlılık-dosyası -dylib_dosyası -dylinker_install_name
-dinamik -dinamik kitaplık -dışa aktarılan_symbols_list -dosya listesi -flat_ad alanı
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-image_base -içinde -kurulum_adı -keep_private_externs -çoklu_modül
-çarpma_tanımlı -multiply_Definition_unused -noall_load
-no_dead_strip_inits_and_terms -nofix ön bağlama -nomultidef'ler -bağlanma yok
-noseglinkedit -pagezero_size -önceden bağlamak -prebind_all_twolevel_modules -özel_paket
-read_only_relocs -sektalign -sekt nesne sembolleri -neden yük -seg1addr -mezhep oluşturmak
-sekt nesne sembolleri -sektör -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_tablosu -seg_addr_tablo_dosyaadı -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -tek_modül -statik -alt_kütüphane -alt_umbrella
-iki düzeyli_ad alanı -şemsiye -Tanımsız -exported_symbols_list
-weak_reference_mismatches -neler yüklendi -F -kusmuş -gfull -mmacosx-sürüm-min=versiyon
-mçekirdek -mon-byte-bool
Aralık Alfa Opsiyonlar -mno-fp-reg'ler -msoft-float -mieee -mieee-ile-kesin olmayan
-mieee-uyumlu -mfp-trap-modu=kip -mfp-yuvarlama-modu=kip -mtrap-hassasiyet=kip
-mbuild-sabitleri -mcpu=işlemci tipi -mtune=işlemci tipi -mbwx -mmaks -mfix -mcix
-mfloat-vax -mfloat-ieee -meexplicit-relocs -msmall-veri -mlarge-veri -msmall-metin
-mlarge-metin -mbellek gecikmesi=zaman
FR30 Opsiyonlar -msmall-modeli -mno-lsim
FRV Opsiyonlar -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-şamandıra -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mçift -mno-double -mmedya -mno-medya
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro -multilib-kütüphane-pic
-mlinked-fp -mlong-çağrıları -malign-etiketler -kütüphane-resim -macc-4 -macc-8 -mpack
-mno paketi -mno-bayraklar -mcond-hareket -mno-koşul-hareket -moptimize-üye çubuğu
-mno-optimize-üye çubuğu -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-şube
-mno-vliw-şube -mmulti-cond-yürütme -mno-çoklu-koşul-exec -mnested-cond-yürütme
-mno-iç içe-koşul-yürütme -mtomcat istatistikleri -mTLS -mtls -mcpu=cpu
GNU / Linux Opsiyonlar -mglibc -muclibc -mbiyonik -mandroid -tno-android-cc -tno-android-ld
H8 / 300 Opsiyonlar -mrelax -mh -MS -dk -mexr -mno-exr -nane32 -malign-300
HPPA Opsiyonlar -mart=mimari tipi -big-anahtar -mdisable-fpreg'ler
-mdisable-indeksleme -mfast-dolaylı-çağrılar -mgaz -mgnu-ld -mhp-ld
-mfixed-aralık=kayıt aralığı -mjump-in-gecikme -mlinker-opt -mlong-çağrıları
-mlong-yük deposu -mno-büyük-anahtar -mno-devre dışı-fpregs -mno-disable-indeksleme
-mno-hızlı-dolaylı-çağrılar -mno-gaz -mno-atlama-gecikme -mno-uzun-yük deposu
-mno-taşınabilir-çalışma zamanı -mno-yumuşak-şamandıra -mno-boşluk-regs -msoft-float -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -taşınabilir-çalışma zamanı -mprogram=işlemci tipi -mspace-regs
-msio -mwsio -munix=unix-std -nolibdld -statik -İş Parçacığı
i386 ve x86-64 Opsiyonlar -mtune=işlemci tipi -mart=işlemci tipi -mfpmath=birim -masm=diyalekt
-mno-fantezi-matematik-387 -mno-fp-ret-in-387 -msoft-float -mno-wide-çarpma -mrtd
-malign-çift -mpreferred-yığın sınırı=num -mincoming-yığın-sınır=num -mcld
-mcx16 -msahf -mmovbe -mcrc32 -mrecip -mrecip=yeğlemek -mvzerupper -mprefer-avx128 -mmmx
-msse -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 -mrtm -mlwp -mthreads -mno-hizalama-stringops
-minline-all-stringops -minline-stringops-dinamik olarak -mstringop-strateji=alg
-push-arg'lar -maccumulate-giden-arglar -m128bit-uzun-çift -m96bit-uzun-çift
-mlong-çift-64 -mlong-çift-80 -mregparm=num -msseregparm -mveclibabi=tip
-mvect8-ret-in-meminde -mpc32 -mpc64 -mpc80 -mstackrealign -momit-yaprak-çerçeve-işaretçi
-mno-kırmızı-bölge -mno-tls-doğrudan-seg-refs -mcmodel=kod modeli -mabi=isim
-madres-modu=kip -m32 -m64 -mx32 -mlarge-veri eşiği=num -msse2avx -mfentry
-m8bit-idiv -mavx256-bölünmüş-hizasız-yük -mavx256-bölünmüş-hizasız-mağaza
i386 ve x86-64 Windows Opsiyonlar -mkonsol -mcygwin -mno-cygwin -mdll
-mnop-eğlenceli-dll içe aktarma -mthread - cep telefonu kodu -mwin32 -mwindows -fno-set-yığın-çalıştırılabilir
IA-64 Opsiyonlar -big-endian -küçük endian -mgnu-as -mgnu-ld -mno-resim
-mvolatile-asm-durdurma -mregister-isimleri -msdata -mno-sdata -mconstant-gp -oto-resim
-mfused-deli -minline-float-bölme-min-gecikme -minline-float-bölme-maks-iş hacmi
-mno-inline-float-bölme -minline-int-bölme-min-gecikme
-minline-int-divide-maks-iş hacmi -mno-inline-int-bölme -minline-sqrt-min-gecikme
-minline-sqrt-maks-iş hacmi -mno-satır içi-sqrt -mdwarf2-asm -yıllık-durdurma bitleri
-mfixed-aralık=kayıt aralığı -mtls-boyutu=tls-boyutu -mtune=işlemci tipi -milp32 -mlp64
-msched-br-veri-belirtimi -msched-ar-veri-belirtimi -msched-kontrol-özelliği -msched-br-veri spesifikasyonu
-msched-ar-veri spesifikasyonunda -msched-in-control-spec -msched-spec-ldc
-msched-spec-kontrol-ldc -msched-tercih-veri olmayan-spec-insns
-msched-tercih-kontrol dışı-spec-insns -msched-stop-bitleri-her döngüden sonra
-msched-count-spec-in-kritik-yol -msel-schedule-kontrol etme-kontrol-özelliği
-msched-fp-mem-deps-sıfır maliyet -msched-max-memory-insns-hard-limit
-msched-max-bellek-insns=max-insn
LM32 Opsiyonlar -mbarrel-shift-etkin -mdivid-etkin -mmultiply-etkin
-msign-uzantı-etkin -müzer etkin
M32R/D Opsiyonlar -m32r2 -m32rx -m32r -mdebug -malign-döngüler -mno-align-döngüleri
-missue oranı=numara -mbranch-maliyet=numara -mmodel=kod-boyut-model-tipi -msveri=sdata-
tip -mno-flush-fonk -mflush-işlev=isim -mno-flush-trap -mflush-trap=numara -G num
M32C Opsiyonlar -mcpu=cpu -msim -memregler=numara
M680x0 Opsiyonlar -mart=kemer -mcpu=cpu -mtune=melodi -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbit alanı -mno-bit alanı -mc68000 -mc68020 -mnobit alanı -mrtd -mno-rtd
-mdiv -mno-div -mshort -mno-kısa -mhard-şamandıra -m68881 -msoft-float -mpcrel
-malign-int -mstrict-hizalama -msep-veri -mno-eylül-veri -mshared-library-id=n
-orta-paylaşılan-kütüphane -mno-id-paylaşılan-kütüphane -mxgot -mno-xgot
MÇekirdek Opsiyonlar -mhardlit -mno-sert ışıklı -mdiv -mno-div -mrelax-derhal
-mno-rahatla-hemen -mwide-bit alanları -mno-geniş-bit alanları -m4byte-işlevleri
-mno-4byte-işlevleri -mcallgraph-veri -mno-callgraph-veri -mslow-bayt
-mno-yavaş bayt -mno-lsim -küçük endian -big-endian -m210 -m340
-mstack-artış
MEP Opsiyonlar -mabsdiff -alışveriş merkezi seçenekleri -ortalama -mtabanlı=n -mbittoplar -mc=n -mclip
-mconfig=isim -mkop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-uçucu -ml
-mleadz -mm -mminmaks -mult -mno-ops -tekrar -MS -msatur -msdram -msim -msimnovec
-mtf -miny=n
MikroBlaze Opsiyonlar -msoft-float -mhard-şamandıra -msmall-bölücüler -mcpu=cpu -mmmcpy
-mxl-yumuşak-mul -mxl-yumuşak-div -mxl-varil-shift -mxl-desen-karşılaştır -mxl-yığın-kontrol
-mxl-gp-opt -mno-clearbss -mxl-çarpma-yüksek -mxl-float-dönüştürme -mxl-float-sqrt
-big-endian -küçük endian -mxl-yeniden sırala -mxl-modu-uygulama modeli
MIPS Opsiyonlar -EL -EB -mart=kemer -mtune=kemer -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-paylaşımlı -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-şamandıra -msoft-float -mno-şamandıra -msingle-şamandıra -mdouble-şamandıra -mdsp
-mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -mfpu=fpu tipi -msmartmips
-mno-smartmips -bağlı-bekar -mno-çift-tek -mdmx -mno-mdmx -mips3d
-mno-mips3d -mmt -mno-mt -mlsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32
-Gnum -mlocal-sdata -mno-yerel-sdata -mextern-sdata -mno-harici-sdata -mgpopt
-mno-gopt -üyeli-veri -mno-gömülü-veri -rodata-muninit-const
-mno-unit-const-in-rodata -mcode-okunabilir=ayar -msplit-adresleri
-mno-split-adresler -meexplicit-relocs -mno-açık-yer değiştirmeler -mcheck-sıfır bölümü
-mno-check-sıfır-bölme -mdivid-traps -mdivid-breaks -mmmcpy -mno-memcpy
-mlong-çağrıları -çok uzun aramalar -mad -deli -mfused-deli -mno-kaynaşmış-madd -nocpp
-mfix-24k -mno-düzeltme-24k -mfix-r4000 -mno-düzeltme-r4000 -mfix-r4400 -mno-düzeltme-r4400
-mfix-r10000 -mno-düzeltme-r10000 -mfix-vr4120 -mno-düzeltme-vr4120 -mfix-vr4130
-mno-düzeltme-vr4130 -mfix-sb1 -mno-düzeltme-sb1 -mflush-işlev=func -mno-flush-fonk
-mbranch-maliyet=num -mbranch-muhtemelen -mno-dal-muhtemel -mfp-istisnaları
-mno-fp-istisnaları -mvr4130 hizalama -mno-vr4130-hizalama -msynci -mno-synci
-mrelax-resimli aramalar -mno-rahatla-resimli aramalar -mmcount-ra-adresi
MMIX Opsiyonlar -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-uzatma -mknuthdiv -mtoplevel-semboller -melf -mbranch-tahmin
-mno-dal-tahmin -mbase-adresleri -mno-taban-adresleri -msingle-çıkış
-mno-tek çıkış
MN10300 Opsiyonlar -mult-bug -mno-çoklu-hata -mno-am33 -mam33 -mam33-2 -mam34 -mtune=İşlemci-
tip -mreturn-işaretçisi-on-d0 -mno-crt0 -mrelax -miliw -msetlb
Moxie Opsiyonlar -meb -mel -mno-crt0
KAP-11 Opsiyonlar -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbkopya
-mbcopy-yerleşik -nane32 -mno-int16 -nane16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabşi -mno-abshi -mbranch-pahalı -mbranch-ucuz
-munix-asm -mdec-asm
picoçip Opsiyonlar -mae=ae_type -mvliw-lookahead=N -msymbol-adres
-mno-verimsiz-uyarılar
PowerPC Opsiyonlar RS/6000 ve PowerPC Seçeneklerine bakın.
RL78 Opsiyonlar -msim -mmul=yok -mmul=g13 -mmul=rl78
RS / 6000 ve PowerPC Opsiyonlar -mcpu=işlemci tipi -mtune=işlemci tipi -mcmodel=kod modeli
-mpowerpc64 -maltivec -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-zor-dfp -mfull-toc -minimal-toc -mno-fp-in-toc -mno-toplam-toplam
-m64 -m32 -mxl-uyumluluğu -mno-xl-uyumluluğu -mpe -malign-güç -malign-doğal
-msoft-float -mhard-şamandıra -mçoklu -mno-çoklu -msingle-şamandıra -mdouble-şamandıra
-msimple-fpu -mstring -mno-dizesi -güncelleme -mno-güncelleme -mavoid-endeksli-adresler
-mno-avoid-endeksli-adresler -mfused-deli -mno-kaynaşmış-madd -mbit hizalama
-mno-bit hizalama -mstrict-hizalama -mno-katı hizalama - yeniden yerleştirilebilir -mno-taşınabilir
-mrelocable-lib -mno-yeniden konumlandırılabilir-lib -mtoc -mno-toc -biraz -küçük endian
-büyük -big-endian -mdinamik-resimsiz -maltivec -mswdiv -msingle-pic-base
-mprioritize-kısıtlı-insns=öncelik -msched-maliyetli-dep=bağımlılık_tipi
-minsert-schedule-nops=plan -mcall-sysv -mcall-netbsd -maix-yapı-dönüş
-msvr4-struct-dönüş -mabi=abi tipi -msecure-plt -mbss-plt
-mblock-hareket-inline-limit=num -misel -mno-isel -misel=evet -misel=hayır -mspe -mno-spe
-mspe=evet -mspe=hayır - engelli -mgen-hücre-mikrokod -mwarn-hücre-mikrokod -mvrsave
-mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=evet -mfloat-gprs=hayır
-mfloat-gprs=tek -mfloat-gprs=çift -mprototip -mno-prototip -msim -mmvme
-deli -sarı bıçak -üye -msdata -msveri=yeğlemek -mvxworks -G num -pthread -mrecip
-mrecip=yeğlemek -mno-reçete -mrecip-hassas -mno-recip-hassas -mveclibabi=tip -mfriz
-kıvırcık -mpointers-to-iç içe-işlevler -mno-işaretçiler-iç içe-işlevler
-msave-toc-dolaylı -mno-save-toc-dolaylı -mpower8-füzyon -mno-mpower8-füzyon
-mpower8-vektör -mno-power8-vektör -mcrypto -mno-kripto -mdirect-hareket -mno-doğrudan-hareket
-mquad-bellek -mno-dörtlü-hafıza -mquad-bellek-atomik -mno-dört-bellek-atomik
-mcompat-align-parm -mno-uyumluluk-hizalama-parm
RX Opsiyonlar -m64bit-çiftler -m32bit-çiftler -fpu -nofpu -mcpu= -big-endian-veri
-mlittle-endian-veri -msmall-veri -msim -mno-sim -mas100-sözdizimi -mno-as100-sözdizimi
-mrelax -mmax-sabit-boyut= -nane-kayıt= -mpid -mno-uyarı-çoklu-hızlı-kesmeler
-msave-acc-in-kesmeler
S / 390 ve zSerisi Opsiyonlar -mtune=işlemci tipi -mart=işlemci tipi -mhard-şamandıra -msoft-float
-mhard-dfp -mno-zor-dfp -mlong-çift-64 -mlong-çift-128 -mbackchain
-mno-arka zincir -mpacked-yığın -mno-paketlenmiş-yığın -msmall-exec -mno-küçük-yürütme
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-hata ayıklama -mesa -mzarch -mtpf-izi
-mno-tpf-izleme -mfused-deli -mno-kaynaşmış-madd -mwarn-çerçeve boyutu -mwarn-dinamik yığın
-mstack boyutu -mstack-koruma -mhotpatch=yarım kelimeler,yarım kelimeler
Puan Opsiyonlar -meb -mel -mnhwloop - muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d
SH Opsiyonlar -m1 -m2 -m2e -m2a-nofpu -m2a-tek-sadece -m2a-tek -m2a -m3 -m3e
-m4-nofpu -m4-yalnızca -m4-tek -m4 -m4a-nofpu -m4a-tek-sadece -m4a-tek
-m4a -m4al -m5-64medya -m5-64media-nofpu -m5-32medya -m5-32media-nofpu -m5-kompakt
-m5-kompakt-nofpu -mb -ml -mdalign -mrelax -bigtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -mieee -mno-ieee -mbittoplar -missize -minline-ic_invalidate
-mpadstruct -mspace -mprefergot -müzer modu -çok maliyet=numara -mdiv=strateji
-mdivsi3_libfunc=isim -mfixed-aralık=kayıt aralığı -mindexed-adresleme
-mgettrcost=numara -mpt-sabit -maccumulate-giden-arglar -minvalid-semboller
-matomik-model=atom modeli -mbranch-maliyet=num -mzdcbranch -mno-zdcbranch -mcbranchdi
-mcmpeqdi -mfused-deli -mno-kaynaşmış-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
-impretend-cmove -mtas
Solaris 2 Opsiyonlar -mimpur-metin -mno-saf olmayan-metin -pthread'ler -pthread
SPARC Opsiyonlar -mcpu=işlemci tipi -mtune=işlemci tipi -mcmodel=kod modeli -mbellek-modeli=insan toplulukları tarafından
model -m32 -m64 -mapp-reg'ler -mno-app-regs -mfaster-yapıları -mno-daha hızlı-yapılar
-mflat -mno-düz -mfpu -mno-fpu -mhard-şamandıra -msoft-float -mhard-dörtlü-şamandıra
-msoft-dörtlü-şamandıra -mstack-bias -mno-yığın önyargısı -düzensiz-çiftler
-mno-hizasız-çiftler -muser-modu -mno-kullanıcı modu -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699
SPU Opsiyonlar -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma -mbranch-ipuçları
-msmall-mem -mlarge-mem -mstdmain -mfixed-aralık=kayıt aralığı -mea32 -mea64
-madress-space-dönüşüm -mno-adres-alanı-dönüşüm -mcache-boyutu=önbellek boyutu
-matomik-güncellemeler -mno-atomik-güncellemeler
sistem V Opsiyonlar -Qy -Qn -YP,yolları -Ym,dir
KARO-Gx Opsiyonlar -mcpu=cpu -m32 -m64 -mcmodel=kod modeli
TILEPro Opsiyonlar -mcpu=cpu -m32
V850 Opsiyonlar -mlong-çağrıları -çok uzun aramalar -mep -mno-ep -mprolog-fonksiyonu
-mno-prolog-fonksiyonu -mspace -mtda=n -msda=n -mzda=n -mapp-reg'ler -mno-app-regs
-mdisable-çağrı -mno-devre dışı-çağrı -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -loop -mrelax -mlong-zıplamalar -msoft-float -mhard-şamandıra -mgcc-abi
-mrh850-abi -big-anahtar
VAX Opsiyonlar -mg -mgnu -munix
VMS Opsiyonlar -mvms-dönüş-kodları -mdebug-ana=önek -mmalloc64 -mpointer-boyutu=boyut
VxWorks Opsiyonlar -mrtp -statik olmayan -Bstatik -Bdinamik -Xbind-tembel -Xbind-şimdi
x86-64 Opsiyonlar i386 ve x86-64 Seçeneklerine bakın.
Xstormy16 Opsiyonlar -msim
Xtensa Opsiyonlar -mconst16 -mno-const16 -mfused-deli -mno-kaynaşmış-madd -mforce-no-resim
-mserialize-uçucu -mno-seri hale getir-uçucu -mtext-bölüm değişmezleri
-mno-metin-bölümü-harf değerleri -mtarget-hizalama -mno-hedef hizalama -mlongcall'lar
-mno-uzun aramalar
zSerisi Opsiyonlar S/390 ve zSeries Seçeneklerine bakın.
Kod nesil Opsiyonlar
-fcall-kaydedildi-reg -fcall-kullanılmış-reg -sabitlenmiş-reg -istisnalar -fnon-çağrı-istisnaları
-fdelete-ölü-istisnalar -funwind-tabloları -fasenkronize-çözme-tabloları -fno-gnu-benzersiz
-finhibit-size-direktifi -enstrüman-fonksiyonları
-finstrument-fonksiyonları-hariç tutma-fonksiyonu-listesi=sym,sym, ...
-finstrument-fonksiyonlar-hariç tutma-dosya listesi=dosya,dosya, ... -fno-ortak -fno-kimliği
-fpcc-yapı-dönüş -fpic -fPIC -fpie -fPIE -fno-atlama-tabloları -frecord-gcc-anahtarları
-freg-struct-dönüş -fshort-enumlar -fshort-double -fshort-wchar -fverbose-asm
-fpack-yapısı[=n] -fstack-kontrol -fstack-limit-kayıt=reg -fstack-limit-sembol=sym
-fno-yığın limiti -fsplit-yığın -geçen-alt çizgi -ftls-modeli=model
-fstack-yeniden kullanım=yeniden kullanım_seviyesi -ftrapv -fwrapv -fbounds-kontrol -görünürlük
-fstrict-uçucu-bit alanları -fsync-libçağrıları
Opsiyonlar Denetleme the Nezaket. of Çıktı
Derleme dört aşamaya kadar içerebilir: ön işleme, uygun derleme, montaj ve
bağlantı, her zaman bu sırayla. GCC, birkaç ön işleme ve derleme yeteneğine sahiptir.
dosyaları ya birkaç montajcı giriş dosyasına ya da bir montajcı giriş dosyasına; sonra
her bir montajcı giriş dosyası bir nesne dosyası üretir ve bağlama tüm nesneyi birleştirir
dosyaları (yeni derlenenler ve girdi olarak belirtilenler) yürütülebilir bir dosyaya dönüştürün.
Herhangi bir girdi dosyası için, dosya adı soneki ne tür bir derleme olduğunu belirler.
done:
dosya.c
Önceden işlenmesi gereken C kaynak kodu.
dosya.i
Önceden işlenmemesi gereken C kaynak kodu.
dosya.ii
Önceden işlenmemesi gereken C++ kaynak kodu.
dosya.m
Objective-C kaynak kodu. ile bağlantı kurmanız gerektiğini unutmayın. libobjc yapmak için kitaplık
Objective-C programı çalışması.
dosya.mi
Önceden işlenmemesi gereken Objective-C kaynak kodu.
dosya, mm
dosya.M
Objective-C++ kaynak kodu. ile bağlantı kurmanız gerektiğini unutmayın. libobjc kitaplık yapmak
bir Objective-C++ programı çalışması. Bunu not et .M harfi harfine büyük M anlamına gelir.
dosya.mii
Önceden işlenmemesi gereken Objective-C++ kaynak kodu.
dosya.h
Önceden derlenmiş bir dosyaya dönüştürülecek C, C++, Objective-C veya Objective-C++ başlık dosyası
başlık (varsayılan) veya bir Ada özelliğine dönüştürülecek C, C++ başlık dosyası (
-fdump-ada-spec değiştirmek).
dosya. Cc
dosya.cp
dosya.cxx
dosya.cpp
dosya.CPP
dosya.c++
dosya.C
Önceden işlenmesi gereken C++ kaynak kodu. Şuna dikkat edin: .cxx, son iki harf
ikisi de tam anlamıyla olmalı x. Aynı şekilde, .C gerçek bir büyük harf C'yi ifade eder.
dosya, mm
dosya.M
Önceden işlenmesi gereken Objective-C++ kaynak kodu.
dosya.mii
Önceden işlenmemesi gereken Objective-C++ kaynak kodu.
dosya.hh
dosya.H
dosya.hp
dosya.hxx
dosya.hpp
dosya.HES
dosya.h++
dosya.tcc
Önceden derlenmiş bir başlığa veya Ada spesifikasyonuna dönüştürülecek C++ başlık dosyası.
dosya.f
dosya.için
dosya.ftn
Önceden işlenmemesi gereken sabit form Fortran kaynak kodu.
dosya.F
dosya.İÇİN
dosya.fpp
dosya.FPP
dosya.FTN
Önceden işlenmesi gereken sabit form Fortran kaynak kodu (geleneksel
ön işlemci).
dosya.f90
dosya.f95
dosya.f03
dosya.f08
Önceden işlenmemesi gereken serbest biçimli Fortran kaynak kodu.
dosya.F90
dosya.F95
dosya.F03
dosya.F08
Önceden işlenmesi gereken serbest biçimli Fortran kaynak kodu (geleneksel
ön işlemci).
dosya.Git
Kaynak koduna gidin.
dosya.reklamlar
Bir kitaplık birimi bildirimi içeren Ada kaynak kodu dosyası (bir
paket, alt program veya genel veya genel bir örnekleme) veya bir kitaplık birimi
yeniden adlandırma bildirimi (bir paket, genel veya alt program yeniden adlandırma bildirimi). Çok
dosyalar da denir gözlük.
dosya.adb
Bir kitaplık birimi gövdesi (bir alt program veya paket gövdesi) içeren Ada kaynak kodu dosyası.
Bu tür dosyalar da denir organları.
dosya.d
D kaynak kodu dosyası.
dosya.di
D arayüzü kod dosyası.
dosya.dd
D dokümantasyon kod dosyası.
dosya.s
Montajcı kodu.
dosya.S
dosya.sx
Önceden işlenmesi gereken birleştirici kodu.
diğer
Doğrudan bağlantıya beslenecek bir nesne dosyası. Tanınmayan herhangi bir dosya adı
eki bu şekilde işlenir.
Giriş dilini açıkça belirtebilirsiniz. -x seçenek:
-x dil
açıkça belirtin dil aşağıdaki girdi dosyaları için (izin vermek yerine
derleyici, dosya adı son ekine göre bir varsayılan seçer). Bu seçenek hepsi için geçerlidir
girdi dosyalarını bir sonrakine kadar takip etmek -x seçenek. için olası değerler dil şunlardır:
c c-başlığı cpp-çıktı
c++ c++-başlık c++-cpp-çıktı
objektif-c objektif-c-başlık objektif-c-cpp-çıktı
objektif-c++ objektif-c++-başlık objektif-c++-cpp-çıktı
cpp ile montajcı montajcı
ada
d
f77 f77-cpp-girişi f95 f95-cpp-girişi
go
Java
-x Yok
Bir dilin herhangi bir belirtimini kapatın, böylece sonraki dosyalar işlenir
dosya adı son eklerine göre (oldukları gibi) -x hiç kullanılmamıştır).
-geçiş-çıkış-kodları
Normalde gcc derleyicinin herhangi bir aşaması geri dönerse program 1 koduyla çıkar
Başarısız bir dönüş kodu. belirtirseniz -geçiş-çıkış-kodları, gcc bunun yerine program
hata veren herhangi bir faz tarafından üretilen sayısal olarak en yüksek hatayla döner
gösterge. Dahili bir derleyici hatası varsa C, C++ ve Fortran ön uçları 4 döndürür
karşılaşıldı.
Derlemenin yalnızca bazı aşamalarını istiyorsanız, kullanabilirsiniz. -x (veya dosya adı sonekleri)
söylemek gcc nereden başlamalı ve seçeneklerden biri -c, -Sya da -E nerede olduğunu söylemek gcc etmektir
Dur. Bazı kombinasyonların (örneğin, -x cpp-çıktı -E) öğretmek gcc yapmak için
hiçbir şey.
-c Kaynak dosyaları derleyin veya birleştirin, ancak bağlantı kurmayın. Bağlantı aşaması basitçe
bitmiş değil. Nihai çıktı, her kaynak dosya için bir nesne dosyası biçimindedir.
Varsayılan olarak, bir kaynak dosyanın nesne dosyası adı, sonek değiştirilerek yapılır. .c,
.i, .s, vb. ile .o.
Derleme veya derleme gerektirmeyen tanınmayan girdi dosyaları yoksayılır.
-S Derleme aşamasından sonra uygun şekilde durun; toplamayın. Çıktı şurada
Belirtilen her bir montajcı olmayan girdi dosyası için bir montajcı kod dosyası formu.
Varsayılan olarak, bir kaynak dosyanın montajcı dosyası adı, sonek değiştirilerek yapılır.
.c, .i, vb. ile .s.
Derleme gerektirmeyen girdi dosyaları yok sayılır.
-E Ön işleme aşamasından sonra durun; derleyiciyi uygun şekilde çalıştırmayın. çıktı
standart çıktıya gönderilen önceden işlenmiş kaynak kodu biçimi.
Ön işleme gerektirmeyen girdi dosyaları yoksayılır.
-o dosya
Çıktıyı dosyaya yerleştirin dosya. Bu, üretilen her tür çıktı için geçerlidir,
yürütülebilir bir dosya, bir nesne dosyası, bir montajcı dosyası veya önceden işlenmiş C olup olmadığı
kodu.
If -o belirtilmemişse, varsayılan, yürütülebilir bir dosya koymaktır. a.dışarı, nesne
Dosya için kaynak.sonek in kaynak.o, onun assembler dosyası kaynak.s, önceden derlenmiş
başlık dosyası kaynak.sonek.gchve standart çıktıdaki tüm önceden işlenmiş C kaynakları.
-v Aşamalarını çalıştırmak için yürütülen komutları yazdırın (standart hata çıktısında).
derleme. Ayrıca derleyici sürücü programının ve programın sürüm numarasını da yazdırın.
önişlemci ve uygun derleyici.
-###
Facebok sayfasını beğenin : -v komutların yürütülmemesi ve bağımsız değişkenlerin alıntılanmadıkça alıntılanması dışında
yalnızca alfasayısal karakterler veya "./-_" içerir. Bu, kabuk komut dosyalarının
sürücü tarafından oluşturulan komut satırlarını yakalayın.
-boru
Çeşitli aşamalar arasındaki iletişim için geçici dosyalar yerine borular kullanın.
derleme. Bu, montajcının okuyamadığı bazı sistemlerde çalışmaz.
bir borudan; ancak GNU derleyicisinin hiçbir sıkıntısı yoktur.
--yardım et
(standart çıktıda) tarafından anlaşılan komut satırı seçeneklerinin bir açıklamasını yazdırın.
gcc. Eğer -v seçenek de daha sonra belirtilir --yardım et ayrıca çeşitli aktarılır
tarafından çağrılan süreçler gcc, böylece komut satırı seçeneklerini görüntüleyebilirler.
kabul. Eğer -Ekstra seçeneği de belirtildi (önce --yardım et seçenek),
daha sonra, kendileriyle ilişkili hiçbir belgeye sahip olmayan komut satırı seçenekleri de
Görüntülenen.
--hedef-yardım
Hedefe özel komut satırı seçeneklerinin açıklamasını (standart çıktıda) yazdırın
her araç için. Bazı hedefler için ekstra hedefe özel bilgiler de olabilir.
basılı.
--yardım={sınıf|[^]niteleyici}[, ...]
(standart çıktıda) tarafından anlaşılan komut satırı seçeneklerinin bir açıklamasını yazdırın.
belirtilen tüm sınıflara ve niteleyicilere uyan derleyici. Bunlar
desteklenen sınıflar:
optimize
Derleyici tarafından desteklenen tüm optimizasyon seçeneklerini görüntüleyin.
uyarılar
Derleyici tarafından üretilen uyarı mesajlarını kontrol eden tüm seçenekleri görüntüleyin.
hedef
Hedefe özel seçenekleri görüntüleyin. aksine --hedef-yardım Ancak seçenek, hedef-
bağlayıcı ve birleştiricinin belirli seçenekleri görüntülenmez. Bunun nedeni ise
bu araçlar şu anda genişletilmiş --yardım= sözdizimi.
params
tarafından tanınan değerleri görüntüleyin. --param seçeneği.
dil
için desteklenen seçenekleri görüntüleyin dil, Burada dil birinin adıdır
GCC'nin bu sürümünde desteklenen diller.
ortak
Tüm dillerde ortak olan seçenekleri görüntüleyin.
Bunlar desteklenen niteleyicilerdir:
belgesiz
Yalnızca belgelenmemiş seçenekleri görüntüleyin.
katıldı
Aynı yerde eşittir işaretinden sonra görünen bir argüman alan görüntüleme seçenekleri
sürekli metin parçası, örneğin: --help=hedef.
ayrı
Aşağıdaki ayrı bir kelime olarak görünen bir argüman alarak seçenekleri görüntüleyin.
orijinal seçenek, örneğin: -o çıktı dosyası.
Bu nedenle, örneğin, tarafından desteklenen tüm belgelenmemiş hedefe özgü anahtarları görüntülemek için
derleyici, şunu kullanın:
--help=hedef,belgelenmemiş
Bir niteleyicinin anlamı, ön eki eklenerek tersine çevrilebilir. ^ karakter, yani
tüm ikili uyarı seçeneklerini görüntülemek için örnek (yani, açık veya kapalı olanlar
ve bir argüman almayan) bir açıklaması olan, şunu kullanın:
--help=uyarılar,^katıldı,^belgelenmemiş
argüman --yardım= yalnızca ters çevrilmiş niteleyicilerden oluşmamalıdır.
Birkaç sınıfı birleştirmek mümkündür, ancak bu genellikle çıktıyı kısıtlar.
o kadar ki gösterilecek bir şey yok. Bununla birlikte, işe yaradığı bir durum,
sınıflardan biri hedef. Örneğin, hedefe özgü tüm bilgileri görüntülemek için
optimizasyon seçenekleri, şunu kullanın:
--help=hedef, optimize ediciler
The --yardım= seçenek komut satırında tekrarlanabilir. Her ardışık kullanım görüntülenir
zaten görüntülenenleri atlayarak, istenen seçenek sınıfı.
Eğer -Q seçeneği, komut satırından önce görünür. --yardım= seçeneği, ardından
tarafından görüntülenen açıklayıcı metin --yardım= değişti. Görüntülenenleri açıklamak yerine
seçenekleri, seçeneğin etkin, devre dışı veya ayarlanmış olduğuna dair bir gösterge verilir.
belirli bir değere (derleyicinin bunu
--yardım= seçeneği kullanılır).
İşte ARM bağlantı noktasından kesilmiş bir örnek gcc:
% gcc -Q -mabi=2 --help=hedef -c
Aşağıdaki seçenekler hedefe özeldir:
-mabi= 2
-mabort-on-noreturn [devre dışı]
-mapcs [devre dışı]
Çıktı, önceki komut satırı seçeneklerinin etkilerine duyarlıdır, bu nedenle
Örneğin, hangi optimizasyonların etkinleştirildiğini bulmak mümkündür. -O2 kullanarak:
-Q -O2 --help=iyileştiriciler
Alternatif olarak, hangi ikili optimizasyonların etkinleştirildiğini keşfedebilirsiniz. -O3 kullanarak:
gcc -c -Q -O3 --help=iyileştiriciler > /tmp/O3-opts
gcc -c -Q -O2 --help=iyileştiriciler > /tmp/O2-opts
fark /tmp/O2 seçenekleri /tmp/O3 seçenekleri | grep etkin
-kanonik olmayan önekler
Herhangi bir sembolik bağı genişletmeyin, referansları çözümleyin /../ or /./ya da yol yap
göreli bir önek oluştururken mutlak.
--versiyon
Çağrılan GCC'nin sürüm numarasını ve telif haklarını görüntüleyin.
-sarmalayıcı
Bir sarmalayıcı program altındaki tüm alt komutları çağırın. Sarma programının adı ve
parametreleri virgülle ayrılmış bir liste olarak iletilir.
gcc -c tc -sarmalayıcı gdb,--args
Bu, tüm alt programlarını çağırır gcc altında gdb --args, böylece çağırma cc1 is
gdb --args cc1 Kendi ID’n ile mağazalarını oluştur.
-feklenti=isim.yani
Eklenti kodunu dosyaya yükleyin isim.so, tarafından silinecek paylaşılan bir nesne olduğu varsayılır
derleyici. Eklentiyi tanımlamak için paylaşılan nesne dosyasının temel adı kullanılır.
argüman ayrıştırma amaçları için (Bkz. -fplugin-arg-isim-anahtar=değer aşağıda). Her biri
eklenti, Eklentiler API'sinde belirtilen geri arama işlevlerini tanımlamalıdır.
-fplugin-arg-isim-anahtar=değer
adlı bir argüman tanımlayın anahtar değeri olan değer denilen eklenti için isim.
-fdump-ada-spec[-ince]
C ve C++ kaynağı ve içerme dosyaları için ilgili Ada özelliklerini oluşturun.
-fada-spec-ebeveyn=birim
İle birlikte -fdump-ada-spec[-ince], aşağıdakilerin alt birimleri olarak Ada özelliklerini oluşturun
ebeveyn birim.
-fdump-go-spec=dosya
Herhangi bir dilde girdi dosyaları için, ilgili Go bildirimlerini şurada oluşturun: dosya. Bu
yararlı bir yol olabilecek Go "const", "type", "var" ve "func" bildirimlerini oluşturur
başka bir dilde yazılmış koda bir Go arayüzü yazmaya başlamak için.
@dosya
Komut satırı seçeneklerini şuradan okuyun: dosya. Okunan seçenekler yerine eklenir.
orijinal @dosya seçenek. Eğer dosya mevcut değilse veya okunamıyorsa, seçenek
kelimenin tam anlamıyla işlenecek ve kaldırılmayacaktır.
İçindeki seçenekler dosya boşluk ile ayrılır. Bir boşluk karakteri dahil edilebilir
tüm seçeneği tek veya çift tırnak içine alarak bir seçenekte. Herhangi
karakter (ters eğik çizgi dahil), kullanılacak karakterin önüne eklenerek dahil edilebilir.
ters eğik çizgi ile dahil edilmiştir. NS dosya kendisi ek @ içerebilirdosya seçenekler; herhangi
bu tür seçenekler özyinelemeli olarak işlenecektir.
Derleme C + + Programlar
C++ kaynak dosyaları geleneksel olarak son eklerden birini kullanır .C, . Cc, .cpp, .CPP, .c++, .cpya da
.cxx; C++ başlık dosyaları genellikle .hh, .hpp, .H, veya (paylaşılan şablon kodu için) .tcc; Ve
önceden işlenmiş C++ dosyaları soneki kullanır .ii. GCC, bu adlara sahip dosyaları tanır ve
derleyiciyi derlemeyle aynı şekilde çağırsanız bile bunları C++ programları olarak derler
C programları (genellikle gcc).
Ancak, gcc C++ kitaplığını eklemez. g ++ GCC'yi çağıran bir programdır ve
otomatik olarak C++ kitaplığına bağlanmayı belirtir. davranır .c, .h ve .i dosya olarak
C kaynak dosyaları yerine C++ kaynak dosyaları -x kullanıldı. Bu program da işe yarar
ile bir C başlık dosyasını önceden derlerken .h C++ derlemelerinde kullanım için uzantı. Açık
birçok sistem, g ++ ayrıca adıyla yüklenir c ++.
C++ programlarını derlerken, aynı komut satırı seçeneklerinin çoğunu belirtebilirsiniz.
programları herhangi bir dilde derlemek için kullanırsınız; veya C için anlamlı komut satırı seçenekleri
ve ilgili diller; veya yalnızca C++ programları için anlamlı olan seçenekler.
Opsiyonlar Denetleme C diyalekt
Aşağıdaki seçenekler, C'nin lehçesini (veya C'den türetilen C++ gibi dilleri) kontrol eder.
Derleyicinin kabul ettiği Objective-C ve Objective-C++):
-ansi
C modunda, bu eşdeğerdir -std = c90. C++ modunda, eşdeğerdir
-std=c++98.
Bu, GCC'nin ISO C90 ile uyumlu olmayan belirli özelliklerini kapatır (
C kodu derleme) veya standart C++ (C++ kodu derlerken), örneğin "asm" ve
"typeof" anahtar sözcükleri ve "unix" ve "vax" gibi önceden tanımlanmış makrolar
Kullanmakta olduğunuz sistem türü. Ayrıca istenmeyen ve nadiren kullanılan ISO
trigraf özelliği. C derleyicisi için C++ stilinin tanınmasını devre dışı bırakır //
yorumların yanı sıra "satır içi" anahtar kelime.
Alternatif anahtar kelimeler "__asm__", "__extension__", "__inline__" ve "__typeof__"
rağmen çalışmaya devam -ansi. Bunları bir ISO C programında kullanmak istemezsiniz,
elbette, ancak bunları, dahil edilebilecek başlık dosyalarına koymak yararlıdır.
ile yapılan derlemeler -ansi. "__unix__" gibi alternatif önceden tanımlanmış makrolar ve
"__vax__" ile veya olmadan da mevcuttur -ansi.
The -ansi seçeneği, ISO dışı programların karşılıksız olarak reddedilmesine neden olmaz. İçin
Bu, -Wpedantik ek olarak gereklidir -ansi.
"__STRICT_ANSI__" makrosu, -ansi seçeneği kullanılır. Bazı başlık
dosyalar bu makroyu fark edebilir ve belirli işlevleri bildirmekten veya tanımlamaktan kaçınabilir.
ISO standardının gerektirmediği belirli makrolar; bu karışmayı önlemek içindir
bu isimleri başka şeyler için kullanabilecek herhangi bir programla.
Normalde yerleşik olan, ancak ISO C tarafından tanımlanmış semantiği olmayan işlevler (örn.
"alloca" ve "ffs") yerleşik işlevler olmadığında -ansi kullanıldı.
-std=
Dil standardını belirleyin. Bu seçenek şu anda yalnızca şu durumlarda desteklenmektedir:
C veya C++ derleme.
Derleyici, aşağıdakiler gibi birkaç temel standardı kabul edebilir: c90 or c++98, ve GNU lehçeleri
gibi bu standartların gnu90 or gnu+98. Bir temel standart belirtildiğinde,
derleyici, bu standardı izleyen tüm programları ve GNU uzantılarını kullananları kabul eder.
bu onunla çelişmez. Örneğin, -std = c90 GCC'nin belirli özelliklerini kapatır
"asm" ve "typeof" anahtar sözcükleri gibi ISO C90 ile uyumlu olmayan, ancak
atlamak gibi ISO C90'da bir anlamı olmayan diğer GNU uzantıları
"?:" ifadesinin orta terimi. Öte yandan, bir standardın GNU lehçesi
belirtilirse, derleyici tarafından desteklenen tüm özellikler etkinleştirilir, bunlar
özellikler temel standardın anlamını değiştirir. Sonuç olarak, bazı katı kurallar
programlar reddedilebilir. Belirli bir standart tarafından kullanılır -Wpedantik tanımlamak
hangi özellikler standardın o sürümü verilen GNU uzantılarıdır. Örneğin
-std=gnu90 -Wpedantik C++ stili hakkında uyarır // yorumlar, bu arada -std=gnu99 -Wpedantik
değil.
Bu seçenek için bir değer sağlanmalıdır; olası değerler
c90
c89
iso9899:1990
Tüm ISO C90 programlarını destekleyin (ISO C90 ile çakışan belirli GNU uzantıları)
devre dışı). İle aynı -ansi C kodu için.
iso9899:199409
Değişiklik 90'de değiştirildiği şekliyle ISO C1.
c99
c9x
iso9899:1999
iso9899:199x
ISO C99. Bu standardın henüz tam olarak desteklenmediğini unutmayın; görmek
<http://gcc.gnu.org/c99status.html> daha fazla bilgi için. İsimler c9x ve
iso9899:199x kullanımdan kaldırıldı.
c11
c1x
iso9899:2011
ISO C11, ISO C standardının 2011 revizyonu. Destek eksik ve
deneysel. İsim c1x kullanımdan kaldırıldı.
gnu90
gnu89
ISO C90'ın GNU lehçesi (bazı C99 özellikleri dahil). Bu, C için varsayılandır
kodu.
gnu99
gnu9x
ISO C99'un GNU lehçesi. ISO C99, GCC'de tam olarak uygulandığında, bu
varsayılan olun. İsim gnu9x kullanımdan kaldırıldı.
gnu11
gnu1x
ISO C11'in GNU lehçesi. Destek eksik ve deneyseldir. İsim gnu1x
kullanımdan kaldırıldı.
c++98
c++03
1998 ISO C++ standardı artı 2003 teknik düzeltmesi ve bazı ek
kusur raporları. İle aynı -ansi C++ kodu için.
gnu+98
gnu+03
GNU lehçesi -std=c++98. Bu, C++ kodu için varsayılandır.
c++11
c++0x
2011 ISO C++ standardı artı değişiklikler. C++11 desteği devam ediyor
deneyseldir ve gelecekteki sürümlerde uyumsuz şekillerde değişebilir. İsim
c++0x kullanımdan kaldırıldı.
gnu+11
gnu++0x
GNU lehçesi -std=c++11. C++11 desteği hala deneyseldir ve değişebilir
gelecekteki sürümlerde uyumsuz şekillerde. İsim gnu++0x kullanımdan kaldırıldı.
c++1y
2017 için geçici olarak planlanan ISO C++ standardının bir sonraki revizyonu. Destek
oldukça deneyseldir ve neredeyse kesinlikle uyumsuz şekillerde değişecektir.
gelecek sürümler.
gnu++1y
GNU lehçesi -std=c++1y. Destek son derece deneyseldir ve neredeyse
gelecekteki sürümlerde kesinlikle uyumsuz şekillerde değişir.
-fgnu89-satır içi
Seçenek -fgnu89-satır içi GCC'ye "satır içi" için geleneksel GNU semantiğini kullanmasını söyler
C99 modundayken çalışır.
Bu seçenek, GCC 4.1.3'e kadar olan ancak dahil edilmeyen sürümler tarafından kabul edilir ve yok sayılır.
4.3. GCC 4.3 ve sonraki sürümlerinde, GCC'nin C99 modundaki davranışını değiştirir. kullanma
bu seçenek, kabaca "gnu_inline" işlev özniteliğini tümüne eklemeye eşdeğerdir.
satır içi işlevler.
Seçenek -fno-gnu89-satır içi açıkça GCC'ye C99 semantiğini kullanmasını söyler
C99 veya gnu99 modundayken "satır içi" (yani, varsayılan davranışı belirtir). Bu
seçeneği ilk olarak GCC 4.3'te desteklenmiştir. Bu seçenek şurada desteklenmiyor: -std = c90 or
-std=gnu90 modu.
"__GNUC_GNU_INLINE__" ve "__GNUC_STDC_INLINE__" önişlemci makroları kullanılabilir
"satır içi" işlevler için hangi anlambilimin geçerli olduğunu kontrol etmek için.
-yardımcı bilgi Dosya
Bildirilen tüm işlevler için verilen dosya adı prototip bildirimlerine çıktı ve/veya
başlık dosyalarındakiler de dahil olmak üzere bir çeviri biriminde tanımlanır. Bu seçenek
C dışındaki herhangi bir dilde sessizce göz ardı edilir.
Bildirimlerin yanı sıra dosya, yorumlarda her bir bildirimin kaynağını belirtir.
(kaynak dosya ve satır), beyanın örtük, prototip veya
prototiplenmemiş (I, N yeni veya O sırasıyla eski için, sonraki ilk karakterde
satır numarası ve iki nokta üst üste) ve bir bildirimden mi yoksa bir tanımdan mı geldiğini
(C or F, sırasıyla aşağıdaki karakterde). fonksiyon durumunda
tanımları, K&R tarzı bir argüman listesi ve ardından beyanları da
beyandan sonra, yorumlar içinde sağlanmıştır.
-nadas-parametresiz-variadik-fonksiyonlar
Adlandırılmış parametreler olmadan değişken işlevleri kabul edin.
Böyle bir fonksiyon tanımlamak mümkün olsa da, olduğu gibi bu çok kullanışlı değildir.
argümanları okumak mümkün değil. Bu yapı olduğu için bu yalnızca C için desteklenir
C++ tarafından izin verilir.
-fno-asm
Kodun bunları kullanabilmesi için "asm", "inline" veya "typeof" kelimelerini anahtar kelime olarak algılamayın.
tanımlayıcılar olarak kelimeler. "__asm__", "__inline__" ve
Bunun yerine "__typeof__". -ansi ima -fno-asm.
C++'da bu anahtar yalnızca "typeof" anahtar sözcüğünü etkiler, çünkü "asm" ve "inline"
standart anahtar kelimeler. kullanmak isteyebilirsiniz -fno-gnu-anahtar kelimeler bunun yerine bayrak,
aynı etki. C99 modunda (-std = c99 or -std=gnu99), bu anahtar yalnızca
"satır içi", ISO C99'da standart bir anahtar sözcük olduğundan, "asm" ve "typeof" anahtar sözcükleri.
-fno-yerleşik
-fno-yerleşik-işlev
İle başlamayan yerleşik işlevleri tanıma __yerleşik_ ön ek olarak.
GCC normalde belirli yerleşik işlevleri işlemek için özel kod üretir.
verimli; örneğin, "alloca" çağrıları tek bir talimat haline gelebilir ve
yığını doğrudan ayarlayın ve "memcpy" çağrıları satır içi kopya döngüleri haline gelebilir. NS
sonuçta ortaya çıkan kod genellikle hem daha küçük hem de daha hızlıdır, ancak işlev hayır çağırdığından
gibi görünürse, bu aramalarda bir kesme noktası belirleyemez veya değiştiremezsiniz.
farklı bir kitaplıkla bağlantı kurarak işlevlerin davranışı. Ayrıca, ne zaman
bir işlev yerleşik bir işlev olarak tanınırsa, GCC bununla ilgili bilgileri kullanabilir
bu işleve yapılan çağrılarla ilgili sorunlar hakkında uyarmak veya daha fazlasını oluşturmak için işlev
verimli kod, sonuçta ortaya çıkan kod hala o işleve yapılan çağrıları içeriyor olsa bile. İçin
örneğin, uyarılar ile verilir -W biçimi "printf" olduğunda "printf"e yapılan hatalı çağrılar için
yerleşik ve "strlen"in genel belleği değiştirmediği bilinmektedir.
İle -fno-yerleşik-işlev seçenek yalnızca yerleşik işlev işlev devre dışı.
işlev ile başlamamalı __yerleşik_. Yerleşik olmayan bir işlev adlandırılmışsa
GCC'nin bu sürümünde bu seçenek yok sayılır. karşılık gelen yok
-fbuiltin-işlev seçenek; yerleşik işlevleri seçici olarak etkinleştirmek istiyorsanız,
kullanma -fno-yerleşik or -bağımsız, aşağıdaki gibi makrolar tanımlayabilirsiniz:
#define abs(n) __builtin_abs ((n))
#define strcpy(d, s) __builtin_strcpy ((d), (s))
-Fhosted
Derlemenin barındırılan bir ortamı hedeflediğini iddia edin. Bu şu anlama gelir: -fyerleşik. bir
barındırılan ortam, tüm standart kitaplığın mevcut olduğu ortamdır ve
hangi "main", "int" dönüş türüne sahiptir. Örnekler, bir hariç neredeyse her şeydir.
çekirdek. Bu eşdeğerdir -fno-bağımsız.
-bağımsız
Derlemenin bağımsız bir ortamı hedeflediğini iddia edin. Bu şu anlama gelir:
-fno-yerleşik. Bağımsız bir ortam, standart kitaplığın bulunamayacağı bir ortamdır.
vardır ve program başlangıcı mutlaka "ana" konumda olmayabilir. En bariz örnek
bir işletim sistemi çekirdeğidir. Bu eşdeğerdir -fno tarafından barındırılan.
-fopenmp
C/C++'da "#pragma omp" ve Fortran'da "!$omp" OpenMP yönergelerinin işlenmesini etkinleştirin.
Ne zaman -fopenmp belirtilirse, derleyici buna göre paralel kod üretir.
OpenMP Uygulama Programı Arayüzü v3.0http://www.openmp.org/>. Bu seçenek
ima -pthreadve bu nedenle yalnızca desteği olan hedeflerde desteklenir.
-pthread.
-fgnu-tm
Seçenek ne zaman -fgnu-tm belirtilirse, derleyici Linux için kod üretir.
Intel'in mevcut İşlemsel Bellek ABI belirtim belgesinin bir çeşidi (Revizyon
1.1, 6 Mayıs 2009). Bu, arayüzü değişebilen deneysel bir özelliktir.
resmi spesifikasyon değiştikçe GCC'nin gelecekteki sürümleri. lütfen unutmayın
tüm mimariler bu özellik için desteklenir.
GCC'nin işlem belleği desteği hakkında daha fazla bilgi için,
İşlem belleği özelliğinin, çağrı dışı istisnalarla desteklenmediğini unutmayın.
(-fnon-çağrı-istisnaları).
-fms-uzantıları
Microsoft başlık dosyalarında kullanılan bazı standart dışı yapıları kabul edin.
C++ kodunda bu, yapılardaki üye adlarının önceki türlere benzer olmasına izin verir.
beyanları.
typedef int UOW;
yapı ABC {
uuuuuuuuu;
};
Yapılarda ve birliklerde adsız alanların bazı durumları yalnızca bununla kabul edilir.
seçeneği.
-fplan9-uzantıları
Plan 9 kodunda kullanılan bazı standart dışı yapıları kabul edin.
Bu, -fms-uzantıları, anonim yapılara işaretçilerin iletilmesine izin verir
alanlar, alan türünün öğelerine işaretçiler bekleyen işlevlere ve
typedef kullanılarak bildirilen anonim alanlara başvurmaya izin verir. Bu sadece
C++ için değil, C için desteklenir.
-trigraflar
ISO C trigraflarını destekleyin. NS -ansi seçeneği (ve -std katı ISO C seçenekleri
uygunluk) ima eder -trigraflar.
-geleneksel
-geleneksel-cpp
Önceden, bu seçenekler GCC'nin standart öncesi bir C derleyicisini taklit etmeye çalışmasına neden oluyordu.
Artık yalnızca şunlarla destekleniyorlar: -E değiştirmek. Önişlemci desteklemeye devam ediyor
bir standart öncesi mod. Ayrıntılar için GNU CPP kılavuzuna bakın.
-fcond-uyumsuzluğu
İkinci ve üçüncü bağımsız değişkenlerde eşleşmeyen türlere sahip koşullu ifadelere izin verin.
Böyle bir ifadenin değeri geçersizdir. Bu seçenek C++ için desteklenmez.
-keten-vektör-dönüşümleri
Farklı sayıda elemana sahip vektörler arasında örtük dönüşümlere izin verin ve/veya
uyumsuz eleman türleri. Bu seçenek yeni kod için kullanılmamalıdır.
-funsigned-char
"char" türünün "unsigned char" gibi imzasız olmasına izin verin.
Her tür makinenin "char"ın ne olması gerektiğine ilişkin bir varsayılanı vardır. Ya gibi
varsayılan olarak "imzasız karakter" veya varsayılan olarak "imzalı karakter" gibi.
İdeal olarak, taşınabilir bir program her zaman "imzalı karakter" veya "imzasız karakter" kullanmalıdır.
bir nesnenin imzasına bağlıdır. Ama birçok program kullanmak için yazılmıştır.
düz "char" ve imzalanmasını bekleyin veya bağlı olarak imzasız olmasını bekleyin.
onlar için yazılmış makineler. Bu seçenek ve tersi, böyle bir
program ters varsayılan ile çalışır.
"char" türü her zaman "imzalı karakter" veya "imzasız karakter" karakterlerinin her birinden farklı bir türdür.
char", davranışı her zaman bu ikisinden biri gibi olsa da.
-fsigned-char
"signed char" gibi "char" türünün imzalanmasına izin verin.
Bunun eşdeğer olduğuna dikkat edin -fno-imzasız-char, negatif formu olan
-funsigned-char. Aynı şekilde, seçenek -fno-imzalı-char eşdeğerdir
-funsigned-char.
-fsigned-bit alanları
-funsigned-bit alanları
-fno-imzalı-bit alanları
-fno-imzasız-bit alanları
Bu seçenekler, bildirim yapıldığında bir bit alanının imzalı mı yoksa imzasız mı olduğunu kontrol eder.
"imzalı" veya "imzasız" kullanmaz. Varsayılan olarak, böyle bir bit alanı imzalanır,
çünkü bu tutarlıdır: "int" gibi temel tamsayı türleri, işaretli türlerdir.
Opsiyonlar Denetleme C + + diyalekt
Bu bölüm, yalnızca C++ programları için anlamlı olan komut satırı seçeneklerini açıklar.
Programınız hangi dilde olursa olsun, GNU derleyici seçeneklerinin çoğunu da kullanabilirsiniz.
Örneğin, "firstClass.C" dosyasını şu şekilde derleyebilirsiniz:
g++ -g -frepo -O -c birinciSınıf.C
Bu örnekte yalnızca -frepo yalnızca C++ programları için tasarlanmış bir seçenektir; kullanabilirsin
GCC tarafından desteklenen herhangi bir dilde diğer seçenekler.
İşte seçeneklerin bir listesi bir tek C++ programlarını derlemek için:
-fabi-sürüm=n
Sürümü kullan n C++ ABI'nin. Varsayılan sürüm 2'dır.
Sürüm 0, C++ ABI belirtimine en yakın sürümü ifade eder.
Bu nedenle, sürüm 0 kullanılarak elde edilen ABI, G++'ın farklı sürümlerinde değişecektir.
ABI hataları düzeltildi.
Sürüm 1, ilk olarak G++ 3.2'de ortaya çıkan C++ ABI sürümüdür.
Sürüm 2, ilk olarak G++ 3.4'de ortaya çıkan C++ ABI sürümüdür.
Sürüm 3, bir sabit adresin şablon argümanı olarak yönetilmesindeki bir hatayı düzeltir.
İlk olarak G++ 4'te ortaya çıkan Sürüm 4.5, vektör için standart bir yönetme uygular.
türleri.
İlk olarak G++ 5'da ortaya çıkan Sürüm 4.6, özniteliğin bozulmasını düzeltir
fonksiyon işaretçi türlerinde const/volatile, düz bir dekl'in decltype'ı ve bir
başka bir parametrenin bildiriminde function parametresi.
İlk olarak G++ 6'de ortaya çıkan Sürüm 4.7, C++11'in yükseltme davranışını düzeltir
kapsamlı numaralandırmalar ve şablon argüman paketlerinin yönetimi, const/static_cast, prefix ++
ve -- ve şablon bağımsız değişkeni olarak kullanılan bir sınıf kapsam işlevi.
Ayrıca bakınız -Wabi.
-fno-erişim-kontrolü
Tüm erişim kontrollerini kapatın. Bu anahtar, esas olarak şuradaki hataları gidermek için kullanışlıdır:
erişim kontrol kodu.
-fcheck-yeni
"Yeni operatör" tarafından döndürülen işaretçinin boş olmadığını kontrol edin.
ayrılan depolama alanını değiştirin. Bu kontrol normalde gereksizdir çünkü C++
standart, "yeni operatör" ifadesinin yalnızca bildirilmişse 0 döndürdüğünü belirtir atmak(), içinde
bu durumda derleyici bu seçenek olmasa bile dönüş değerini her zaman kontrol eder. İçinde
diğer tüm durumlarda, "yeni operatör" boş olmayan bir istisna belirtimine sahip olduğunda, bellek
tükenme "std::bad_alloc" atılarak bildirilir. Ayrıca bakınız yeni (yok).
-fconstexpr-derinlik=n
C++11 constexpr işlevleri için maksimum iç içe değerlendirme derinliğini şu şekilde ayarlayın: n. Bir sınır
sabit ifade değerlendirmesi sırasında sonsuz özyinelemeyi algılamak için gereklidir. NS
standart tarafından belirtilen minimum 512'dir.
-fdeduce-init-listesi
Bir ayraçtan "std::initializer_list" olarak bir şablon türü parametresinin çıkarılmasını etkinleştirin.
kapalı başlatıcı listesi, yani
şablon otomatik ilet(T t) -> türü kaldır (realfn (t))
{
dönüş realfn (t);
}
geçersiz f()
{
ileri({1,2}); // Aramayı yonlendir >
}
Bu kesinti, orijinal olarak önerilenin olası bir uzantısı olarak uygulandı.
C++ 11 standardı için anlambilim, ancak nihai standardın bir parçası değildi, bu yüzden
varsayılan olarak devre dışı. Bu seçenek kullanımdan kaldırılmıştır ve gelecekte kaldırılabilir
G++ sürümü.
-arkadaş-enjeksiyon
Arkadaş işlevlerini çevreleyen ad alanına enjekte edin, böylece dışarıda görünürler
beyan edildikleri sınıfın kapsamı. Arkadaş işlevleri belgelendi
eski Açıklamalı C++ Referans Kılavuzunda ve önceki G++ sürümlerinde bu şekilde çalışmak için
4.1 hep böyle çalıştı. Ancak, ISO C++'da olmayan bir arkadaş işlevi
kapsayan bir kapsamda bildirilenler yalnızca bağımsız değişkene bağlı arama kullanılarak bulunabilir.
Bu seçenek, arkadaşların önceki sürümlerde olduğu gibi enjekte edilmesine neden olur.
Bu seçenek uyumluluk içindir ve gelecekteki bir G++ sürümünde kaldırılabilir.
-fno-elide-yapıcılar
C++ standardı, bir uygulamanın yalnızca bir geçici oluşturmayı atlamasına izin verir.
aynı türden başka bir nesneyi başlatmak için kullanılır. Bu seçeneğin belirtilmesi devre dışı bırakır
bu optimizasyon ve G++'ı her durumda kopya oluşturucuyu çağırmaya zorlar.
-fno-enforce-eh-özellikleri
Çalışma zamanında istisna belirtimlerinin ihlal edilip edilmediğini kontrol etmek için kod oluşturmayın.
Bu seçenek, C++ standardını ihlal eder, ancak kod boyutunu küçültmek için yararlı olabilir.
tanımlamaya çok benzeyen üretim yapıları DEBUG. Bu, kullanıcı kodu izni vermez
istisna özelliklerini ihlal eden istisnalar atmak; derleyici hala
spesifikasyonlara göre optimize eder, bu nedenle beklenmedik bir istisna atmak
çalışma zamanında tanımsız davranış.
-fextern-tls-init
-fno-extern-tls-init
C++11 ve OpenMP standartları izin verir thread_local ve iplik özel sahip olması gereken değişkenler
dinamik (çalışma zamanı) başlatma. Bunu desteklemek için, böyle bir değişkenin herhangi bir kullanımı
gerekli başlatma işlemlerini gerçekleştiren bir sarmalayıcı işlevi aracılığıyla. ne zaman kullanılır
ve değişkenin tanımı aynı çeviri birimindeyse, bu ek yük
optimize edilmiş, ancak kullanım farklı bir çeviri biriminde olduğunda
değişkenin gerçekten dinamik olması gerekmese bile önemli ek yük
başlatma. Programcı, değişkenin olmayan bir durumda kullanılmadığından emin olabilirse,
TU'yu tanımlamanın dinamik başlatmayı tetiklemesi gerekir (çünkü değişken
statik olarak başlatıldı veya tanımlayıcı TU'da değişkenin kullanımı yürütülecek
başka bir TU'da herhangi bir kullanımdan önce), bu ek yükü önleyebilirler.
-fno-extern-tls-init seçeneği.
Sembol takma adlarını destekleyen hedeflerde varsayılan -fextern-tls-init. Hedeflerde
sembol takma adlarını desteklemeyen, varsayılan -fno-extern-tls-init.
-ffor-kapsam
-fno-kapsam için
If -ffor-kapsam belirtilirse, bir içinde bildirilen değişkenlerin kapsamı for-init-ifadesi
ile sınırlıdır için C++ standardında belirtildiği gibi döngünün kendisini. Eğer
-fno-kapsam için belirtilirse, bir içinde bildirilen değişkenlerin kapsamı for-init-ifadesi
eski G++ sürümlerinde olduğu gibi, ek kapsamın sonuna kadar uzanır ve
C++'ın diğer (geleneksel) uygulamaları.
Her iki bayrak da verilmezse, varsayılan, standardı takip etmek, ancak izin vermek ve vermektir.
aksi takdirde geçersiz olacak veya farklı olacak eski stil kod için bir uyarı
davranışı.
-fno-gnu-anahtar kelimeler
"typeof" kelimesini anahtar kelime olarak tanıma, böylece kod bu kelimeyi bir anahtar kelime olarak kullanabilir.
tanımlayıcı. Bunun yerine "__typeof__" anahtar sözcüğünü kullanabilirsiniz. -ansi ima
-fno-gnu-anahtar kelimeler.
-fno-örtük-şablonlar
Örtülü olarak somutlaştırılan satır içi olmayan şablonlar için asla kod yayınlamayın (örn.
kullanmak); yalnızca açık örneklemeler için kod yayar.
-fno-implicit-inline-şablonları
Satır içi şablonların örtük örneklemeleri için de kod göndermeyin. Varsayılan
satır içi satırları farklı şekilde ele almaktır, böylece optimizasyon ihtiyacı olan ve olmayan derlenir
aynı açık örneklemeler kümesi.
-fno-uygulama-satır içi
Yerden tasarruf etmek için, tarafından kontrol edilen satır içi işlevlerin satır dışı kopyalarını yaymayın.
#pragma uygulama. Bu işlevler satır içinde değilse, bu, bağlayıcı hatalarına neden olur
her anılırlar.
-fms-uzantıları
Örtük int ve MFC'de kullanılan yapılar hakkında Wpedantic uyarılarını devre dışı bırakın.
standart olmayan sözdizimi yoluyla üye işlevine bir işaretçi alma.
-fno-nonansi-yerleşikler
ANSI/ISO C tarafından zorunlu tutulmayan yerleşik işlev bildirimlerini devre dışı bırakın.
"ffs", "alloca", "_exit", "index", "bzero", "conjf" ve diğer ilgili
fonksiyonlar.
-fnothrow-opt
Bir "throw()" istisna belirtimine, bir "hiçbir istisna" belirtimiymiş gibi davranın.
istisnasız bir işleve göre metin boyutu ek yükünü azaltın veya ortadan kaldırın
Şartname. İşlev, önemsiz olmayan yerel değişken türlerine sahipse
yıkıcılar, istisna belirtimi aslında işlevi küçültür çünkü
bu değişkenler için EH temizlemeleri optimize edilebilir. anlamsal etkidir
böyle bir istisna belirtimine sahip bir işlevden atılan bir istisna
"beklenmedik" yerine "sonlandırma" çağrısıyla sonuçlanır.
-fno-operatör-adları
Operatör adı anahtar sözcüklerini "ve", "bitand", "bitor", "compl", "not", "veya" olarak ele almayın.
ve "xor" anahtar kelimeler olarak eş anlamlıdır.
-fno-isteğe bağlı-diags
Standardın derleyicinin yayınlamasına gerek olmadığını söylediği tanılamayı devre dışı bırakın.
Şu anda, G++ tarafından yayınlanan bu tür tek tanılama, bir ad için yapılan tanıdır.
bir sınıf içinde birden fazla anlam.
-fmüsamahakar
Uygun olmayan kodla ilgili bazı tanılamaları hatalardan uyarılara düşürün. Böylece,
kullanma -fmüsamahakar bazı uygun olmayan kodların derlenmesine izin verir.
-fno-güzel-şablonlar
Bir hata mesajı, bir fonksiyon şablonunun uzmanlaşmasına atıfta bulunduğunda, derleyici
normalde şablonun imzasını ve ardından şablon argümanlarını yazdırır ve
imzadaki herhangi bir typedefs veya typenames (örneğin, "void f(T) [with T = int]" yerine)
"void f(int)") yerine hangi şablonun dahil olduğu açıktır. Bir hata olduğunda
mesaj, bir sınıf şablonunun uzmanlığına atıfta bulunur, derleyici herhangi bir şeyi atlar.
o şablon için varsayılan şablon bağımsız değişkenleriyle eşleşen şablon bağımsız değişkenleri. Eğer
bu davranışlardan herhangi biri hata mesajını anlamayı zorlaştırır.
daha kolay, kullanabilirsiniz -fno-güzel-şablonlar onları devre dışı bırakmak için.
-frepo
Bağlantı zamanında otomatik şablon örneğini etkinleştirin. Bu seçenek aynı zamanda
-fno-örtük-şablonlar.
-fno-rtti
tarafından kullanılmak üzere sanal işlevlere sahip her sınıf hakkında bilgi oluşturulmasını devre dışı bırakın.
C++ çalışma zamanı tipi tanımlama özellikleri (dinamik_cast ve typeid). yapmazsan
dilin bu kısımlarını kullanın, bu bayrağı kullanarak biraz yer kazanabilirsiniz. Not
bu istisna işleme aynı bilgiyi kullanır, ancak gerektiğinde G++ onu üretir. NS
dinamik_cast operatör, çalışma zamanı türü gerektirmeyen yayınlar için hala kullanılabilir
bilgi, yani "void *" ya da açık temel sınıflara yayınlar.
-fstats
Derlemenin sonunda ön uç işleme hakkında istatistikler yayınlayın. Bu
bilgiler genellikle yalnızca G++ geliştirme ekibi için yararlıdır.
-fstrict-enums
Derleyicinin, numaralandırılmış türde bir değer olduğu varsayımını kullanarak optimize etmesine izin verin.
numaralandırmanın değerlerinden yalnızca biri olabilir (C++ standardında tanımlandığı gibi;
temel olarak, gereken minimum bit sayısıyla temsil edilebilen bir değerdir.
tüm numaralandırıcıları temsil eder). Program aşağıdakileri kullanıyorsa bu varsayım geçerli olmayabilir.
rastgele bir tamsayı değerini numaralandırılmış türe dönüştürmek için bir döküm.
-ftemplate-backtrace-limit=n
Tek bir uyarı veya hata için maksimum şablon örnekleme notu sayısını ayarlayın
için n. Varsayılan değer 10'dur.
-fşablon derinliği=n
Şablon sınıfları için maksimum örnekleme derinliğini şu şekilde ayarlayın: n. üzerinde bir sınır
şablon sırasında sonsuz özyinelemeleri algılamak için şablon örnekleme derinliği gereklidir
sınıf somutlaştırma. ANSI/ISO C++ uyumlu programlar maksimum
17'den büyük derinlik (C++ 1024'de 11 olarak değiştirildi). Varsayılan değer 900'dür, çünkü
derleyici bazı durumlarda 1024'e ulaşmadan önce yığın alanı tükenebilir.
-fno-threadsafe-statik
İş parçacığı için C++ ABI'de belirtilen rutinleri kullanmak için fazladan kod göndermeyin.
yerel statiğin güvenli başlatılması. Kod boyutunu küçültmek için bu seçeneği kullanabilirsiniz.
iş parçacığı için güvenli olması gerekmeyen kodda biraz.
-sigorta-cxa-atexit
Statik depolama süresi olan nesneler için yıkıcıları "__cxa_atexit" ile kaydedin
"atexit" işlevi yerine işlev. Bu seçenek tamamen için gereklidir
statik yıkıcıların standartlara uygun şekilde işlenmesi, ancak yalnızca C kitaplığınız varsa çalışır
"__cxa_atexit"i destekler.
-fno-use-cxa-get-istisna-ptr
"__cxa_get_exception_ptr" çalışma zamanı rutinini kullanmayın. Bu neden olur
"std::uncaught_exception" yanlış olabilir, ancak çalışma zamanı rutini
mevcut değil.
-fvisibility-satır içi-gizli
Bu anahtar, kullanıcının işaretçileri satır içi ile karşılaştırmaya çalışmadığını bildirir.
iki işlevin adreslerinin farklı şekillerde alındığı işlevler veya yöntemler
paylaşılan nesneler
Bunun etkisi, GCC'nin satır içi yöntemleri etkin bir şekilde işaretleyebilmesidir.
"__attribute__ ((görünürlük ("gizli")))" dışa aktarmada görünmemeleri için
bir DSO tablosudur ve DSO içinde kullanıldığında PLT dolaylılığı gerektirmez.
Bu seçeneğin etkinleştirilmesi, bir DSO'nun yükleme ve bağlantı süreleri üzerinde çarpıcı bir etkiye sahip olabilir.
kitaplık ağırlaştığında dinamik dışa aktarma tablosunun boyutunu büyük ölçüde azaltır
şablonların kullanımı.
Bu anahtarın davranışı, yöntemleri gizli olarak işaretlemekle tamamen aynı değildir.
doğrudan, çünkü işleve veya nedene özgü statik değişkenleri etkilemez.
derleyici, işlevin yalnızca bir paylaşılan nesnede tanımlandığını çıkartır.
Etkisini reddetmek için bir yöntemi açıkça görünürlüğe sahip olarak işaretleyebilirsiniz.
bu yöntem için geçiş yapın. Örneğin, işaretçileri bir
belirli satır içi yöntemi, varsayılan görünürlüğe sahip olarak işaretleyebilirsiniz. işaretleme
açık görünürlük ile çevreleyen sınıfın hiçbir etkisi yoktur.
Açıkça başlatılmış satır içi yöntemler, bağlantıları nedeniyle bu seçenekten etkilenmez.
aksi takdirde paylaşılan bir kitaplık sınırını geçebilir.
-fvisibility-ms-uyumluluğu
Bu bayrak, GCC'nin C++ bağlantı modelini oluşturmak için görünürlük ayarlarını kullanmaya çalışır
Microsoft Visual Studio ile uyumludur.
Bayrak, GCC'nin bağlantı modelinde şu değişiklikleri yapar:
1. Varsayılan görünürlüğü "gizli" olarak ayarlar, örneğin -fvisibility=gizli.
2. Türler, ancak üyeleri değil, varsayılan olarak gizli değildir.
3. Tek Tanım Kuralı, açık görünürlüğü olmayan türler için gevşetilmiştir
birden fazla paylaşılan nesnede tanımlanan özellikler: bu bildirimler
bu seçenek kullanılmadığında izin verilirse izin verilir.
Yeni kodda kullanmak daha iyidir -fvisibility=gizli ve bu sınıfları dışa aktarın
dışarıdan görünür olması amaçlanmıştır. Maalesef kodun güvenmesi mümkündür,
belki yanlışlıkla, Visual Studio davranışında.
Bu değişikliklerin sonuçları arasında, aynı türden statik veri üyelerinin
aynı ada sahip ancak farklı paylaşılan nesnelerde tanımlanmış farklıdır, bu nedenle değişen
biri diğerini değiştirmez; ve bu, içinde tanımlanan işlev üyelerine işaret eder
farklı paylaşılan nesneler eşit olarak karşılaştırılamayabilir. Bu bayrak verildiğinde, bir
Aynı ada sahip türleri farklı şekilde tanımlamak için ODR'nin ihlali.
-fno-zayıf
Bağlayıcı tarafından sağlanmış olsa bile zayıf sembol desteği kullanmayın. Varsayılan olarak, G++
varsa zayıf semboller kullanır. Bu seçenek yalnızca test için mevcuttur ve
son kullanıcılar tarafından kullanılmamalıdır; kalitesiz kodla sonuçlanır ve hiçbir faydası yoktur.
Bu seçenek, G++'ın gelecekteki bir sürümünde kaldırılabilir.
-nostdinc++
C++'a özgü standart dizinlerde başlık dosyalarını aramayın, ancak
yine de diğer standart dizinleri arayın. (Bu seçenek,
C++ kitaplığı.)
Ayrıca bu optimizasyon, uyarı ve kod oluşturma seçeneklerinin yalnızca anlamları vardır.
C++ programları için:
-fno-varsayılan-satır içi
varsayma inline bir sınıf kapsamı içinde tanımlanan işlevler için.
Bu işlevlerin satır içi işlevler gibi bağlantıya sahip olduğunu unutmayın; onlar sadece değil
varsayılan olarak satır içi.
-Wabi (Yalnızca C, Objective-C, C++ ve Objective-C++)
G++, muhtemelen satıcıdan bağımsız kodla uyumlu olmayan kod oluşturduğunda uyar
C++ ABI. Tüm bu tür durumlar hakkında uyarmak için çaba gösterilmesine rağmen,
G ++ üretiyor olsa da, muhtemelen uyarılmayan bazı durumlar
uyumsuz kod olmasına rağmen uyarıların verildiği durumlar da olabilir.
oluşturulan kod uyumludur.
Eğer endişeleriniz varsa bu uyarılardan kaçınmak için kodunuzu yeniden yazmalısınız.
G++ tarafından oluşturulan kodun, G++ tarafından oluşturulan kodla ikili uyumlu olmayabileceği gerçeği
diğer derleyiciler.
Bilinen uyumsuzluklar -fabi-sürüm=2 (varsayılan) şunları içerir:
· Tip olmayan bir şablon parametresine sahip referans tipine sahip bir şablon karıştırılır
yanlış:
harici int N;
şablon yapı S {};
boşluk n (S ) {2}
Bu sabittir -fabi-sürüm=3.
· "__attribute ((vector_size))" kullanılarak bildirilen SIMD vektör türleri, bir
vektörleri alan fonksiyonların aşırı yüklenmesine izin vermeyen standart olmayan yol
farklı boyutlarda.
Mangling değiştirilir -fabi-sürüm=4.
Bilinen uyumsuzluklar -fabi-sürüm=1 şunları içerir:
· Bit alanları için kuyruk dolgusunun yanlış kullanımı. G++ verileri paketlemeye çalışabilir
temel sınıfla aynı bayta. Örneğin:
yapı A { sanal boşluk f(); int f1 : 1; };
yapı B : genel A { int f2 : 1; };
Bu durumda, G++ "B::f2"yi "A::f1" ile aynı bayta yerleştirir; diğer derleyiciler yapar
Olumsuz. Boyutunun bir olması için "A"yı açıkça doldurarak bu sorunu önleyebilirsiniz.
platformunuzdaki bayt boyutunun katları; bu, G++ ve diğer derleyicilerin
"B" yi aynı şekilde yerleştirin.
· Sanal bazlar için kuyruk dolgusunun yanlış kullanımı. G++ kuyruk kullanmaz
sanal üsleri düzenlerken dolgu. Örneğin:
yapı A { sanal boşluk f(); karakter c1; };
yapı B { B(); karakter c2; };
yapı C : genel A, genel sanal B {};
Bu durumda G++, "B"yi "A" için kuyruk dolgusuna yerleştirmez; başka
derleyiciler yapar. Açıkça "A"yı doldurarak bu sorunu önleyebilirsiniz, böylece
boyut, hizalamanın bir katıdır (sanal temel sınıfları yok sayar); neden olur
G++ ve diğer derleyiciler "C" yi aynı şekilde düzenler.
· Bildirilen genişlikleri genişliklerinden daha büyük olan bit alanlarının yanlış işlenmesi
bit alanları bir birlik içinde göründüğünde temel türler. Örneğin:
birleşim U { int i : 4096; };
Bir "int" in 4096 bit içermediğini varsayarsak, G++ birliği şu şekilde çok küçük yapar:
bir "int" içindeki bit sayısı.
· Boş sınıflar yanlış ofsetlere yerleştirilebilir. Örneğin:
yapı A {};
yapı B {
bir;
sanal boşluk f();
};
yapı C : genel B, genel A {};
G++, "C"nin "A" temel sınıfını sıfırdan farklı bir kaymaya yerleştirir; şuraya yerleştirilmelidir
sıfır ofset. G++ yanlışlıkla "B"nin "A" veri üyesinin zaten
ofset sıfırda.
· Türleri "typename" veya şablon şablonu içeren şablon işlevlerinin adları
parametreler yanlış yönetilebilir.
şablon
void f(tip adı Q::X) {}
şablon sınıf Q>
void f(tür adı Q ::X) {}
Bu şablonların örneklemeleri yanlış şekilde karıştırılabilir.
Ayrıca psABI ile ilgili değişiklikler hakkında uyarır. Bilinen psABI bu noktada değişir
şunları içerir:
· SysV/x86-64 için, "uzun çift" üyeli birleşimler bellekte şu şekilde iletilir:
psABI'de belirtilmiştir. Örneğin:
birlik U {
uzun çift ld;
int ben;
};
"Birlik U" her zaman bellekte geçirilir.
-Wctor-dtor-gizlilik (Yalnızca C++ ve Objective-C++)
Bir sınıf kullanılamaz göründüğünde uyar, çünkü o sınıftaki tüm yapıcılar veya yıkıcılar
sınıf özeldir ve ne arkadaşları ne de genel statik üye işlevleri vardır.
Ayrıca özel olmayan yöntemler yoksa ve en az bir özel üye varsa uyarın
yapıcı veya yıkıcı olmayan işlev.
-Wdelete-sanal olmayan-dtor (Yalnızca C++ ve Objective-C++)
ne zaman uyar silmek sanal işlevlere sahip bir sınıfın örneğini yok etmek için kullanılır
ve sanal olmayan yıkıcı. Türetilmiş bir sınıfın örneğini silmek güvenli değildir
temel sınıfın sanal bir özelliği yoksa, bir temel sınıfa bir işaretçi aracılığıyla
yıkıcı. Bu uyarı tarafından etkinleştirildi -Duvar.
-Wliteral-soneki (Yalnızca C++ ve Objective-C++)
Bir dize veya karakter değişmezinin ardından bir ud-son eki geldiğinde uyar.
bir alt çizgi ile başlayın. Uygun bir uzantı olarak, GCC bu tür son ekleri şu şekilde ele alır:
kodla geriye dönük uyumluluğu korumak için ayrı ön işleme belirteçleri
"'den biçimlendirme makroları kullanan ". Örneğin:
#tanımla __STDC_FORMAT_MACROS
#Dahil etmek
#Dahil etmek
int main () {
int64_t i64 = 123;
printf("int64'üm: %"PRId64"\n", i64);
}
Bu durumda, "PRId64" ayrı bir ön işleme belirteci olarak değerlendirilir.
Bu uyarı varsayılan olarak etkindir.
- Daralma (Yalnızca C++ ve Objective-C++)
İçinde C++ 11 tarafından yasaklanan bir daraltma dönüşümü gerçekleştiğinde uyar { }, Örneğin
int ben = { 2.2 }; // hata: double'dan int'e daraltma
Bu bayrak dahildir -Duvar ve -Wc++11-uyumluluk.
İle -std=c++11, -Wno-daraltma standardın gerektirdiği tanılamayı bastırır.
Bunun iyi biçimlendirilmiş kodun anlamını etkilemediğini unutmayın; dönüşümleri daraltmak
hala SFINAE bağlamında kötü biçimlendirilmiş olarak kabul edilir.
-Wnohariç (Yalnızca C++ ve Objective-C++)
Bir işleve yapılan çağrı nedeniyle bir noexcept ifadesi false olarak değerlendirdiğinde uyar
fırlatmayan bir istisna belirtimine sahip olmayan (ör. atmak() or istisnasız)
ancak derleyici tarafından asla bir istisna oluşturmadığı bilinir.
-Wnon-sanal-dtor (Yalnızca C++ ve Objective-C++)
Bir sınıf, içinde sanal işlevlere ve erişilebilir bir sanal olmayan yıkıcıya sahip olduğunda uyar.
bu durumda türetilmiş bir sınıfın örneğini silmek mümkündür ancak güvenli değildir.
temel sınıfa bir işaretçi. Bu uyarı şu durumlarda da etkinleştirilir: -Weffc++ belirtilir.
-İhracatçı (Yalnızca C++ ve Objective-C++)
Kodda verilen üye başlatıcıların sırası sıra ile eşleşmediğinde uyar
içinde yürütülmeleri gerekir. Örneğin:
yapı A {
int ben;
intj;
A(): j (0), ben (1) { }
};
Derleyici, üye başlatıcıları için yeniden düzenler. i ve j beyanı eşleştirmek için
üyelerin emriyle bu yönde bir uyarı yayar. Bu uyarı tarafından etkinleştirildi
-Duvar.
-fext-sayısal-literaller (Yalnızca C++ ve Objective-C++)
GNU olarak hayali, sabit noktalı veya makine tanımlı değişmez sayı son eklerini kabul edin
uzantılar. Bu seçenek kapatıldığında, bu son ekler C++11 user- olarak kabul edilir.
tanımlanmış değişmez sayısal son ekler. Bu, tüm C++ 11 öncesi lehçeler için varsayılan olarak açıktır
ve tüm GNU lehçeleri: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++1y. Bu
seçenek, ISO C++ 11 ve sonrası için varsayılan olarak kapalıdır (-std=c++11, ...).
Aşağıdaki -B... seçeneklerden etkilenmez -Duvar.
-Weffc++ (Yalnızca C++ ve Objective-C++)
Scott Meyers'in aşağıdaki stil yönergelerinin ihlalleri konusunda uyarın Etkili
C++, İkinci baskı kitap:
· Madde 11: Aşağıdaki sınıflar için bir kopya oluşturucu ve bir atama operatörü tanımlayın.
dinamik olarak ayrılmış bellek.
· Madde 12: Oluşturucularda atamaya başlatmayı tercih edin.
· Madde 14: Yıkıcıları temel sınıflarda sanal yapın.
· Madde 15: "operator=" *buna bir referans döndürmesini sağlayın.
· Madde 23: Bir nesneyi döndürmeniz gerektiğinde bir referans döndürmeye çalışmayın.
Ayrıca Scott Meyers'in aşağıdaki stil yönergelerinin ihlalleri konusunda da uyarın. Daha Fazla
Etkili C + + kitap:
· Madde 6: Arttırma ve eksiltmenin önek ve sonek biçimlerini ayırt edin
operatörler.
· Madde 7: Asla "&&", "||" veya ","'yi aşırı yüklemeyin.
Bu seçeneği seçerken, standart kitaplık başlıklarının tümüne uymadığını unutmayın.
bu yönergelerden; kullanmak grep -v Bu uyarıları filtrelemek için.
-Wstrict-null-nöbetçi (Yalnızca C++ ve Objective-C++)
Nöbetçi olarak yayınlanmamış bir "NULL" kullanımı konusunda uyarın. Yalnızca GCC ile derlerken
"NULL", "__null" olarak tanımlandığından bu geçerli bir nöbetçidir. Null olmasına rağmen
boş gösterici yerine işaretçi sabiti, aynı boyutta olması garanti edilir
işaretçi olarak. Ancak bu kullanım, farklı derleyiciler arasında taşınabilir değildir.
-Wno-şablon olmayan-arkadaş (Yalnızca C++ ve Objective-C++)
Bir şablon içinde şablonlaştırılmamış arkadaş işlevleri bildirildiğinde uyarıları devre dışı bırakın.
G++'da açık şablon belirtimi desteğinin ortaya çıkmasından bu yana,
arkadaş niteliksiz bir kimliktir (yani, arkadaş foo(int)), C++ dil belirtimi
arkadaşın sıradan, şablon olmayan bir işlevi ilan etmesini veya tanımlamasını ister. (Bölüm
14.5.3). G++ açık belirtimi uygulamadan önce, niteliksiz kimlikler
şablonlaştırılmış bir işlevin özel bir uzmanlığı olarak yorumlanır. Çünkü bu
uygun olmayan davranış artık G++ için varsayılan davranış değildir,
-Wnon-şablon-arkadaş derleyicinin olası sorun için mevcut kodu kontrol etmesine izin verir
noktalar ve varsayılan olarak açıktır. Bu yeni derleyici davranışı ile kapatılabilir
-Wno-şablon olmayan-arkadaşuyumlu derleyici kodunu tutan ancak
faydalı uyarı.
-Wold tarzı oyuncular (Yalnızca C++ ve Objective-C++)
Bir C++ programında void olmayan bir türe eski tarz (C tarzı) bir döküm kullanılıyorsa uyar.
Yeni tarz yayınlar (dinamik_cast, static_cast, yeniden yorumla, ve const_cast)
istenmeyen etkilere karşı daha az savunmasız ve aranması çok daha kolay.
-Woverloaded-sanal (Yalnızca C++ ve Objective-C++)
Bir işlev bildirimi, bir temel sınıftan sanal işlevleri gizlediğinde uyar. İçin
örneğin:
yapı A {
sanal boşluk f();
};
yapı B: genel A {
geçersiz f(int);
};
"f"nin "A" sınıfı versiyonu "B" içinde gizlidir ve şöyle bir kod vardır:
B*b;
b->f();
derlemek için başarısız olur.
-Wno-pmf-dönüşümleri (Yalnızca C++ ve Objective-C++)
Bağlı bir işaretçiyi üye işlevine düz bir işleve dönüştürmek için tanılamayı devre dışı bırakın
Işaretçi.
-Wsign-promosyon (Yalnızca C++ ve Objective-C++)
Aşırı yük çözümü, imzasız veya numaralandırılmış türden bir promosyon seçtiğinde uyar:
aynı boyuttaki imzasız bir türe dönüşüm üzerinden imzalı bir tür. Öncesi
G++ sürümleri imzasızlığı korumaya çalıştı, ancak standart mevcut
davranışı.
Opsiyonlar Denetleme Objective-C ve Objective-C ++ Lehçeler
(NOT: Bu kılavuz, Objective-C ve Objective-C++ dillerini açıklamaz.
kendilerini.
Bu bölüm, yalnızca Objective-C için anlamlı olan komut satırı seçeneklerini açıklar.
ve Objective-C++ programları. Dilden bağımsız GNU'nun çoğunu da kullanabilirsiniz.
derleyici seçenekleri. Örneğin, "some_class.m" dosyasını şu şekilde derleyebilirsiniz:
gcc -g -fgnu-runtime -O -c bazı_class.m
Bu örnekte, -fgnu-çalışma zamanı yalnızca Objective-C ve Objective-C++ için tasarlanmış bir seçenektir
programlar; diğer seçenekleri GCC tarafından desteklenen herhangi bir dilde kullanabilirsiniz.
Objective-C, C dilinin bir uzantısı olduğundan, Objective-C derlemelerinin
C ön ucuna özgü seçenekleri de kullanabilir (örn. -Geleneksel). Benzer şekilde,
Objective-C++ derlemeleri, C++'a özgü seçenekleri kullanabilir (örn. -Wabi).
İşte seçeneklerin bir listesi bir tek Objective-C ve Objective-C++ derlemek için
programlar:
-fconstant-string-sınıfı=sınıf adı
kullanım sınıf adı her değişmez dize için somutlaştırılacak sınıfın adı olarak
"@"..."" sözdizimi ile belirtilir. Varsayılan sınıf adı, aşağıdaki durumlarda "NXConstantString"dir:
GNU çalışma zamanı kullanılıyor ve NeXT çalışma zamanı kullanılıyorsa "NSConstantString"
kullanılır (aşağıya bakın). NS -fconstant-cfstring'ler seçeneği de varsa, geçersiz kılar
-fconstant-string-sınıfı "@"..."" değişmez değerlerinin sabit olarak düzenlenmesine ve ayarlanmasına neden olur
CoreFoundation dizeleri.
-fgnu-çalışma zamanı
Standart GNU Objective-C çalışma zamanı ile uyumlu nesne kodu oluşturun. Bu
çoğu sistem türü için varsayılandır.
-fnext-çalışma zamanı
NeXT çalışma zamanı ile uyumlu çıktı üretin. Bu, NeXT tabanlı için varsayılandır.
Darwin ve Mac OS X dahil sistemler. "__NEXT_RUNTIME__" makrosu, aşağıdaki durumlarda önceden tanımlanmıştır:
(ve yalnızca) bu seçenek kullanılırsa.
-fno-nil-alıcıları
Tüm Objective-C iletisinin bu iletide ("[alıcı iletisi:arg]") gönderildiğini varsayalım.
çeviri birimi, alıcının "nil" olmadığından emin olur. Bu daha fazlasını sağlar
çalışma zamanında kullanılacak verimli giriş noktaları. Bu seçenek yalnızca şurada mevcuttur:
NeXT çalışma zamanı ve ABI sürüm 0 veya 1 ile birlikte.
-fobjc-abi-sürüm=n
Sürümü kullan n Seçilen çalışma zamanı için Objective-C ABI. Bu seçenek
şu anda yalnızca NeXT çalışma zamanı için desteklenmektedir. Bu durumda, Sürüm 0,
özellikler ve diğer Objective-C 32 desteği olmayan geleneksel (2.0-bit) ABI
eklemeler. Sürüm 1, özellikleri destekleyen geleneksel (32 bit) ABI'dir ve
diğer Objective-C 2.0 eklemeleri. Sürüm 2, modern (64 bit) ABI'dir. eğer hiçbir şey değilse
belirtilen, varsayılan 0 bit hedef makinelerde Sürüm 32 ve 2 bit üzerinde Sürüm 64'dir.
hedef makineler.
-fobjc-call-cxx-cdtor'lar
Her Objective-C sınıfı için, örnek değişkenlerinden herhangi birinin bir C++ nesnesi olup olmadığını kontrol edin.
önemsiz olmayan bir varsayılan kurucu ile. Eğer öyleyse, özel bir "- (id) sentezleyin.
Herhangi bir üzerinde önemsiz olmayan varsayılan kurucuları çalıştıran .cxx_construct" örnek yöntemi
bu tür örnek değişkenleri sırayla ve ardından "self" değerini döndürün. Benzer şekilde, varsa kontrol edin
örnek değişkeni, önemsiz olmayan bir yıkıcıya sahip bir C++ nesnesidir ve öyleyse, sentezleyin
tüm bu tür varsayılan yıkıcıları çalıştıran özel bir "- (void) .cxx_destruct" yöntemi,
Ters sipariş.
"- (id) .cxx_construct" ve "- (void) .cxx_destruct" yöntemleri bu şekilde yalnızca oluşturulur
geçerli Objective-C sınıfında bildirilen örnek değişkenler üzerinde çalışın, bunlar üzerinde değil
üst sınıflardan miras alınır. Objective-C çalışma zamanının sorumluluğundadır.
bir nesnenin kalıtım hiyerarşisindeki tüm bu yöntemleri çağırır. Kimlik)
.cxx_construct" yöntemleri, yeni bir nesneden hemen sonra çalışma zamanı tarafından çağrılır
örnek tahsis edilir; "- (void) .cxx_destruct" yöntemleri hemen çağrılır
çalışma zamanı bir nesne örneğini serbest bırakmadan önce.
Bu yazı itibariyle, yalnızca Mac OS X 10.4 ve sonraki sürümlerinde NeXT çalışma zamanı için destek vardır.
"- (id) .cxx_construct" ve "- (void) .cxx_destruct" yöntemlerini çağırmak.
-fobjc-doğrudan-gönderme
Mesaj göndericiye hızlı atlamaya izin verin. Darwin'de bu,
iletişim sayfası.
-fobjc-istisnalar
Objective-C'de yapılandırılmış özel durum işleme için sözdizimsel desteği etkinleştirin, buna benzer
C++ ve Java tarafından sunulanlar. Bu seçenek, Objective-C'yi kullanmak için gereklidir.
@try, @throw, @catch, @finally ve @synchronized anahtar kelimeleri. Bu seçenek mevcuttur
hem GNU çalışma zamanı hem de NeXT çalışma zamanı ile (ancak
Mac OS X 10.2 ve önceki sürümlerde NeXT çalışma zamanı).
-fobjc-gc
Objective-C ve Objective-C++ programlarında çöp toplamayı (GC) etkinleştirin. Bu seçenek
yalnızca NeXT çalışma zamanı ile kullanılabilir; GNU çalışma zamanının farklı bir çöpü var
özel derleyici bayrakları gerektirmeyen koleksiyon uygulaması.
-fobjc-nilcheck
ABI'nin 2. sürümüne sahip NeXT çalışma zamanı için, yöntemde sıfır alıcı olup olmadığını kontrol edin
gerçek yöntem çağrısını yapmadan önce çağrılar. Bu varsayılandır ve olabilir
kullanarak devre dışı -fno-objc-nilcheck. Sınıf yöntemleri ve süper çağrılar asla kontrol edilmez
nil için bu şekilde, bu bayrak neye ayarlanmış olursa olsun. Şu anda bu bayrak yapar
GNU çalışma zamanı veya NeXT çalışma zamanı ABI'nin daha eski bir sürümü kullanıldığında hiçbir şey olmaz.
-fobjc-std=objc1
GCC 1.0 tarafından tanınan dil olan Objective-C 4.0'ın dil sözdizimine uygundur.
Bu, yalnızca C/C++ diline Objective-C eklemelerini etkiler; etkilemez
ayrı C/C++ lehçesi tarafından kontrol edilen C/C++ standartlarına uygunluk
seçenek bayrakları. Bu seçenek Objective-C veya Objective-C++ ile kullanıldığında
derleyici, GCC 4.0 tarafından tanınmayan herhangi bir Objective-C sözdizimi reddedilir. Bu
Objective-C kodunuzun derlenebileceğinden emin olmanız gerekiyorsa kullanışlıdır.
GCC'nin eski sürümleri.
-yersiz-objc-sınıfları
Özel bir işaretleyici talimat verin ld(1) sonuçtaki nesnede statik olarak bağlanmamak
dosya ve izin ver dil(1) bunun yerine çalışma zamanında yüklemek için. Bu kullanılır
nesne dosyasının bulunduğu Düzelt ve Devam Et hata ayıklama modu ile birlikte
soru, program sırasında yeniden derlenebilir ve dinamik olarak yeniden yüklenebilir
programın kendisini yeniden başlatmaya gerek kalmadan yürütme. Şu anda, Düzelt-ve-
Devam etme işlevi yalnızca Mac'te NeXT çalışma zamanı ile birlikte kullanılabilir
OS X 10.3 ve üstü.
-fzero-bağlantı
NeXT çalışma zamanı için derlerken, derleyici genellikle çağrıları değiştirir.
"objc_getClass("...")" (derleme zamanında sınıfın adı bilindiğinde)
çalışma zamanını iyileştiren, yükleme zamanında başlatılan statik sınıf referansları
verim. belirterek -fzero-bağlantı flag bu davranışı bastırır ve neden olur
tutulacak "objc_getClass("...")" çağrıları. Bu, Zero-Link'te kullanışlıdır
bireysel sınıf uygulamalarının değiştirilmesine izin verdiği için hata ayıklama modu
program yürütme sırasında. GNU çalışma zamanı şu anda her zaman çağrıları tutar.
"objc_get_class("...")" komut satırı seçeneklerinden bağımsız olarak.
-gen-bildirimleri
Kaynak dosyada görülen tüm sınıflar için arabirim bildirimlerini adlı bir dosyaya dökümü
kaynakadi.decl.
-Wata-kesişme (Yalnızca Objective-C ve Objective-C++)
Bir Objective-C ataması çöp toplayıcı tarafından engellendiğinde uyar.
-Wno-protokol (Yalnızca Objective-C ve Objective-C++)
Bir sınıfın bir protokol uygulayacağı bildirilirse, her yöntem için bir uyarı verilir.
sınıf tarafından uygulanmayan protokolde. Varsayılan davranış,
sınıfta açıkça uygulanmayan her yöntem için bir uyarı yayınlayın, bir
yöntem uygulaması üst sınıftan devralınır. kullanırsanız -Wno-protokol
seçeneği, daha sonra üst sınıftan miras alınan yöntemlerin uygulandığı kabul edilir,
ve onlar için herhangi bir uyarı yapılmaz.
-Wselektör (Yalnızca Objective-C ve Objective-C++)
sırasında aynı seçici için farklı türlerde birden fazla yöntem bulunursa uyar.
derleme. Kontrol, son aşamadaki yöntemler listesinde gerçekleştirilir.
derleme. Ek olarak, bir ekranda görünen her seçici için bir kontrol gerçekleştirilir.
"@selector(...)" ifadesi ve bu seçici için karşılık gelen bir yöntem
derleme sırasında bulundu. Çünkü bu kontroller metot tablosunu sadece sonunda tarar.
derlemenin son aşaması ise, bu uyarılar üretilmez.
örneğin derleme sırasında bir hata bulunduğundan veya
-fsyntax-yalnızca seçeneği kullanılıyor.
-Wstrict-seçici-eşleştirme (Yalnızca Objective-C ve Objective-C++)
Bir değişken için farklı argüman ve/veya dönüş türlerine sahip birden fazla yöntem bulunursa uyar.
bir alıcıya bu seçiciyi kullanarak bir mesaj göndermeye çalışırken verilen seçici
"id" veya "Sınıf" yazın. Bu bayrak kapalı olduğunda (bu varsayılan davranıştır),
Derleyici, bulunan herhangi bir farklılık, paylaşan türlerle sınırlıysa, bu tür uyarıları atlar.
aynı boyut ve hizalama.
-Wundeclared-selektör (Yalnızca Objective-C ve Objective-C++)
Bildirilmemiş bir seçiciye atıfta bulunan bir "@selector(...)" ifadesi bulunursa uyar. A
daha önce bu ada sahip hiçbir yöntem bildirilmemişse seçici bildirilmemiş olarak kabul edilir.
"@selector(...)" ifadesi, açıkça bir @interface veya @protocol içinde
bildirimde veya dolaylı olarak bir @implementation bölümünde. Bu seçenek her zaman gerçekleştirir
"@selector(...)" ifadesi bulunur bulunmaz kontrolleri yapılırken -Wselektör bir tek
derlemenin son aşamasında kontrollerini gerçekleştirir. Bu aynı zamanda kodlamayı da zorlar
yöntemlerin ve seçicilerin kullanılmadan önce bildirilmesi gerektiğine dair stil kuralı.
-baskı-objc-çalışma zamanı bilgisi
Varsa, değere göre iletilen en büyük yapıyı açıklayan C başlığını oluşturun.
Opsiyonlar için Control tanı Mesajlar biçimlendirme
Geleneksel olarak, tanılama mesajları çıkış cihazının özelliklerinden bağımsız olarak biçimlendirilir.
görünüş (örn. genişliği, ...). kontrol etmek için aşağıda açıklanan seçenekleri kullanabilirsiniz.
tanı mesajları için biçimlendirme algoritması, örneğin satır başına kaç karakter, ne sıklıkta
kaynak konum bilgisi rapor edilmelidir. Bazı dil ön uçlarının
bu seçeneklere itibar etmeyin.
-fmessage-uzunluğu=n
Hata mesajlarını yaklaşık satırlara sığacak şekilde biçimlendirmeye çalışın. n karakter.
için varsayılan 72 karakterdir g ++ ve 0 tarafından desteklenen ön uçların geri kalanı için
GCC. Eğer n sıfırsa, satır kaydırma yapılmaz; her bir hata mesajı bir
tek çizgi.
-fdiagnostics-show-location=bir kez
Yalnızca satır kaydırma modunda anlamlıdır. Teşhis mesajları muhabirine şunları yapması talimatını verir:
kaynak konum bilgisi yayar bir Zamanlar; yani, mesajın sığamayacak kadar uzun olması durumunda
tek bir fiziksel satırda ve sarılması gerekiyor, kaynak konum yayılmayacak
(ön ek olarak) müteakip devam satırlarında tekrar tekrar. bu
Varsayılan davranış.
-fdiagnostics-show-location=her satır
Yalnızca satır kaydırma modunda anlamlıdır. Teşhis mesajları muhabirine şunları yapması talimatını verir:
sonuçlanan fiziksel hatlar için aynı kaynak konum bilgisini (önek olarak) yayar.
tek bir satıra sığmayacak kadar uzun bir mesajı kırma sürecinden.
-fno-diagnostics-show-seçeneği
Varsayılan olarak, yayılan her tanılama, komut satırı seçeneğini belirten metni içerir
tanılamayı doğrudan kontrol eden (böyle bir seçenek tanı tarafından biliniyorsa)
makineler). belirterek -fno-diagnostics-show-seçeneği bayrak bunu bastırır
davranışı.
-fno-diagnostics-göster-işareti
Varsayılan olarak, yayılan her tanılama, orijinal kaynak satırını ve bir '^' düzeltme işareti içerir.
sütunu gösterir. Bu seçenek, bu bilgileri gizler.
Opsiyonlar için Talep Alma or Bastır Uyarılar
Uyarılar, doğası gereği olmayan yapıları bildiren tanı mesajlarıdır.
hatalıdır ancak risklidir veya bir hata olabileceğini düşündürür.
Aşağıdaki dilden bağımsız seçenekler, belirli uyarıları etkinleştirmez, ancak
GCC tarafından üretilen teşhis türleri.
-fsyntax-yalnızca
Kodu sözdizimi hataları için kontrol edin, ancak bunun ötesinde bir şey yapmayın.
-fmax-hataları=n
Maksimum hata mesajı sayısını şu şekilde sınırlar: n, bu noktada GCC yerine
kaynak kodu işlemeye devam etmeye çalışmaktan daha fazla. Eğer n 0 (varsayılan),
üretilen hata mesajlarının sayısında bir sınırlama yoktur. Eğer -Wfatal-hatalar aynı zamanda
belirtilen, daha sonra -Wfatal-hatalar bu seçeneğe göre önceliklidir.
-w Tüm uyarı mesajlarını engelle.
-Whata
Tüm uyarıları hatalara dönüştürün.
-Hata=
Belirtilen uyarıyı bir hataya dönüştürün. Bir uyarı belirteci eklenir;
örneğin -Werror=anahtar tarafından kontrol edilen uyarıları açar -W anahtarı hatalara dönüşür.
Bu anahtar, olumsuzlamak için kullanılmak üzere negatif bir biçim alır. -Whata özel uyarılar için;
örneğin -Wno-hata=anahtar yapar -W anahtarı uyarılar hata olmamasına rağmen, -Whata
yürürlüktedir.
Her kontrol edilebilir uyarı için uyarı mesajı, kontrol eden seçeneği içerir.
uyarı. Bu seçenek daha sonra ile kullanılabilir -Hata= ve -Wno-hatası= tarif edildiği gibi
üstünde. (Uyarı mesajındaki seçeneğin yazdırılması,
-fno-diagnostics-show-seçeneği bayrak.)
belirterek unutmayın -Hata=foo otomatik olarak ima eder -Wfoo. Bununla birlikte, -Wno-hatası=foo
hiçbir şey ifade etmez.
-Wfatal-hatalar
Bu seçenek, derleyicinin ilk hata oluştuğunda derlemeyi iptal etmesine neden olur.
Devam etmeye ve daha fazla hata mesajı yazdırmaya çalışmak yerine.
İle başlayan seçeneklerle birçok özel uyarı talep edebilirsiniz. -WÖrneğin,
-Wimplicit örtülü beyanlar hakkında uyarı talep etmek. Bu özel uyarıların her biri
seçenekler de olumsuz bir biçime sahiptir -hayır- uyarıları kapatmak için; Örneğin,
-Wno-örtük. Bu kılavuz, varsayılan olmayan iki formdan yalnızca birini listeler.
Dile özgü diğer seçenekler için ayrıca bkz. C + + diyalekt Opsiyonlar ve Objective-C
ve Objective-C ++ diyalekt Opsiyonlar.
Tanınmayan bir uyarı seçeneği istendiğinde (örn. -Bilinmeyen-uyarı), GCC bir
seçeneğin tanınmadığını belirten tanılama. Ancak, eğer -hayır- formu kullanılır,
davranış biraz farklıdır: için hiçbir teşhis üretilmez -Bilinmeyen-uyarı
başka teşhisler üretilmedikçe. Bu yeni kullanımına izin verir -hayır- seçenekleri
eski derleyicilerle, ancak bir şeyler ters giderse, derleyici tanınmayan bir
seçeneği mevcut.
-Wpedantik
- bilgiçlik
Katı ISO C ve ISO C++ tarafından talep edilen tüm uyarıları yayınlayın; tüm programları reddet
yasak uzantıları ve ISO C ve ISO'ya uymayan diğer bazı programları kullanın
C++. ISO C için, herhangi bir belgede belirtilen ISO C standardının sürümünü takip eder. -std
kullanılan seçenek.
Geçerli ISO C ve ISO C++ programları bu seçenekle veya bu seçenek olmadan düzgün bir şekilde derlenmelidir.
(nadiren birkaçı gerektirse de -ansi ya da -std gerekli sürümünü belirten seçenek
ISOC). Ancak bu seçenek olmadan, belirli GNU uzantıları ve geleneksel C ve
C++ özellikleri de desteklenmektedir. Bu seçenekle reddedilirler.
-Wpedantik olan alternatif anahtar kelimelerin kullanımı için uyarı mesajlarına neden olmaz.
isimleri ile başlar ve biter __. Pedantik uyarılar da ifadede devre dışı bırakıldı
"__extension__" izler. Ancak, yalnızca sistem başlık dosyaları bunları kullanmalıdır.
kaçış yolları; uygulama programları bunlardan kaçınmalıdır.
Bazı kullanıcılar kullanmaya çalışır -Wpedantik programları sıkı ISO C uygunluğu için kontrol etmek. Onlar
çok geçmeden istediklerini tam olarak yapmadığını fark eder: ISO dışı bazı uygulamalar bulur,
ama hepsi değil --- sadece ISO C'ye uygun olanlar gerektirir bir teşhis ve diğerleri için
hangi teşhisler eklendi.
ISO C'ye uymayan herhangi bir hatayı bildirme özelliği, bazı durumlarda yararlı olabilir,
ancak önemli ölçüde ek çalışma gerektirecek ve diğerlerinden oldukça farklı olacaktır.
-Wpedantik. Yakın gelecekte böyle bir özelliği desteklemeyi planlamıyoruz.
ile belirtilen standart nerede -std gibi bir GNU genişletilmiş C lehçesini temsil eder.
gnu90 or gnu99, karşılık gelen var baz standart, üzerinde ISO C sürümü
GNU genişletilmiş lehçesi dayanmaktadır. gelen uyarılar -Wpedantik oldukları yerde verilir
temel standart tarafından gereklidir. (Bu tür uyarıların yapılmasının bir anlamı yoktur.
tanım gereği GNU olduğundan, yalnızca belirtilen GNU C lehçesinde olmayan özellikler için
C lehçeleri, derleyicinin verilen seçenekle desteklediği tüm özellikleri içerir ve
uyaracak bir şey olmazdı.)
-pedantik-hatalar
Facebok sayfasını beğenin : -Wpedantik, ancak uyarılar yerine hatalar üretilir.
-Duvar
Bu, bazı kullanıcıların dikkate aldığı yapılarla ilgili tüm uyarıları etkinleştirir.
sorgulanabilir ve kaçınılması (veya uyarıyı önlemek için değiştirilmesi) kolaydır.
makrolarla birleşir. Bu aynı zamanda açıklanan bazı dile özgü uyarıları da etkinleştirir.
in C + + diyalekt Opsiyonlar ve Objective-C ve Objective-C ++ diyalekt Opsiyonlar.
-Duvar aşağıdaki uyarı işaretlerini açar:
-Waddress -Warray sınırları (sadece -O2) -Wc++11-uyumluluk -Wchar-abonelikleri
-Wenum-karşılaştırma (C/ObjC'de; bu, C++'da varsayılan olarak açıktır) -Wimplicit-int (C ve
Yalnızca Objective-C) -Wimplicit-fonksiyon-bildirimi (Yalnızca C ve Objective-C) -Wyorum
-W biçimi -Wana (yalnızca C/ObjC için ve -bağımsız) -Wbelki-başlatılmamış
-Weksis-parantez (sadece C/ObjC için) -Wonnull -W parantezler -Wişaretçi-işareti -İhracatçı
-Wreturn-tipi -Sıra noktası -Wsign-karşılaştırma (yalnızca C++'da) - Kısıtlı yumuşatma
-Wstrict-taşma=1 -W anahtarı -Wtrigraflar -Başlatıldı -Bilinmeyen-pragmalar
-Wunused-fonksiyonu -Wunused-etiket -Wunused-değer -Wunused-değişken
-Wvolatile-kayıt-var
Bazı uyarı işaretlerinin şu şekilde ima edilmediğine dikkat edin: -Duvar. Bazıları uyarıyor
Kullanıcıların genellikle şüpheli bulmadığı, ancak
bazen kontrol etmek isteyebilirsiniz; diğerleri inşaatlar hakkında uyarır
bazı durumlarda kaçınılması gerekli veya zordur ve değiştirmenin basit bir yolu yoktur.
uyarıyı bastırmak için kod. Bazıları tarafından etkinleştirildi -Ekstra ama birçoğu
ayrı ayrı etkinleştirilmelidir.
-Ekstra
Bu, tarafından etkinleştirilmeyen bazı ekstra uyarı bayraklarını etkinleştirir. -Duvar. (Bu seçenek kullanıldı
çağrılacak -W. Eski ad hala destekleniyor, ancak yeni ad daha fazla
tanımlayıcı.)
-Yıkılmış -boş-vücut -Wigned-eleyenler -Wmissing-alan-başlatıcıları
-Wmissing-parametre tipi (Yalnızca C) -Wold-style-deklarasyonu (Yalnızca C) -Woverride-init
-Wsign-karşılaştırma -Wtype-limitleri -Başlatıldı -Wunused-parametre (sadece -Kullanılmamış or
-Duvar) -Wunused-but-set-parametresi (sadece -Kullanılmamış or -Duvar)
Seçenek -Ekstra ayrıca aşağıdaki durumlar için uyarı mesajları da yazdırır:
· Bir işaretçi, sıfır tamsayı ile karşılaştırılır: <, <=, >ya da >=.
· (Yalnızca C++) Bir numaralandırıcı ve bir numaralandırıcı olmayan her ikisi de koşullu olarak görünür.
ifadesi.
· (Yalnızca C++) Belirsiz sanal tabanlar.
· (Yalnızca C++) Bildirilmiş bir diziye abone olma kayıt olmak.
· (Yalnızca C++) Bildirilmiş bir değişkenin adresini almak kayıt olmak.
· (Yalnızca C++) Bir temel sınıf, türetilmiş bir sınıfın kopya oluşturucusunda başlatılmaz.
-Wchar-abonelikleri
Bir dizi abonesinin türü "char" ise uyar. Bu, yaygın bir hata nedenidir, çünkü
programcılar genellikle bu türün bazı makinelerde imzalandığını unutur. Bu uyarı
tarafından etkinleştirildi -Duvar.
-Wyorum
Yorum başlatma dizisi olduğunda uyar /* bir /* yorum yapın veya ne zaman bir
Ters Eğik Çizgi-Yeni Satır bir // Yorum. Bu uyarı tarafından etkinleştirildi -Duvar.
-Wno-kapsam-uyumsuzluğu
kullanırken geri bildirim profilleri eşleşmezse uyar. -fprofile-kullanımı seçenek. Eğer bir
kaynak dosya ile derleme arasında değiştirilir -fprofil-gen Ve birlikte -fprofile-kullanımı,
profil geri bildirimine sahip dosyalar kaynak dosyayla eşleşmeyebilir ve GCC bunu yapamaz.
profil geri bildirim bilgilerini kullanın. Varsayılan olarak, bu uyarı etkindir ve
bir hata olarak ele alınır. -Wno-kapsam-uyumsuzluğu uyarıyı devre dışı bırakmak için kullanılabilir veya
-Wno-hata=kapsam-uyumsuzluğu hatayı devre dışı bırakmak için kullanılabilir. Hatayı devre dışı bırakma
çünkü bu uyarı kodun optimize edilmemiş olmasına neden olabilir ve yalnızca şu durumlarda yararlıdır:
mevcut bir kod tabanındaki hata düzeltmeleri gibi çok küçük değişiklikler. tamamen devre dışı
uyarı tavsiye edilmez.
-Wno-cpp
(Yalnızca C, Objective-C, C++, Objective-C++ ve Fortran)
"#warning" yönergeleri tarafından yayılan uyarı mesajlarını bastırın.
-Wdouble-promosyon (Yalnızca C, C++, Objective-C ve Objective-C++)
"Float" türünde bir değer dolaylı olarak "double" olarak yükseltildiğinde bir uyarı verin. CPU'lar
32 bitlik "tek duyarlıklı" kayan nokta birimi ile donanımda "kayan nokta" uygular,
ancak yazılımda "çift" öykünme. Böyle bir makinede, kullanarak hesaplamalar yapmak
"çift" değerler, yazılım için gereken ek yük nedeniyle çok daha pahalıdır
öykünme.
"Çift" ile hesaplamaları yanlışlıkla yapmak kolaydır, çünkü kayan nokta
değişmezler örtük olarak "double" türündedir. Örneğin:
şamandıra alanı (yüzme yarıçapı)
{
dönüş 3.14159 * yarıçap * yarıçap;
}
derleyici tüm hesaplamayı "çift" ile gerçekleştirir, çünkü kayan nokta
literal bir "çift" dir.
-W biçimi
-W biçimi=n
Argümanların sağlandığından emin olmak için "printf" ve "scanf" vb. çağrılarını kontrol edin.
belirtilen biçim dizesine uygun türlere sahip ve dönüşümlerin
biçim dizesinde belirtilen anlam ifade eder. Buna standart işlevler dahildir ve
diğerleri "printf", "scanf", "strftime" ve format öznitelikleriyle belirtilir.
"strfmon" (C standardında olmayan bir X/Open uzantısı) aileleri (veya diğer hedef-
belirli aileler). Biçim öznitelikleri kontrol edilmeden hangi işlevler kontrol edilir?
belirtilen, seçilen standart sürüme ve bu tür işlev kontrollerine bağlıdır
belirtilen nitelik olmadan devre dışı bırakılır -bağımsız or -fno-yerleşik.
Biçimler, GNU libc sürüm 2.2 tarafından desteklenen biçim özelliklerine göre kontrol edilir.
Bunlar, tüm ISO C90 ve C99 özelliklerinin yanı sıra Single Unix'in özelliklerini içerir.
Spesifikasyon ve bazı BSD ve GNU uzantıları. Diğer kitaplık uygulamaları
tüm bu özellikleri destekler; GCC, ötesine geçen özellikler hakkında uyarıyı desteklemez
belirli bir kitaplığın sınırlamaları. Ancak, eğer -Wpedantik ile kullanılır -W biçimi,
Seçilen standart sürümde olmayan biçim özellikleri hakkında uyarılar verilir (ancak
"strfmon" biçimleri için, çünkü bunlar C standardının herhangi bir sürümünde değildir).
-W biçimi=1
-W biçimi
seçenek -W biçimi eşdeğerdir -W biçimi=1, ve -Wno-biçimi eşdeğerdir
-W biçimi=0. Beri -W biçimi ayrıca birkaç tane için boş biçimli argümanları kontrol eder.
fonksiyonları, -W biçimi ayrıca ima eder -Wonnull. Bu format seviyesinin bazı yönleri
kontrol, seçeneklerle devre dışı bırakılabilir: -Wno-format-nul içerir,
-Wno-format-ekstra argümanlar, ve -Wno-format-sıfır uzunluk. -W biçimi tarafından etkinleştirildi
-Duvar.
-Wno-format-nul içerir
If -W biçimi belirtilirse, NUL bayt içeren biçim dizeleri hakkında uyarmayın.
-Wno-format-ekstra argümanlar
If -W biçimi belirtilirse, bir "printf" için fazla argümanlar hakkında uyarmayın veya
"scanf" biçim işlevi. C standardı, bu tür argümanların
görmezden geldi.
Kullanılmayan argümanların, ile belirtilen kullanılmış argümanlar arasında olduğu durumlarda $
işlenen numarası özellikleri, normalde uyarılar verilir, çünkü
uygulama, kullanılmayanları atlamak için "va_arg" a ne tür geçeceğini bilemedi
argümanlar. Ancak, "scanf" biçimleri söz konusu olduğunda bu seçenek,
Tek Unix olduğundan, kullanılmayan argümanların tümü işaretçiyse uyarı
Spesifikasyon, bu tür kullanılmayan argümanlara izin verildiğini söylüyor.
-Wno-format-sıfır uzunluk
If -W biçimi belirtilirse, sıfır uzunluklu biçimler hakkında uyarmayın. C standardı
sıfır uzunluklu biçimlere izin verildiğini belirtir.
-W biçimi=2
etkinleştirme -W biçimi artı ek biçim kontrolleri. Şu anda eşdeğer -W biçimi
-Wformat-değişmez -Wformat-güvenlik -Wformat-y2k.
-Wformat-değişmez
If -W biçimi belirtilir, ayrıca biçim dizesi bir dize değişmezi değilse uyar
ve bu nedenle, format işlevi format argümanlarını şu şekilde almadıkça kontrol edilemez.
bir "va_list".
-Wformat-güvenlik
If -W biçimi belirtilir, ayrıca temsil eden biçim işlevlerinin kullanımları hakkında uyarır.
olası güvenlik sorunları. Şu anda, bu "printf" çağrıları hakkında uyarır ve
"scanf", biçim dizesinin bir dize değişmezi olmadığı ve hiçbir
argümanları "printf (foo);" gibi biçimlendirin. Bu bir güvenlik açığı olabilir, eğer
biçim dizesi güvenilmeyen girdiden geldi ve şunları içeriyor %n. (Bu şu anda bir
neyin alt kümesi -Wformat-değişmez hakkında uyarır, ancak gelecekte uyarılar olabilir
eklendi -Wformat-güvenlik dahil olmayan -Wformat-değişmez.)
NOT: Ubuntu 8.10 ve sonraki sürümlerde bu seçenek varsayılan olarak C için etkindir,
C++, ObjC, ObjC++. Devre dışı bırakmak için şunu kullanın: -Wno-format-güvenlikveya tüm formatı devre dışı bırakın
ile uyarılar -W biçimi=0. Biçim güvenliği uyarılarını önemli hale getirmek için şunu belirtin:
-Werror=format güvenliği.
-Wformat-y2k
If -W biçimi belirtilirse, yalnızca bir sonuç verebilecek "strftime" biçimleri hakkında da uyarır.
iki haneli yıl
-Wonnull
Null olmayan bir değer gerektirdiği için işaretlenen argümanlar için boş gösterici iletme konusunda uyar
"null olmayan" işlev özniteliği ile.
-Wonnull dahil -Duvar ve -W biçimi. ile devre dışı bırakılabilir. -Wno-null olmayan
seçeneği.
-Winit-öz (Yalnızca C, C++, Objective-C ve Objective-C++)
Kendileriyle başlatılan başlatılmamış değişkenler hakkında uyarın. Bunu not et
seçeneği yalnızca -Başlatıldı seçeneği.
Örneğin, GCC, yalnızca aşağıdaki snippet'te "i"nin başlatılmamış olması konusunda uyarır
ne zaman -Winit-öz belirtildi:
intf()
{
int ben = ben;
dönüş i;
}
Bu uyarı tarafından etkinleştirildi -Duvar C++'da.
-Wimplicit-int (Yalnızca C ve Objective-C)
Bir bildirim bir tür belirtmediğinde uyar. Bu uyarı tarafından etkinleştirildi -Duvar.
-Wimplicit-fonksiyon-bildirimi (Yalnızca C ve Objective-C)
Bildirilmeden önce bir işlev kullanıldığında bir uyarı verin. C99 modunda
(-std = c99 or -std=gnu99), bu uyarı varsayılan olarak etkindir ve bir
tarafından hata -pedantik-hatalar. Bu uyarı ayrıca -Duvar.
-Wimplicit (Yalnızca C ve Objective-C)
Aynısı -Wimplicit-int ve -Wimplicit-fonksiyon-bildirimi. Bu uyarı etkinleştirildi
by -Duvar.
-Wigned-eleyenler (Yalnızca C ve C++)
Bir işlevin dönüş türünün "const" gibi bir tür niteleyicisi varsa uyar. ISO C için
böyle bir tür niteleyicinin bir etkisi yoktur, çünkü bir işlev tarafından döndürülen değer bir
değer. C++ için uyarı yalnızca skaler türler veya "void" için yayınlanır. ISO C
işlev tanımlarında nitelikli "geçersiz" dönüş türlerini yasaklar, bu nedenle bu tür dönüş türleri
bu seçenek olmasa bile her zaman bir uyarı alırsınız.
Bu uyarı ayrıca -Ekstra.
-Wana
türü varsa uyar ana şüphelidir. ana harici bir fonksiyon olmalı
bağlantı, int döndürme, sıfır bağımsız değişken, iki veya üç bağımsız değişken alma
uygun tipler. Bu uyarı, C++'da varsayılan olarak etkindir ve aşağıdakilerden biri tarafından etkinleştirilir:
-Duvar or -Wpedantik.
-Weksis-parantez
Toplama veya birleştirme başlatıcısı tam olarak parantez içine alınmadıysa uyar. aşağıda
örneğin, başlatıcı için a tam olarak parantez içine alınmamıştır, ancak bunun için b tamamen
parantez içinde. Bu uyarı tarafından etkinleştirildi -Duvar C cinsinden
int a[2][2] = { 0, 1, 2, 3 };
int b[2][2] = { { 0, 1 }, { 2, 3 } };
Bu uyarı tarafından etkinleştirildi -Duvar.
-Wmissing-include-dirs (Yalnızca C, C++, Objective-C ve Objective-C++)
Kullanıcı tarafından sağlanan bir içerme dizini yoksa uyar.
-W parantezler
olduğu gibi belirli bağlamlarda parantezler atlanırsa uyar.
doğruluk değerinin beklendiği bir bağlamda veya operatörlerin iç içe geçtiği durumlarda atama
kimin önceliği hakkında çoğu zaman kafası karışır.
Ayrıca şöyle bir karşılaştırma varsa uyarın x<=y<=z görünür; bu eşdeğerdir (x<=y ? 1 : 0)
<= z, sıradan matematiksel gösterimden farklı bir yorumdur.
Ayrıca "if" ifadesinin bir karışıklık olabileceği yapılar hakkında uyarıda bulunun.
"else" dalı aittir. İşte böyle bir duruma bir örnek:
{
Eğer bir)
eğer (b)
foo();
başka
Çubuk ();
}
C/C++'da her "else" dalı, mümkün olan en içteki "if" deyimine aittir.
bu örnekte "if (b)" dir. Bu genellikle programcının beklediği şey değildir, çünkü
yukarıdaki örnekte programcının seçtiği girinti ile gösterilmiştir. Ne zaman ... Olsa
Bu karışıklık potansiyeli, GCC bu bayrak belirtildiğinde bir uyarı verir.
Uyarıyı ortadan kaldırmak için, en içteki "if" ifadesinin etrafına açık parantezler ekleyin, böylece
"else"nin ekteki "if"e ait olmasının hiçbir yolu yoktur. Ortaya çıkan kod görünüyor
bunun gibi:
{
Eğer bir)
{
eğer (b)
foo();
başka
Çubuk ();
}
}
Ayrıca, orta işlenen atlanmış olarak "?:" GNU uzantısının tehlikeli kullanımları konusunda uyarın.
"?": operatöründeki koşul bir boole ifadesi olduğunda, atlanan değer
her zaman 1. Genellikle programcılar bunun koşullu komut dosyası içinde hesaplanan bir değer olmasını bekler.
yerine ifade.
Bu uyarı tarafından etkinleştirildi -Duvar.
-Sıra noktası
Sıra ihlalleri nedeniyle tanımsız semantiği olabilecek kod hakkında uyar
C ve C++ standartlarında nokta kuralları.
C ve C++ standartları, bir C/C++ programındaki ifadelerin sırasını tanımlar.
açısından değerlendirildi dizi noktalarıarasında kısmi bir sıralamayı temsil eden
programın bölümlerinin yürütülmesi: sıra noktasından önce yürütülenler ve
arkasından idam edildi. Bunlar, tam bir ifadenin değerlendirilmesinden sonra meydana gelir (bir
daha büyük bir ifadenin parçası değildir), bir ifadenin ilk işleneninin değerlendirilmesinden sonra
"&&", "||", "? :" veya "," (virgül) operatörü, bir işlev çağrılmadan önce (ancak
argümanlarının değerlendirilmesi ve çağrılan işlevi gösteren ifade) ve
diğer bazı yerler. Sıra noktası kuralları tarafından ifade edilenler dışında, sıra
Bir ifadenin alt ifadelerinin değerlendirilmesi belirtilmemiştir. Tüm bu kurallar
toplam bir düzen yerine yalnızca kısmi bir düzeni tanımlayın, çünkü örneğin, eğer iki
işlevler, aralarında sıra noktası olmayan tek bir ifade içinde çağrılır.
fonksiyonların çağrıldığı sıra belirtilmemiştir. Bununla birlikte, standartlar
komite, işlev çağrılarının örtüşmediğine karar verdi.
Sıralama noktaları arasında, değerlerinde değişiklik yapıldığında belirtilmez.
nesneler etkili olur. Davranışı buna bağlı olan programların tanımsız davranışı vardır;
C ve C++ standartları, "Önceki ve sonraki sıra noktası arasında bir
nesnenin depolanmış değeri, bir değerlendirmenin değerlendirilmesiyle en fazla bir kez
ifade. Ayrıca, ön değer sadece değeri belirlemek için okunacaktır.
saklanabilir.". Bir program bu kuralları ihlal ederse, sonuçlar herhangi bir belirli
uygulanması tamamen öngörülemez.
Tanımsız davranışa sahip kod örnekleri şunlardır: "a = a++;", "a[n] = b[n++]" ve "a[i++] =
i;". Bazı daha karmaşık vakalar bu seçenekle teşhis edilmez ve
ara sıra yanlış pozitif sonuç, ancak genel olarak oldukça etkili bulunmuştur.
programlarda bu tür bir sorunu tespit etmek.
Standart kafa karıştırıcı bir şekilde ifade edilmiştir, bu nedenle kesinlik konusunda bazı tartışmalar vardır.
ince durumlarda sıra noktası kurallarının anlamı. tartışma linkleri
Önerilen resmi tanımlar da dahil olmak üzere sorun, GCC okumaları sayfasında bulunabilir,
dehttp://gcc.gnu.org/readings.html>.
Bu uyarı tarafından etkinleştirildi -Duvar C ve C ++ için.
-Wno-dönüş-yerel-addr
Bir değişkene bir işaretçi (veya C++'da bir referans) döndürme konusunda uyarmayın.
işlev döndükten sonra kapsam dışı.
-Wreturn-tipi
Varsayılan olarak "int" olan bir dönüş türüyle bir işlev tanımlandığında uyar. Ayrıca
dönüş türü olan bir işlevde dönüş değeri olmayan herhangi bir "dönüş" ifadesi hakkında uyar
"geçersiz" değildir (işlev gövdesinin sonundan düşmek, geri dönmek olarak kabul edilir)
bir değer olmadan) ve bir işlevde bir ifade içeren bir "dönüş" ifadesi hakkında
dönüş türü "void" olan.
C++ için, dönüş türü olmayan bir işlev, her zaman bir tanı mesajı üretir, hatta
ne zaman -Wno-dönüş tipi belirtilir. Tek istisnalar ana ve fonksiyonlar
sistem başlıklarında tanımlanmıştır.
Bu uyarı tarafından etkinleştirildi -Duvar.
-W anahtarı
Bir "switch" ifadesinin numaralandırılmış türde bir dizini olduğunda ve "vaka" içermediğinde uyar
bu numaralandırmanın adlandırılmış kodlarından biri veya daha fazlası için. ("Varsayılan" bir öğenin varlığı
etiket bu uyarıyı engeller.) "durum" etiketleri ayrıca numaralandırma aralığının dışındadır.
Bu seçenek kullanıldığında uyarıları tetikleyin ("varsayılan" bir etiket olsa bile). Bu
uyarı etkinleştirildi -Duvar.
-Wswitch-varsayılan
Bir "switch" ifadesinin "varsayılan" bir durumu olmadığında uyar.
-Wswitch-enum
Bir "switch" ifadesinin numaralandırılmış türde bir dizini olduğunda ve "vaka" içermediğinde uyar
bu numaralandırmanın adlandırılmış kodlarından biri veya daha fazlası için. dışındaki "durum" etiketleri
numaralandırma aralığı da bu seçenek kullanıldığında uyarı verir. Tek fark
arasında -W anahtarı ve bu seçenek, bu seçeneğin atlanmış bir hata hakkında bir uyarı vermesidir.
"varsayılan" bir etiket olsa bile numaralandırma kodu.
-Wsync-nand (Yalnızca C ve C++)
"__sync_fetch_and_nand" ve "__sync_nand_and_fetch" yerleşik işlevleri olduğunda uyar
kullanılmış. Bu işlevler GCC 4.4'te semantiği değiştirmiştir.
-Wtrigraflar
Programın anlamını değiştirebilecek herhangi bir trigrafla karşılaşılırsa uyar
(yorumların içindeki trigraflar hakkında uyarı yapılmaz). Bu uyarı tarafından etkinleştirildi -Duvar.
-Wunused-but-set-parametresi
Bir işlev parametresine atandığında, ancak bunun dışında kullanılmadığında uyar (bunun dışında)
beyanı).
Bu uyarıyı bastırmak için kullanılmayan özniteliği.
Bu uyarı ayrıca -Kullanılmamış Birlikte -Ekstra.
-Wunused-but-set-değişkeni
Yerel bir değişkene atandığında, ancak bunun dışında kullanılmadığında uyar (onun dışında).
beyanname). Bu uyarı tarafından etkinleştirildi -Duvar.
Bu uyarıyı bastırmak için kullanılmayan özniteliği.
Bu uyarı ayrıca -Kullanılmamıştarafından etkinleştirilen -Duvar.
-Wunused-fonksiyonu
Statik bir işlev bildirildiğinde ancak tanımlanmadığında veya satır içi olmayan bir statik olduğunda uyar
işlev kullanılmaz. Bu uyarı tarafından etkinleştirildi -Duvar.
-Wunused-etiket
Bir etiket bildirildiğinde ancak kullanılmadığında uyar. Bu uyarı tarafından etkinleştirildi -Duvar.
Bu uyarıyı bastırmak için kullanılmayan özniteliği.
-Wunused-yerel-tip tanımları (Yalnızca C, Objective-C, C++ ve Objective-C++)
Bir işlevde yerel olarak tanımlanmış bir typedef kullanılmadığında uyar. Bu uyarı
tarafından etkinleştirildi -Duvar.
-Wunused-parametre
Bir işlev parametresi, bildirimi dışında kullanılmadığında uyar.
Bu uyarıyı bastırmak için kullanılmayan özniteliği.
-Wno-kullanılmayan-sonuç
"warn_unused_result" özniteliği ile işaretlenmiş bir işlevi arayan kişi,
dönüş değerini kullanmayın. Varsayılan -Wunused-sonuç.
-Wunused-değişken
Yerel bir değişken veya sabit olmayan bir statik değişken, bunun dışında kullanılmadığında uyar.
onun beyanı. Bu uyarı tarafından etkinleştirildi -Duvar.
Bu uyarıyı bastırmak için kullanılmayan özniteliği.
-Wunused-değer
Bir ifade açıkça kullanılmayan bir sonucu hesapladığında uyar. Bastırmak
bu uyarı kullanılmayan ifadeyi geçersiz. Bu bir ifade-ifadesini içerir
veya yan etki içermeyen bir virgül ifadesinin sol tarafı. İçin
örneğin, gibi bir ifade x[i,j] bir uyarıya neden olurken, x[(boşluk)i,j] değil.
Bu uyarı tarafından etkinleştirildi -Duvar.
-Kullanılmamış
Yukarıdaki tüm -Kullanılmamış seçenekler birleştirildi.
Kullanılmayan bir fonksiyon parametresi hakkında uyarı almak için,
-Ekstra -Kullanılmamış (Bunu not et -Duvar ima -Kullanılmamış) veya ayrıca belirtin
-Wunused-parametre.
-Başlatıldı
İlk başlatılmadan otomatik bir değişken kullanılıyorsa veya bir değişken varsa uyar
bir "setjmp" çağrısı tarafından engellenebilir. C++'da, statik olmayan bir başvuru veya
statik const üye, yapıcıları olmayan bir sınıfta görünür.
Değişkenin başlatılmamış değerini kullanan kod hakkında uyarmak istiyorsanız
kendi başlatıcısı, -Winit-öz seçeneği.
Bu uyarılar, tek tek başlatılmamış veya tıkanmış yapı elemanları için meydana gelir,
birleştirme veya dizi değişkenlerinin yanı sıra başlatılmamış veya engellenmiş değişkenler için
bir bütün olarak. "Uçucu" olarak bildirilen değişkenler veya öğeler için oluşmazlar. Çünkü
bu uyarılar optimizasyona, tam değişkenlere veya orada bulunan öğelere bağlıdır.
uyarılar, kesin optimizasyon seçeneklerine ve kullanılan GCC sürümüne bağlıdır.
Yalnızca bir değeri hesaplamak için kullanılan bir değişken hakkında hiçbir uyarı olmayabileceğini unutmayın.
kendisi asla kullanılmayan değer, çünkü bu tür hesaplamalar veri akışı tarafından silinebilir.
uyarılar yazdırılmadan önce analiz.
-Wbelki-başlatılmamış
Otomatik bir değişken için, işlev girişinden kullanımına giden bir yol varsa
başlatılan değişkendir, ancak bunun için başka yollar da vardır.
değişken başlatılmazsa, derleyici kanıtlayamazsa bir uyarı verir.
başlatılmamış yollar çalışma zamanında yürütülmez. Bu uyarılar isteğe bağlı yapılır
çünkü GCC, kodun doğru olmasının tüm nedenlerini görecek kadar akıllı değil
bir hata varmış gibi görünmesine rağmen. İşte bunun nasıl olabileceğine dair bir örnek:
{
int x;
anahtar (y)
{
durum 1: x = 1;
break;
durum 2: x = 4;
break;
durum 3: x = 5;
}
foo(x);
}
"y" değeri her zaman 1, 2 veya 3 ise, "x" her zaman başlatılır, ancak GCC
bunu bilmiyor. Uyarıyı bastırmak için varsayılan bir durum sağlamanız gerekir.
ileri sürmek(0) veya benzer bir kod.
Bu seçenek ayrıca, geçici olmayan bir otomatik değişkenin bir değişken tarafından değiştirilebileceği konusunda uyarır.
"longjmp" için arayın. Bu uyarılar da yalnızca optimizasyonda mümkündür.
derleme.
Derleyici yalnızca "setjmp" çağrılarını görür. "longjmp" nin nerede olacağını bilemez
aranan; aslında, bir sinyal işleyici onu kodun herhangi bir noktasında çağırabilir. Olarak
Sonuç olarak, "longjmp" nedeniyle aslında hiçbir sorun olmadığında bile bir uyarı alabilirsiniz.
aslında sorun yaratacak yerde aranamaz.
Kullandığınız tüm işlevleri bildirirseniz, bazı sahte uyarılardan kaçınılabilir.
asla "noreturn" olarak geri dönmeyin.
Bu uyarı tarafından etkinleştirildi -Duvar or -Ekstra.
-Bilinmeyen-pragmalar
GCC tarafından anlaşılmayan bir "#pragma" yönergesi ile karşılaşıldığında uyar. Eğer bu
komut satırı seçeneği kullanılır, sistemdeki bilinmeyen pragmalar için uyarılar bile verilir
başlık dosyaları. Uyarılar yalnızca kullanıcı tarafından etkinleştirilirse durum böyle değildir. -Duvar
komut satırı seçeneği.
-Wno-pragmalar
Yanlış parametreler, geçersiz sözdizimi veya pragmaların yanlış kullanımları hakkında uyarmayın.
pragmalar arasındaki çatışmalar Ayrıca bakınız -Bilinmeyen-pragmalar.
- Kısıtlı yumuşatma
Bu seçenek yalnızca şu durumlarda etkindir: -fstrict-aliasing aktif. Bu kod hakkında uyarır
derleyicinin optimizasyon için kullandığı katı aliasing kurallarını bozabilir.
Uyarı tüm durumları yakalamaz, ancak daha yaygın olanları yakalamaya çalışır
tuzaklar. Dahildir -Duvar. Eşdeğerdir -Wstrict-aliasing=3
-Wstrict-aliasing=n
Bu seçenek yalnızca şu durumlarda etkindir: -fstrict-aliasing aktif. Bu kod hakkında uyarır
derleyicinin optimizasyon için kullandığı katı aliasing kurallarını bozabilir.
Daha yüksek seviyeler daha yüksek doğruluğa karşılık gelir (daha az yanlış pozitif). Yüksek seviyeler
aynı zamanda daha fazla çabaya karşılık gelir, aynı şekilde -O çalışır. - Kısıtlı yumuşatma is
eşdeğerdir -Wstrict-aliasing=3.
Seviye 1: En agresif, hızlı, en az doğru. Daha yüksek seviyelerde olduğunda muhtemelen yararlıdır
uyarma ama -fstrict-aliasing çok az yanlış olduğu için yine de kodu kırar
negatifler. Ancak, birçok yanlış pozitifliği vardır. Tüm işaretçi dönüşümleri için uyarır
muhtemelen uyumsuz türler arasında, asla başvurulmamış olsa bile. Önde koşar
sadece son.
Seviye 2: Agresif, hızlı, çok hassas değil. Hala birçok yanlış pozitif olabilir (değil
seviye 1 kadar) ve birkaç yanlış negatif (ancak muhtemelen seviye 1'den fazla).
Seviye 1'den farklı olarak, yalnızca bir adres alındığında uyarır. Eksik türler hakkında uyarır.
Yalnızca ön uçta çalışır.
Seviye 3 (varsayılan - Kısıtlı yumuşatma): Çok az sayıda yanlış pozitif ve az sayıda olmalıdır
yanlış negatifler. Optimizasyon etkinleştirildiğinde seviye 1 veya 2'den biraz daha yavaş.
Ön uçtaki ortak noktalama+başvuru modeliyle ilgilenir:
"*(int*)&some_float". Optimizasyon etkinleştirilirse, arka uçta da çalışır;
bilgi akışına duyarlı noktalardan yararlanan birden çok ifade durumuyla ilgilenir.
Yalnızca dönüştürülen işaretçinin referansı kaldırıldığında uyarır. Eksik konusunda uyarmaz
türleri.
-Wstrict-taşma
-Wstrict-taşma=n
Bu seçenek yalnızca şu durumlarda etkindir: -fstrict-taşma aktif. Vakalar hakkında uyarır
derleyici, imzalı taşmanın olmadığı varsayımına göre optimize eder.
meydana gelmek. Kodun taşabileceği tüm durumlar hakkında uyarı vermediğini unutmayın:
yalnızca derleyicinin bazı optimizasyonları uyguladığı durumlar hakkında uyarır. Böylece bu
uyarı, optimizasyon düzeyine bağlıdır.
İmzalı taşmanın oluşmadığını varsayan bir optimizasyon, aşağıdaki durumlarda tamamen güvenlidir:
dahil olan değişkenlerin değerleri, taşmanın asla olmayacağı şekildedir, aslında,
meydana gelmek. Bu nedenle, bu uyarı kolayca yanlış bir pozitif verebilir: kod hakkında bir uyarı
bu aslında bir sorun değil. Önemli konulara odaklanmaya yardımcı olmak için birkaç uyarı
seviyeleri tanımlanır. Tanımsız imzalı taşma kullanımı için hiçbir uyarı verilmez
bir döngünün kaç yineleme gerektirdiğini tahmin ederken, özellikle belirlerken
bir döngünün yürütülüp yürütülmeyeceği.
-Wstrict-taşma=1
Hem şüpheli hem de kaçınılması kolay durumlar hakkında uyarın. örneğin, ile
-fstrict-taşma, derleyici "x + 1 > x" i 1'e basitleştirir.
-Wstrict-taşma tarafından etkinleştirildi -Duvar; daha yüksek seviyeler değildir ve olmalıdır
açıkça talep edilmiştir.
-Wstrict-taşma=2
Ayrıca, karşılaştırmanın bir sabite basitleştirildiği diğer durumlar hakkında da uyarın. İçin
örnek: "abs (x) >= 0". Bu yalnızca şu durumlarda basitleştirilebilir: -fstrict-taşma olduğu
etkisi, çünkü "abs (INT_MIN)" sıfırdan küçük olan "INT_MIN" değerine taşar.
-Wstrict-taşma (seviyesiz) ile aynıdır -Wstrict-taşma=2.
-Wstrict-taşma=3
Ayrıca karşılaştırmanın basitleştirildiği diğer durumlar hakkında da uyarın. Örneğin: "x + 1
> 1", "x > 0" olarak basitleştirilmiştir.
-Wstrict-taşma=4
Ayrıca, yukarıdaki durumlarda kapsanmayan diğer basitleştirmeler hakkında da uyarıda bulunun. İçin
örnek: "(x * 10) / 5", "x * 2" olarak basitleştirilmiştir.
-Wstrict-taşma=5
Ayrıca derleyicinin bir sabitin büyüklüğünü azalttığı durumlar hakkında da uyarın
karşılaştırmaya dahil edilmiştir. Örneğin: "x + 2 > y", "x + 1 >= y" olarak basitleştirilir.
Bu, yalnızca en yüksek uyarı düzeyinde rapor edilir, çünkü bu basitleştirme
birçok karşılaştırma için geçerlidir, bu nedenle bu uyarı düzeyi çok sayıda
yanlış pozitifler.
-Wöner-özellik=[saf|const|iade yok|biçim]
Bir öznitelik eklemenin faydalı olabileceği durumlar için uyarın. Şu anda nitelikler
desteklenenler aşağıda listelenmiştir.
-Wsuggest-attribute=saf
-Wsuggest-öznitelik=sabit
-Wsuggest-attribute=noreturn
"Saf", "const" veya "const" özniteliklerine aday olabilecek işlevler hakkında uyarın.
"iade yok". Derleyici yalnızca diğer derlemede görünen işlevler için uyarır
birimleri veya ("saf" ve "const" durumunda) işlevin kanıtlayamadığı durumlarda
normal olarak döner. Bir işlev, bir sonsuz içermiyorsa normal olarak döner.
fırlatarak, "abort()"u çağırarak veya bindirerek anormal bir şekilde döngü yapın veya geri dönün. Bu
analiz seçeneği gerektirir -fipa-saf-const, varsayılan olarak etkindir -O ve
daha yüksek. Daha yüksek optimizasyon seviyeleri, analizin doğruluğunu artırır.
-Wsuggest-öznitelik=biçim
-Wmissing-format-özniteliği
"Biçim" öznitelikleri için aday olabilecek işlev işaretçileri hakkında uyarın.
Bunların mutlak adaylar değil, yalnızca olası adaylar olduğunu unutmayın. GCC tahmin ediyor
atamada kullanılan "format" özniteliklerine sahip işlev işaretçileri,
başlatma, parametre geçişi veya dönüş ifadeleri karşılık gelen bir
Ortaya çıkan türdeki "format" özelliği. yani sol taraf
atama veya başlatma, parametre değişkeninin türü veya dönüş
sırasıyla içeren işlevin türü de bir "format" özniteliğine sahip olmalıdır
uyarıyı önlemek için.
GCC ayrıca "biçim" için aday olabilecek işlev tanımları hakkında da uyarır
Öznitellikler. Yine, bunlar sadece olası adaylardır. GCC, "format" olduğunu tahmin ediyor
nitelikler gibi bir işlevi çağıran herhangi bir işlev için uygun olabilir
"vprintf" veya "vscanf", ancak bu her zaman böyle olmayabilir ve bazı işlevler
hangi "format" özniteliklerinin uygun olduğu saptanamayabilir.
-Warray sınırları
Bu seçenek yalnızca şu durumlarda etkindir: -ftree-vrp etkin (varsayılan -O2 ve yukarıda). Bilişim Teknoloji
her zaman sınırların dışında olan dizilerin aboneleri hakkında uyarır. Bu uyarı
tarafından etkinleştirildi -Duvar.
-Wno-div-sıfır
Derleme zamanı tamsayısını sıfıra bölme konusunda uyarmayın. Kayan noktalı bölme
Sonsuzlukları elde etmenin meşru bir yolu olabileceğinden sıfır hakkında uyarılmaz ve
NaN'ler.
-Wsystem-başlıkları
Sistem başlık dosyalarında bulunan yapılar için uyarı mesajları yazdırın. gelen uyarılar
sistem üstbilgileri, genellikle
gerçek sorunları belirtir ve yalnızca derleyici çıktısının okunmasını zorlaştırır. kullanma
bu komut satırı seçeneği, GCC'ye sistem başlıklarından uyarılar göndermesini söyler.
kullanıcı kodunda meydana geldi. Ancak, şunu unutmayın: -Duvar bu seçenekle birlikte
yok değil sistem başlıklarında bilinmeyen pragmalar hakkında uyar --- bunun için, -Bilinmeyen-pragmalar
ayrıca kullanılmalıdır.
-Wtrambolinler
İç içe geçmiş işlevlere yönelik işaretçiler için oluşturulan trambolinler hakkında uyarın.
Trambolin, çalıştırma sırasında oluşturulan küçük bir veri veya kod parçasıdır.
iç içe geçmiş bir işlevin adresi alındığında yığındaki zaman ve
iç içe işlevi dolaylı olarak çağırmak için kullanılır. Bazı hedefler için bu
yalnızca verilerden oluşur ve bu nedenle özel bir işlem gerektirmez. Fakat,
çoğu hedef için koddan oluşur ve bu nedenle yığın gerektirir
Programın düzgün çalışması için çalıştırılabilir hale getirilmesi.
-Wfloat-eşit
Eşitlik karşılaştırmalarında kayan nokta değerleri kullanılıyorsa uyar.
Bunun arkasındaki fikir, bazen (programcı için) uygun olmasıdır.
kayan nokta değerlerini sonsuz kesinlikteki gerçek sayılara yaklaşımlar olarak kabul edin.
Bunu yapıyorsanız, hesaplamanız gerekir (kodu analiz ederek veya bazılarında
diğer şekilde) hesaplamanın getirdiği maksimum veya olası maksimum hata ve
karşılaştırmalar yaparken (ve çıktı üretirken buna izin verin, ancak bu bir
farklı sorun). Özellikle eşitliği test etmek yerine kontrol etmelisiniz.
iki değerin örtüşen aralıkları olup olmadığını görmek için; ve bu ile yapılır
ilişkisel operatörler, bu nedenle eşitlik karşılaştırmaları muhtemelen yanlıştır.
-Geleneksel (Yalnızca C ve Objective-C)
Geleneksel ve ISO C'de farklı davranan belirli yapılar hakkında uyarın.
geleneksel C eşdeğeri olmayan ve/veya sorunlu ISO C yapıları hakkında uyarın
kaçınılması gereken yapılardır.
· Makro gövdesindeki dize değişmezleri içinde görünen makro parametreleri. İçinde
geleneksel C makro değişimi, dize değişmezleri içinde, ancak ISO C'de gerçekleşir
o değil.
· Geleneksel C'de bazı önişlemci yönergeleri mevcut değildi. Geleneksel
önişlemciler bir satırı yalnızca aşağıdaki durumlarda yönerge olarak kabul eder: # sütunda göründü
1. hatta. Öyleyse -Geleneksel geleneksel C yönergeleri hakkında uyarır
anlar ama görmezden gelir çünkü # üzerinde ilk karakter olarak görünmüyor
çizgi. Ayrıca, aşağıdaki gibi yönergeleri gizlemenizi önerir. #pragma tarafından anlaşılmadı
geleneksel C'yi girintileyerek. Bazı geleneksel uygulamalar
tanımak #elif, bu nedenle bu seçenek bundan tamamen kaçınmayı önerir.
· Bağımsız değişkenler olmadan görünen işlev benzeri bir makro.
· Tekli artı operatörü.
· U tamsayı sabit soneki veya F or L kayan nokta sabiti sonekleri.
(Geleneksel C, L tamsayı sabitlerinde son ek.) Dikkat edin, bunlar
son ekler, çoğu modern sistemin sistem başlıklarında tanımlanan makrolarda görünür,
örneğin _DK/_MAX makrolar " ". Bu makroların kullanıcı kodunda kullanılması,
normalde sahte uyarılara yol açar, ancak GCC'nin entegre ön işlemcisi
bu durumlarda uyarıdan kaçınmak için yeterli bağlam.
· Bir blokta harici olarak bildirilen ve daha sonra kullanım süresinin bitiminden sonra kullanılan bir fonksiyon
engellemek.
· Bir "switch" ifadesinin "long" türünde bir işleneni vardır.
· "Statik" olmayan bir işlev bildirimi "statik" bir işlev bildirimini takip eder. Bu yapı değil
bazı geleneksel C derleyicileri tarafından kabul edilir.
· Bir tamsayı sabitinin ISO tipi, onunkinden farklı bir genişliğe veya işarete sahiptir.
geleneksel tip. Bu uyarı yalnızca sabitin tabanı on ise verilir.
Diğer bir deyişle, tipik olarak bit modellerini temsil eden onaltılık veya sekizlik değerler,
konusunda uyardı.
· ISO dize birleştirme kullanımı algılandı.
· Otomatik agregaların başlatılması.
· Tanımlayıcı etiketlerle çakışıyor. Geleneksel C için ayrı bir ad alanı yoktur.
etiketler.
· Sendikaların başlatılması. Başlatıcı sıfırsa, uyarı atlanır.
Bu, kullanıcı kodunda sıfır başlatıcının göründüğü varsayımıyla yapılır.
başlatıcı uyarılarını kaçırmamak için örneğin "__STDC__" ile koşullandırılmıştır ve
geleneksel C durumunda sıfıra varsayılan başlatma.
· Sabit/kayan noktalı değerler arasında prototiplere göre dönüşümler ve bunun tersi. NS
Geleneksel C ile derleme yaparken bu prototiplerin olmaması ciddi
sorunlar. Bu, olası dönüştürme uyarılarının bir alt kümesidir; tam set için
kullanım -Geleneksel-dönüşüm.
· ISO C tarzı fonksiyon tanımlarının kullanımı. Bu uyarı kasıtlı olarak değil ihraç
bu ISO C özellikleri nedeniyle prototip bildirimleri veya değişken işlevler için
libiberty'nin geleneksel C uyumluluk makrolarını kullanırken kodunuzda görünür,
"PARAMS" ve "VPARAMS". Bu uyarı, iç içe işlevler için de atlanır
çünkü bu özellik zaten bir GCC uzantısıdır ve bu nedenle
geleneksel C uyumluluğu.
-Geleneksel-dönüşüm (Yalnızca C ve Objective-C)
Bir prototip, olacağından farklı bir tür dönüşümüne neden olursa uyar
bir prototipin yokluğunda aynı argümana. Bu, aşağıdakilerin dönüşümlerini içerir:
kayan nokta için sabit nokta ve bunun tersi ve genişliği veya genişliği değiştiren dönüşümler
varsayılan yükseltme ile aynı olmadıkça, sabit noktalı bir bağımsız değişkenin imzası.
-Wdeclaration-sonra-ifadesi (Yalnızca C ve Objective-C)
Bir bloktaki bir ifadeden sonra bir bildirim bulunduğunda uyar. Bu yapı, bilinen
C++'dan, ISO C99 ile tanıtıldı ve varsayılan olarak GCC'de izin verilir. O değil
ISO C90 tarafından desteklenir ve GCC 3.0'dan önceki GCC sürümleri tarafından desteklenmez.
-Wundef
Tanımsız bir tanımlayıcı bir #Eğer Direktif.
-Wno-endif-etiketleri
olduğunda uyarmayın. #else ya da #endif metin takip eder.
-Gölge
Yerel bir değişken veya tür bildirimi başka bir değişkeni gölgelediğinde uyar,
parametre, tür veya sınıf üyesi (C++'da) veya yerleşik bir işlev
gölgeli. C++'da, yerel bir değişken açık bir değişkeni gölgelerse derleyicinin uyardığını unutmayın.
typedef, ancak bir yapı/sınıf/enum'u gölgelemiyorsa.
-daha büyük-tan=len
Şundan daha büyük bir nesne olduğunda uyar len bayt tanımlanır.
-Wframe-büyük-tan=len
Bir fonksiyon çerçevesinin boyutu şu değerden büyükse uyar len bayt. yapılan hesaplama
yığın çerçeve boyutunu belirlemek için yaklaşık ve muhafazakar değil. Gerçek
gereksinimler biraz daha büyük olabilir len uyarı almasanız bile. İçinde
ek olarak, "alloca", değişken uzunluklu diziler veya ilgili
yapılar, bir veri yayınlayıp yayınlamamaya karar verirken derleyici tarafından dahil edilmez.
uyarı.
-Wno-free-yığın olmayan-nesne
Yığın üzerinde tahsis edilmemiş bir nesneyi serbest bırakmaya çalışırken uyarmayın.
-Wstack-kullanımı=len
Bir işlevin yığın kullanımı şundan daha büyük olabilirse uyar len bayt. hesaplama
yığın kullanımını belirlemek için yapılan muhafazakardır. "alloca" ile tahsis edilen herhangi bir alan,
değişken uzunluklu diziler veya ilgili yapılar derleyici tarafından dahil edildiğinde
uyarı yapılıp yapılmayacağının belirlenmesi.
Mesaj çıktısı ile uyumludur -fstack-kullanımı.
· Yığın kullanımı tamamen statik ise ancak belirtilen miktarı aşarsa, bu:
uyarı: yığın kullanımı 1120 bayttır
· Yığın kullanımı (kısmen) dinamik ancak sınırlıysa, bu:
uyarı: yığın kullanımı 1648 bayt olabilir
· Yığın kullanımı (kısmen) dinamikse ve sınırlı değilse:
uyarı: yığın kullanımı sınırsız olabilir
-Wunsafe-loop optimizasyonları
Derleyici herhangi bir şey üstlenemeyeceği için döngü optimize edilemezse uyar
döngü indekslerinin sınırları. İle birlikte -funsafe-loop optimizasyonları derleyici varsa uyar
gibi varsayımlarda bulunur.
-Wno-pedantik-ms-formatı (Yalnızca MinGW hedefleri)
ile birlikte kullanıldığında -W biçimi ve - bilgiçlik GNU uzantıları olmadan, bu
seçeneği, ISO dışı "printf" / "scanf" format genişliği belirteçleri hakkındaki uyarıları devre dışı bırakır
MS çalışma zamanına bağlı olarak Windows hedeflerinde kullanılan "I32", "I64" ve "I".
-Wpointer-arith
Bir işlev türünün "boyutuna" veya "boşluğa" bağlı olan herhangi bir şey hakkında uyarın. GNU C
"void *" ile hesaplamalarda kolaylık olması için bu türlere 1 boyutu atar
işlevler için işaretçiler ve işaretçiler. C++'da aritmetik bir işlem olduğunda da uyar
"NULL" içerir. Bu uyarı ayrıca -Wpedantik.
-Wtype-limitleri
Sınırlı aralığı nedeniyle bir karşılaştırma her zaman doğruysa veya her zaman yanlışsa uyar.
veri türü, ancak sabit ifadeler için uyarmayın. Örneğin, imzasız bir uyarı
değişken sıfır ile karşılaştırılır < or >=. Bu uyarı ayrıca
-Ekstra.
-Wbad-fonksiyon dökümü (Yalnızca C ve Objective-C)
Eşleşmeyen bir türe bir işlev çağrısı yapıldığında uyar. Örneğin, eğer uyar
"int malloc()", "herhangi bir şey *" olarak kullanılır.
-Wc++-uyumlu (Yalnızca C ve Objective-C)
ISO C ve ISO'nun ortak alt kümesinin dışında kalan ISO C yapıları hakkında uyarın
C++, örneğin "void *"den bir işaretçiye "void" olmayana örtük dönüştürme isteği
yazın.
-Wc++11-uyumluluk (Yalnızca C++ ve Objective-C++)
Anlamı ISO C++ 1998 ve ISO C++ 2011 arasında farklılık gösteren C++ yapıları hakkında uyarın,
örneğin, ISO C++ 1998'de anahtar sözcükler olan ISO C++ 2011'deki tanımlayıcılar. Bu uyarı
açılır - Daralma ve tarafından etkinleştirilir -Duvar.
-Wcast-kaliteli
Hedef türden bir tür niteleyicisini kaldırmak için bir işaretçi kullanıldığında uyar.
Örneğin, bir "const char *" sıradan bir "char *"a dönüştürülürse uyarın.
Ayrıca, bir tür niteleyicisini güvenli olmayan bir şekilde tanıtan bir oyuncu seçimi yaparken de uyarın. İçin
örneğin, "char **" öğesini "const char **" olarak kullanmak, bu örnekte olduğu gibi güvenli değildir:
/* p, karakter ** değeridir. */
sabit char **q = (const char **) p;
/* salt okunur dizgenin const char *'a atanması tamam. */
*q = "dize";
/* Şimdi char** işaretçisi salt okunur belleğe işaret ediyor. */
**p = 'b';
-Wcast hizalama
Hedefin gerekli hizalanması sağlanacak şekilde bir işaretçi kullanıldığında uyar.
artırılmış. Örneğin, makinelerde "char *" bir "int *" öğesine dönüştürülürse uyarın:
tamsayılara yalnızca iki veya dört baytlık sınırlarda erişilebilir.
-Wwrite-dizeleri
C'yi derlerken, dize sabitlerine "const char[ tipinde sabitler verin"uzunluk]" yani kopyalama
birinin adresi "const" olmayan "char *" işaretçisine bir uyarı verir. Bunlar
uyarılar derleme zamanında bir dizgeye yazmaya çalışabilecek kodu bulmanıza yardımcı olur
sabit, ancak yalnızca bildirimlerde "const" kullanmaya çok dikkat ettiyseniz
ve prototipler. Aksi takdirde, sadece bir sıkıntıdır. Bu yüzden yapmadık -Duvar
Bu uyarıları isteyin.
C++ derlerken, kullanımdan kaldırılan dize değişmezlerinden "char
*". Bu uyarı, C++ programları için varsayılan olarak etkindir.
-Yıkılmış
Tarafından değiştirilebilecek değişkenler için uyar uzun jmp or vfork. Bu uyarı da
tarafından etkinleştirildi -Ekstra.
-Wdönüşüm
Bir değeri değiştirebilecek örtük dönüşümler için uyar. Bu, dönüşümleri içerir
"x" "çift" olduğunda "abs (x)" gibi gerçek ve tamsayı arasında; arasındaki dönüşümler
imzalı ve imzasız, "unsigned ui = -1" gibi; ve daha küçük türlere dönüşümler, örneğin
"sqrtf (M_PI)". "abs ((int) x)" ve "ui =" gibi açık kullanımlar için uyarmayın
(işaretsiz) -1" veya değer "abs (2.0)" gibi dönüştürme tarafından değiştirilmediyse.
İşaretli ve işaretsiz tamsayılar arasındaki dönüşümlerle ilgili uyarılar şu şekilde devre dışı bırakılabilir:
kullanma -Wno-sign-dönüşüm.
C++ için ayrıca, kullanıcı tanımlı dönüştürmeler için kafa karıştırıcı aşırı yük çözünürlüğü konusunda uyarın; ve
asla bir tür dönüştürme operatörü kullanmayan dönüşümler: "geçersiz" dönüşümler, aynı
type, bir temel sınıf veya bunlara bir referans. İmzalar arasındaki dönüşümlerle ilgili uyarılar
ve işaretsiz tamsayılar, C++'da varsayılan olarak devre dışı bırakılır, -Wsign-dönüşüm is
açıkça etkinleştirildi.
-Wno-dönüşüm-boş (Yalnızca C++ ve Objective-C++)
"NULL" ve işaretçi olmayan türler arasındaki dönüşümler için uyarmayın. -Wconversion-null is
varsayılan olarak etkindir.
-Sıfır-boş-işaretçi-sabiti (Yalnızca C++ ve Objective-C++)
Boş gösterici sabiti olarak bir değişmez '0' kullanıldığında uyar. Bu yararlı olabilir
C++ 11'de "nullptr" ye dönüştürmeyi kolaylaştırın.
-Beceriksiz-döküm (Yalnızca C++ ve Objective-C++)
Bir ifade kendi türüne dönüştürüldüğünde uyar.
-boş-vücut
Boş bir gövde oluşursa uyar if, başka or do süre Beyan. Bu uyarı
tarafından da etkinleştirildi -Ekstra.
-Wenum-karşılaştırma
Farklı numaralandırılmış türlerin değerleri arasında bir karşılaştırma konusunda uyarın. C++ numaralandırmasında
koşullu ifadelerdeki uyumsuzluklar da teşhis edilir ve uyarı şu şekilde etkinleştirilir:
varsayılan. C'de bu uyarı şu şekilde etkinleştirilir: -Duvar.
-Wjump-ıskalar-init (Yalnızca C, Objective-C)
Bir "goto" ifadesi veya bir "switch" ifadesi ileri doğru atlarsa uyar
bir değişkenin başlatılması veya değişken oluşturulduktan sonra bir etikete geri atlanması
başlatıldı. Bu, yalnızca başlatıldıkları zaman başlatılan değişkenler hakkında uyarır.
beyan. Bu uyarı yalnızca C ve Objective-C için desteklenir; C++'da bu tür
şube her durumda bir hatadır.
-Wjump-ıskalar-init dahil -Wc++-uyumlu. ile devre dışı bırakılabilir.
-Wno-atlama-kaçırma-başlatma seçeneği.
-Wsign-karşılaştırma
İşaretli ve işaretsiz değerler arasındaki bir karşılaştırmanın yanlış sonuç vermesi durumunda uyar
imzalı değer imzasıza dönüştürüldüğünde sonuç. Bu uyarı da etkinleştirildi
by -Ekstra; diğer uyarıları almak için -Ekstra bu uyarı olmadan, -Ekstra
-Wno-sign-karşılaştırma.
-Wsign-dönüşüm
gibi bir tamsayı değerinin işaretini değiştirebilecek örtük dönüşümler için uyar
işaretsiz bir tamsayı değişkenine işaretli bir tamsayı ifadesi atama. açık bir
cast uyarıyı susturur. C'de bu seçenek ayrıca şu şekilde etkinleştirilir: -Wdönüşüm.
-Wsizeof-işaretçi-memaccess
Belirli dize ve bellek yerleşik işlevlerine şüpheli uzunluk parametreleri için uyar
argüman "sizeof" kullanıyorsa. Bu uyarı örneğin "memset (ptr, 0, sizeof) hakkında uyarır.
(ptr));" "ptr" bir dizi değil, bir işaretçiyse ve olası bir düzeltme öneriyorsa veya
"memcpy (&foo, ptr, sizeof (&foo));" hakkında. Bu uyarı tarafından etkinleştirildi -Duvar.
-Waddress
Bellek adreslerinin şüpheli kullanımları konusunda uyarın. Bunlar, bir kişinin adresini kullanmayı içerir.
"void func(void); if (func)" gibi koşullu bir ifadede işlev ve
"if (x == "abc")" gibi bir dize değişmezinin bellek adresiyle karşılaştırmalar.
Bu tür kullanımlar tipik olarak bir programcı hatasına işaret eder: bir fonksiyonun adresi her zaman
doğru olarak değerlendirir, bu nedenle koşullu kullanımları genellikle programcının
bir işlev çağrısında parantezleri unuttum; ve dize değişmezleri ile karşılaştırmalar
belirtilmemiş davranışa neden olur ve C'de taşınabilir değildir, bu nedenle genellikle
programcının "strcmp" kullanmayı amaçladığı. Bu uyarı tarafından etkinleştirildi -Duvar.
-Wlojik-operasyon
İfadelerde mantıksal işleçlerin şüpheli kullanımları hakkında uyarın. Bu, kullanmayı içerir
bit düzeyinde bir operatörün beklendiği durumlarda mantıksal operatörler.
-Waggregate-dönüş
Yapıları veya birleşimleri döndüren herhangi bir işlev tanımlanırsa veya çağrılırsa uyar. (İçinde
bir dizi döndürebileceğiniz dillerde, bu aynı zamanda bir uyarı da verir.)
-Agresif olmayan döngü optimizasyonları
Sabit sayıda yinelemeli bir döngüde derleyici tanımsız algılarsa uyar
bir veya daha fazla yineleme sırasında bazı ifadelerde davranış.
-Wno-özellikleri
Tanınmayan öznitelikler gibi beklenmedik bir "__attribute__" kullanılırsa uyarmayın,
değişkenlere vb. uygulanan fonksiyon nitelikleri. Bu, aşağıdakiler için hataları durdurmaz.
desteklenen özelliklerin yanlış kullanımı.
-Wno-yerleşik-makro-yeniden tanımlanmış
Belirli yerleşik makrolar yeniden tanımlanırsa uyarmayın. Bu, aşağıdakiler için uyarıları bastırır:
"__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__" ve
"__BASE_FILE__".
-Wstrict-prototipler (Yalnızca C ve Objective-C)
Argüman türleri belirtilmeden bir işlev bildirilirse veya tanımlanırsa uyar. (Bir
eski tarz işlev tanımına, öncesinde bir
bağımsız değişken türlerini belirten bildirim.)
-Wold-style-deklarasyonu (Yalnızca C ve Objective-C)
Bir bildirimde, C Standardına göre eskimiş kullanımlar için uyarın. İçin
örneğin, "statik" gibi depolama sınıfı belirteçleri bir dizideki ilk şeyler değilse uyarın.
beyanname. Bu uyarı ayrıca -Ekstra.
-Wold-tarzı-tanımı (Yalnızca C ve Objective-C)
Eski tarz bir işlev tanımı kullanılıyorsa uyar. Olsa bile uyarı verilir.
önceki bir prototip.
-Wmissing-parametre tipi (Yalnızca C ve Objective-C)
K&R tarzı işlevlerde bir işlev parametresi tür belirteci olmadan bildirilir:
void foo(çubuk) { }
Bu uyarı ayrıca -Ekstra.
-Wmissing-prototipleri (Yalnızca C ve Objective-C)
Önceki bir prototip bildirimi olmadan global bir işlev tanımlanırsa uyar. Bu
tanımın kendisi bir prototip sağlasa bile uyarı verilir. Bu seçeneği kullan
eşleşen bir prototip bildirimine sahip olmayan genel işlevleri algılamak için
başlık dosyası. Bu seçenek, tüm işlev bildirimleri nedeniyle C++ için geçerli değildir.
prototipler sağlayın ve eşleşmeyen bir bildirim,
önceki bir beyanla çelişiyor. Kullanmak -Wmissing-beyanlar eksik tespit etmek
C++'da bildirimler.
-Wmissing-beyanlar
Önceden bir bildirim olmadan global bir işlev tanımlanırsa uyar. Olsa bile yap
tanımın kendisi bir prototip sağlar. Genel algılamak için bu seçeneği kullanın
başlık dosyalarında bildirilmeyen işlevler. C'de, hiçbir uyarı verilmez
önceki prototip olmayan bildirimlerle işlevler; kullanmak -Wmissing-prototip tespit etmek için
eksik prototipler C++'da, işlev şablonları için veya
satır içi işlevler veya anonim ad alanlarındaki işlevler için.
-Wmissing-alan-başlatıcıları
Bir yapının başlatıcısında bazı alanlar eksikse uyar. Örneğin, aşağıdakiler
kodu böyle bir uyarıya neden olur, çünkü "xh" tam olarak sıfırdır:
yapı s { int f, g, h; };
yapı sx = { 3, 4 };
Bu seçenek, belirlenmiş başlatıcılar hakkında uyarmaz, bu nedenle aşağıdaki değişiklik
bir uyarı tetiklemez:
yapı s { int f, g, h; };
struct sx = { .f = 3, .g = 4 };
Bu uyarı şurada yer almaktadır: -Ekstra. diğer almak için -Ekstra bu olmadan uyarılar,
kullanım -Ekstra -Wno-eksik-alan-başlatıcılar.
-Wno-çok karakterli
Çok karakterli bir sabit ('BİLGİ') kullanıldı. Genellikle bir gösterirler
uygulama tanımlı değerlere sahip olduklarından ve kullanıcı kodunda yazım hatası olmamalıdır.
taşınabilir kodda kullanılır.
-Wnormalleştirilmiş=
ISO C ve ISO C++'da, farklı diziler olmaları durumunda iki tanımlayıcı farklıdır.
karakterler. Ancak, bazen temel ASCII karakter kümesinin dışındaki karakterler
kullanıldığında, aynı görünen iki farklı karakter dizisine sahip olabilirsiniz. Kaçınmak
karışıklık, ISO 10646 standardı bazı normalleştirme kurallar hangi uygulandığında
aynı görünen iki dizinin aynı diziye dönüştürülmesini sağlayın. KİK
normalleştirilmemiş tanımlayıcılar kullanıyorsanız sizi uyarabilir; bu seçenek
bu uyarıyı kontrol eder.
GCC tarafından desteklenen dört uyarı seviyesi vardır. Varsayılan -Wnormalleştirilmiş=nfc,
ISO 10646 "C" normalleştirilmiş biçiminde olmayan herhangi bir tanımlayıcı hakkında uyarıda bulunan,
NFC. NFC, çoğu kullanım için önerilen formdur.
Ne yazık ki, tanımlayıcılarda ISO C ve ISO C++ tarafından izin verilen bazı karakterler vardır.
NFC'ye dönüştürüldüğünde tanımlayıcılarda izin verilmez. Yani, hiçbir yolu yok
bu sembolleri taşınabilir ISO C veya C++'da kullanmak ve tüm tanımlayıcılarınızı NFC'de bulundurmak için.
-Wnormalize=kimlik bu karakterler için uyarıyı bastırır. Umut edilir ki gelecek
ilgili standartların sürümleri bunu düzeltecektir, bu nedenle bu seçenek
varsayılan.
Tüm karakterler için uyarıyı yazarak kapatabilirsiniz. -Wnormalize=yok. Sen
bunu yalnızca başka bir normalleştirme şeması kullanıyorsanız ("D" gibi) yapmalısınız,
çünkü aksi takdirde, kelimenin tam anlamıyla görülmesi imkansız olan böcekleri kolayca oluşturabilirsiniz.
ISO 10646'daki bazı karakterlerin farklı anlamları vardır ancak bazı yazı tiplerinde aynı görünürler
veya görüntüleme metodolojileri, özellikle biçimlendirme uygulandıktan sonra. Örneğin
"\u207F", "SUPERSCRIPT LATIN KÜÇÜK N HARFİ", tıpkı normal bir "n" gibi görüntülenir.
bir üst simgeye yerleştirilmiştir. ISO 10646 şunları tanımlar: NFCC normalleştirme şeması
tüm bunları da standart bir forma dönüştürün ve GCC, kodunuz içinde değilse uyarır.
NFKC kullanıyorsanız -Wnormalleştirilmiş=nfkc. Bu uyarı, her şey hakkında uyarı ile karşılaştırılabilir.
0 rakamıyla karıştırılabileceği için O harfini içeren tanımlayıcı,
ve bu nedenle varsayılan değildir, ancak yerel kodlama kuralı olarak yararlı olabilir
programlama ortamı bu karakterleri belirgin bir şekilde gösterecek şekilde düzeltilemez.
-Wno-kullanımdan kaldırıldı
Kullanımdan kaldırılan özelliklerin kullanımı konusunda uyarmayın.
-Wno-kullanımdan kaldırılmış-bildirimler
tarafından kullanımdan kaldırılmış olarak işaretlenen işlevlerin, değişkenlerin ve türlerin kullanımları hakkında uyarmayın.
"kullanımdan kaldırılmış" özniteliğini kullanarak.
-Wno-taşma
Sabit ifadelerde derleme zamanı taşması hakkında uyarmayın.
-Woverride-init (Yalnızca C ve Objective-C)
Belirtilen kullanıldığında yan etkileri olmayan başlatılmış bir alan geçersiz kılınırsa uyar
başlatıcılar.
Bu uyarı şurada yer almaktadır: -Ekstra. diğer almak için -Ekstra bu olmadan uyarılar,
kullanım -Ekstra -Wno-geçersiz kılma-init.
-Paketlenmiş
Bir yapıya paketlenmiş özniteliği verilirse uyar, ancak paketlenmiş özniteliğin hiçbir özelliği yoksa
yapının yerleşimi veya boyutu üzerindeki etkisi. Bu tür yapılar için yanlış hizalanmış olabilir
az fayda. Örneğin, bu kodda, "struct bar"daki "fx" değişkeni
"struct bar"ın kendisi paketlenmiş özniteliğe sahip olmasa bile yanlış hizalanmış:
yapı foo {
int x;
karakter a, b, c, d;
} __öznitelik __ ((paketlenmiş));
yapı çubuğu {
karakter z;
foo f yapısı;
};
-Wpacked-bitfield-uyumluluğu
4.1, 4.2 ve 4.3 GCC serisi, bit alanlarındaki "paketlenmiş" özniteliği yok sayar
"char". Bu, GCC 4.4'te düzeltilmiştir, ancak değişiklik,
yapı düzeni. GCC'de böyle bir alanın ofseti değiştiğinde GCC sizi bilgilendirir
4.4. Örneğin, burada artık "a" ve "b" alanları arasında 4 bitlik bir dolgu yoktur.
yapısı:
yapı foo
{
karakter a:4;
karakter b:8;
} __attribute__ ((paketlenmiş));
Bu uyarı varsayılan olarak etkindir. Kullanmak -Wno-paketlenmiş-bitfield-uyumluluğu bunu devre dışı bırakmak için
uyarı.
-Wpadded
Bir yapıya dolgu dahil edilmişse, ya yapının bir elemanını hizalamak için uyar.
yapı veya tüm yapıyı hizalamak için. Bazen bu olduğunda mümkündür
dolguyu azaltmak için yapının alanlarını yeniden düzenlemek ve böylece
yapı daha küçük.
-Gereksiz-decls
Aynı kapsamda birden fazla bildirimde bulunulursa uyar.
çoklu bildirim geçerlidir ve hiçbir şeyi değiştirmez.
-Wnested-dışlar (Yalnızca C ve Objective-C)
Bir işlev içinde "harici" bir bildirimle karşılaşılırsa uyar.
-Wno-kalıtsal-variadic-ctor
Temel sınıf olduğunda, C++ 11 devralan yapıcıların kullanımıyla ilgili uyarıları bastırın
miras alınan bir C değişken yapıcısına sahiptir; uyarı varsayılan olarak açıktır çünkü
elips kalıtsal değildir.
-Kazanma hattı
Satır içi olarak bildirilen bir işlev satır içi olamazsa uyar. Bununla bile
seçeneği, derleyici, içinde bildirilen satır içi işlevlerdeki hatalar hakkında uyarmaz.
sistem başlıkları
Derleyici, bir satırın satır içi yapılıp yapılmayacağını belirlemek için çeşitli buluşsal yöntemler kullanır.
işlev. Örneğin, derleyici işlevin boyutunu hesaba katar.
satır içi ve geçerli işlevde zaten yapılmış olan satır içi miktarı.
Bu nedenle, kaynak programda önemsiz gibi görünen değişiklikler,
tarafından üretilen uyarılar -Kazanma hattı görünmek veya kaybolmak.
-Wno-geçersiz-offsetof (Yalnızca C++ ve Objective-C++)
uyarıların uygulanmasından kaynaklanan uyarıları bastırın. ofset makroyu POD olmayan bir türe. Buna göre
uygulanan 1998 ISO C++ standardı ofset POD olmayan bir türe tanımsızdır. İçinde
ancak mevcut C++ uygulamaları ofset tipik olarak anlamlı sonuçlar verir
Bazı POD olmayan türlere uygulandığında bile (basit bir yapı o
yalnızca bir kurucuya sahip olması nedeniyle bir POD türü olamaz). Bu bayrak için
taşınabilir olmayan kod yazdıklarının farkında olan ve kasıtlı olarak
hakkındaki uyarıyı görmezden gelmeyi seçti.
üzerindeki kısıtlamalar ofset C++ standardının gelecekteki bir sürümünde gevşetilebilir.
-Wno-in-to-pointer-cast
Farklı boyuttaki bir tamsayının işaretçi türüne atmalardan gelen uyarıları bastırın. İçinde
C++, daha küçük boyutlu bir işaretçi türüne yayın yapmak bir hatadır. Wint-to-pointer-cast is
varsayılan olarak etkindir.
-Wno-işaretçi-int-cast (Yalnızca C ve Objective-C)
Bir işaretçiden farklı boyutta bir tamsayı türüne yapılan gönderimlerden gelen uyarıları bastırın.
-Winvalid-pch
Arama yolunda önceden derlenmiş bir başlık bulunursa ancak kullanılamazsa uyar.
-uzun-uzun
varsa uyar ve kazandırdı ve kazandırdı tipi kullanılır. Bu, aşağıdakilerden biri tarafından etkinleştirilir: -Wpedantik or -Geleneksel
ISO C90 ve C++98 modlarında. Uyarı mesajlarını engellemek için şunu kullanın: -Wno-uzun-uzun.
-Wvariadic-makrolar
Bilgiçlikli ISO C90 modunda veya GNU alternatif sözdiziminde değişken makrolar kullanılıyorsa uyar
bilgiçlikli ISO C99 modundayken. Bu varsayılandır. Uyarı mesajlarını engellemek için şunu kullanın:
-Wno-variadic-makrolar.
-Wvararglar
gibi değişken argümanları işlemek için kullanılan makroların şüpheli kullanımında uyarın
va_start. Bu varsayılandır. Uyarı mesajlarını engellemek için şunu kullanın: -Wno-vararglar.
-Wvektör-işlem-performans
Vektör işlemi mimarinin SIMD yetenekleri aracılığıyla gerçekleştirilmezse uyar.
Özellikle performans ayarı için kullanışlıdır. Vektör işlemi uygulanabilir
"parçalı", yani skaler işlemin her vektör üzerinde gerçekleştirildiği anlamına gelir.
eleman; "paralel olarak", bu, vektör işleminin kullanılarak uygulandığı anlamına gelir.
normalde daha verimli olan daha geniş tipte skalerler; ve "tek olarak
skaler", bu vektörün bir skaler türe uyduğu anlamına gelir.
-Wno-sanal-hareket-atama
Önemsiz bir C++ 11 hareketiyle sanal bir tabandan devralmayla ilgili uyarıları bastırın
atama operatörü. Bu tehlikelidir, çünkü sanal üs boyunca erişilebilirse
birden fazla yol, birden çok kez taşınacaktır, bu da her iki nesnenin de sona erdiği anlamına gelebilir
taşınmış durumda yukarı. Hareket atama operatörü kaçınmak için yazılırsa
taşınan bir nesneden hareket ederken, bu uyarı devre dışı bırakılabilir.
-Wvla
Kodda değişken uzunluklu dizi kullanılıyorsa uyar. -Hayır-vla önler -Wpedantik
değişken uzunluk dizisinin uyarısı.
-Wvolatile-kayıt-var
Bir kayıt değişkeni geçici olarak bildirilirse uyar. Uçucu değiştirici
kayıt için okuma ve/veya yazma işlemlerini ortadan kaldırabilecek tüm optimizasyonları engelle
değişkenler. Bu uyarı tarafından etkinleştirildi -Duvar.
-Wdevre dışı-optimizasyon
İstenen bir optimizasyon geçişi devre dışı bırakılırsa uyar. Bu uyarı genellikle
kodunuzda yanlış bir şey olduğunu belirtin; sadece GCC'nin
optimize ediciler kodu etkili bir şekilde işleyemezler. Çoğu zaman sorun, sizin
kod çok büyük veya çok karmaşık; GCC, optimizasyon yapıldığında programları optimize etmeyi reddediyor
kendisinin aşırı miktarda zaman alması muhtemeldir.
-Wişaretçi-işareti (Yalnızca C ve Objective-C)
İşaretçi argümanı geçişi veya farklı imzalı atama için uyar. Bu
seçeneği yalnızca C ve Objective-C için desteklenir. tarafından ima edilir -Duvar ve tarafından
-Wpedantikile devre dışı bırakılabilen -Wno-işaretçi-işareti.
-Wstack-koruyucu
Bu seçenek yalnızca şu durumlarda etkindir: -fstack-koruyucu aktif. Fonksiyonlar hakkında uyarı verir
yığın parçalanmasına karşı korunmaz.
-Wno-paçalık
tarafından enstrümante edilemeyen yapılar hakkındaki uyarıları bastırın. -fçamurluk.
-Woverlength-dizeleri
"Minimum maksimum" uzunluktan daha uzun olan dize sabitleri hakkında uyar
C standardında belirtilmiştir. Modern derleyiciler genellikle aşağıdakileri sağlayan dize sabitlerine izin verir:
standardın minimum sınırından çok daha uzundur, ancak çok taşınabilir programlar
daha uzun dizeler kullanmaktan kaçının.
sınır geçerlidir sonra dize sabit bitiştirme ve sondaki sayılmaz
NUL. C90'da sınır 509 karakterdi; C99'da 4095'e yükseltildi. C++98
normatif bir minimum maksimum belirtmez, bu nedenle aşırı uzunluktaki dizeleri teşhis etmeyiz
C ++.
Bu seçenek şu şekilde ima edilir: -Wpedantikile devre dışı bırakılabilir ve
-Wno-uzunluk-dizeleri.
-Wunson eklenmiş-şamandıra-sabitleri (Yalnızca C ve Objective-C)
Soneki olmayan herhangi bir kayan sabit için bir uyarı yayınlayın. Kullanıldığında
Birlikte -Wsystem-başlıkları sistem başlık dosyalarındaki bu tür sabitler hakkında uyarır.
Bu, "FLOAT_CONST_DECIMAL64" pragma ile kullanmak üzere kod hazırlarken faydalı olabilir.
ondalık kayan nokta uzantısından C99'a.
Opsiyonlar için Hata ayıklama kg Programı or GCC
GCC, programınızda veya GCC'de hata ayıklamak için kullanılan çeşitli özel seçeneklere sahiptir:
-g İşletim sisteminin yerel biçiminde (stabs, COFF,
XCOFF veya CÜCE 2). GDB bu hata ayıklama bilgileriyle çalışabilir.
Stabs biçimini kullanan çoğu sistemde, -g ekstra hata ayıklama bilgilerinin kullanılmasını sağlar
sadece GDB'nin kullanabileceği; bu ek bilgi, hata ayıklamanın GDB'de daha iyi çalışmasını sağlar, ancak
muhtemelen diğer hata ayıklayıcıların çökmesine veya programı okumayı reddetmesine neden olur. İsterseniz
ekstra bilgilerin oluşturulup oluşturulmayacağını kesin olarak kontrol edin, -gstabs+, -gstab'lar,
-gxcoff+, -gxcoffya da -gvm'ler (aşağıya bakınız).
GCC kullanmanıza izin verir -g ile -O. Optimize edilmiş kod tarafından alınan kısayollar,
bazen şaşırtıcı sonuçlar üretir: bildirdiğiniz bazı değişkenler şu anda mevcut olmayabilir.
herşey; kontrol akışı, beklemediğiniz bir yere gidebilir; bazı ifadeler olabilir
yürütülmez çünkü sabit sonuçlar hesaplarlar veya değerleri zaten
el; bazı ifadeler taşındıkları için farklı yerlerde yürütülebilir
döngüler.
Bununla birlikte, optimize edilmiş çıktıda hata ayıklamanın mümkün olduğu kanıtlanmıştır. Bu mantıklı yapar
hataları olabilecek programlar için optimize ediciyi kullanmak.
Aşağıdaki seçenekler, GCC, daha fazlası için yetenekle oluşturulduğunda kullanışlıdır.
birden fazla hata ayıklama biçimi.
-gssplit-cüce
Mümkün olduğu kadar çok cüce hata ayıklama bilgisini ayrı bir çıktı dosyasına ayırın
.dwo uzantısıyla. Bu seçenek, derleme sisteminin dosyaları bağlamaktan kaçınmasını sağlar
hata ayıklama bilgileri ile. Yararlı olması için, bu seçenek şunları yapabilen bir hata ayıklayıcı gerektirir:
.dwo dosyalarını okuma.
-ggdb
GDB tarafından kullanılmak üzere hata ayıklama bilgilerini üretin. Bu, en anlamlı olanı kullanmak anlamına gelir.
kullanılabilir format (DWARF 2, stabs veya bunlardan hiçbiri değilse yerel format)
desteklenir), mümkünse GDB uzantıları dahil.
-gpubnames
Cüce .debug_pubnames ve .debug_pubtypes bölümleri oluşturun.
-gstab'lar
GDB olmadan (destekleniyorsa) hata ayıklama bilgilerini bıçak biçiminde üretin
uzantılar. Bu, çoğu BSD sisteminde DBX tarafından kullanılan biçimdir. MIPS, Alpha ve
System V Release 4 sistemlerinde bu seçenek, olmayan bıçak hata ayıklama çıktısı üretir.
DBX veya SDB tarafından anlaşılır. System V Release 4 sistemlerinde bu seçenek GNU'yu gerektirir
montajcı.
-feliminate-kullanılmayan-hata ayıklama-sembolleri
Yalnızca semboller için hata ayıklama bilgilerini bıçak biçiminde (destekleniyorsa) üretin
aslında kullanılanlar.
-femit-sınıfı-hata ayıklama-her zaman
Yalnızca bir nesne dosyasında bir C++ sınıfı için hata ayıklama bilgisi yaymak yerine,
sınıfı kullanarak tüm nesne dosyalarında yayınlayın. Bu seçenek yalnızca
GCC'nin normalde hata ayıklama bilgilerini yayma şeklini idare edemeyen hata ayıklayıcılar
sınıflar için çünkü bu seçeneği kullanmak hata ayıklama bilgilerinin boyutunu şu şekilde artırır:
iki faktörü kadar.
-fdebug-types-bölümü
DWARF Sürüm 4 veya üzerini kullanırken, tip DIE'ler kendi
onları ".debug_info" bölümünün bir parçası yapmak yerine ".debug_types" bölümüne yerleştirin. Bilişim Teknoloji
bağlayıcı daha sonra yapabileceğinden, bunları ayrı bir comdat bölümlerine koymak daha verimlidir.
kopyaları kaldırın. Ancak henüz tüm DWARF tüketicileri ".debug_types" bölümlerini desteklememektedir.
ve bazı nesnelerde ".debug_types", daha küçük hata ayıklama yerine daha büyük üretir
bilgiler.
-gstabs+
GNU kullanarak (destekleniyorsa) hata ayıklama bilgilerini bıçak biçiminde üretin
yalnızca GNU hata ayıklayıcısı (GDB) tarafından anlaşılan uzantılar. Bu uzantıların kullanımı
diğer hata ayıklayıcıların çökmesine veya programı okumayı reddetmesine neden olabilir.
-gcoff
Hata ayıklama bilgilerini COFF biçiminde üretin (destekleniyorsa). bu
System V Release 4'ten önceki çoğu System V sisteminde SDB tarafından kullanılan format.
-gxcoff
Hata ayıklama bilgilerini XCOFF biçiminde üretin (destekleniyorsa). bu
IBM RS/6000 sistemlerinde DBX hata ayıklayıcı tarafından kullanılan biçim.
-gxcoff+
GNU kullanarak hata ayıklama bilgilerini XCOFF formatında (destekleniyorsa) üretin
yalnızca GNU hata ayıklayıcısı (GDB) tarafından anlaşılan uzantılar. Bu uzantıların kullanımı
diğer hata ayıklayıcıların çökmesine veya programı okumayı reddetmesine neden olabilir ve
GNU derleyicisi (GAS) dışındaki birleştiricilerin bir hatayla başarısız olması.
-gdwarf-versiyon
Cüce biçiminde hata ayıklama bilgileri üretin (destekleniyorsa). Değeri
versiyon 2, 3 veya 4 olabilir; çoğu hedef için varsayılan sürüm 4'tür.
DWARF Sürüm 2 ile bazı bağlantı noktalarının bazı çakışma gerektirmeyen bazı bağlantı noktaları gerektirdiğini ve her zaman kullandığını unutmayın
Çözme tablolarında DWARF 3 uzantıları.
Sürüm 4, GDB 7.0 gerektirebilir ve -fvar-izleme-atamaları maksimum fayda için.
-grecord-gcc-anahtarları
Bu anahtar, derleyiciyi çağırmak için kullanılan komut satırı seçeneklerine neden olur.
DWARF'daki DW_AT_producer özniteliğine eklenecek kod oluşturmayı etkiler
hata ayıklama bilgileri. Seçenekler, onları birbirinden ayıran boşluklarla birleştirilmiştir.
birbirinden ve derleyici sürümünden. Ayrıca bakınız -frecord-gcc-anahtarları bir diğeri için
derleyici seçeneklerini nesne dosyasına saklamanın yolu. Bu varsayılandır.
-gno-kayıt-gcc-anahtarları
DWARF'ta DW_AT_producer özniteliğine komut satırı seçenekleri eklemeye izin verme
hata ayıklama bilgileri.
-gstrict-cüce
İle seçilenden daha sonraki DWARF standart sürümünün uzantılarının kullanılmasına izin verme
-gdwarf-versiyon. Daha sonra çakışmayan DWARF uzantıları kullanan çoğu hedefte
standart sürümlere izin verilir.
-gno-katı-cüce
İle seçilenden daha sonraki DWARF standart sürümünün uzantılarının kullanılmasına izin ver
-gdwarf-versiyon.
-gvm'ler
Alfa/VMS hata ayıklama biçiminde (destekleniyorsa) hata ayıklama bilgilerini üretin. Bu
DEBUG tarafından Alpha/VMS sistemlerinde kullanılan biçimdir.
-gseviye
-ggdbseviye
-gstab'larseviye
-gcoffseviye
-gxcoffseviye
-gvm'lerseviye
Hata ayıklama bilgisi isteyin ve ayrıca kullanın seviye ne kadar bilgi olduğunu belirtmek için. NS
varsayılan seviye 2'dir.
Düzey 0, hiçbir hata ayıklama bilgisi üretmez. Böylece, -g0 reddeder -g.
Düzey 1, sistemin bazı bölümlerinde geriye dönük izler oluşturmaya yetecek kadar minimum bilgi üretir.
hata ayıklamayı planlamadığınız program. Bu, işlevlerin açıklamalarını ve
harici değişkenler, ancak yerel değişkenler hakkında bilgi yok ve satır numarası yok.
Seviye 3, menüde bulunan tüm makro tanımları gibi ek bilgileri içerir.
programı. Bazı hata ayıklayıcılar, kullandığınızda makro genişletmeyi destekler. -g3.
-gdwarf-2 birleştirilmiş bir hata ayıklama düzeyini kabul etmez, çünkü GCC eskiden bir
seçenek -gcüce bu, DWARF'ın 1. sürümünde hata ayıklama bilgisi oluşturmak anlamına geliyordu.
format (sürüm 2'den çok farklıdır) ve çok kafa karıştırıcı olurdu.
Bu hata ayıklama biçimi uzun süredir kullanılmamaktadır, ancak seçenek şimdi değiştirilemez. Bunun yerine kullanın
ek olarak -gseviye Cüce için hata ayıklama düzeyini değiştirme seçeneği.
-gtoggle
Bu seçeneğin dışında bırakılırsa hata ayıklama bilgisi oluşturmayı kapatın veya kapatın
aksi takdirde 2. seviyede açık. Bu argümanın komut satırındaki konumu
Önemli olmak; diğer tüm seçenekler işlendikten sonra yürürlüğe girer ve bunu yalnızca
bir kez, kaç kez verilirse verilmiyor. Bu, esas olarak birlikte kullanılmak üzere tasarlanmıştır
-fcompare-hata ayıklama.
-fsanitize=adres
Hızlı bir bellek hatası dedektörü olan AddressSanitizer'ı etkinleştirin. Bellek erişim talimatları
sınır dışı ve ücretsiz kullanım sonrası hataları tespit edecek şekilde donatılacaktır. Görmek
<http://code.google.com/p/address-sanitizer/> daha fazla ayrıntı için.
-fsanitize=iş parçacığı
Hızlı bir veri yarışı dedektörü olan ThreadSanitizer'ı etkinleştirin. Bellek erişim talimatları
veri yarışı hatalarını tespit etmek için tasarlanmıştır. Görmek
<http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> daha fazla ayrıntı için.
-fdump-son-insns[=dosya]
Son dahili temsili (RTL) şuraya boşaltın: dosya. İsteğe bağlı argüman ise
atlanmış (veya dosya "." ise), döküm dosyasının adı eklenerek belirlenir.
".gkd" derleme çıktı dosyası adına.
-fcompare-hata ayıklama[=tercih]
Derleme sırasında herhangi bir hata oluşmazsa, derleyiciyi ikinci kez çalıştırın. tercih ve
-fcompare-debug-saniye ikinci derlemeye iletilen argümanlara. boşalt
her iki derlemede de nihai dahili gösterim ve farklılık gösterirlerse bir hata yazdırın.
Eşittir işareti atlanırsa, varsayılan -gtoggle kullanıldı.
ortam değişkeni GCC_COMPARE_DEBUG, tanımlanmışsa, boş olmayan ve sıfır olmayan,
dolaylı olarak sağlar -fcompare-hata ayıklama. Eğer GCC_COMPARE_DEBUG bir dizeye tanımlanır
tire ile başlayarak, daha sonra için kullanılır tercih, aksi takdirde varsayılan -gtoggle is
Kullanılmış.
-fcompare-debug=, eşittir işareti olan ancak olmayan tercih, eşdeğerdir
-fno-karşılaştırma-hata ayıklamanihai temsilin dampingini devre dışı bırakan ve
ikinci derleme, hatta önleme GCC_COMPARE_DEBUG yürürlüğe girmesinden.
sırasında tam kapsamı doğrulamak için -fcompare-hata ayıklama test etmek, ayarlamak GCC_COMPARE_DEBUG söylemek
-fcompare-debug-geçersiz kılınmamışherhangi bir gerçek durumda GCC'nin geçersiz bir seçenek olarak reddettiği
derleme (ön işleme, birleştirme veya bağlama yerine). Sadece bir uyarı almak için,
ayar GCC_COMPARE_DEBUG için -w%n-fkarşılaştırma-hata ayıklama değil Geçersiz kılınan yapacağım.
-fcompare-debug-saniye
Bu seçenek, istenen ikinci derleme için örtük olarak derleyiciye iletilir.
by -fcompare-hata ayıklama, uyarıları susturma ve diğer seçenekleri atlama seçenekleriyle birlikte
bu, dosyalara veya standart çıktıya yan etki derleyici çıktılarına neden olur.
Döküm dosyaları ve korunmuş geçici dosyalar, ".gk" dosyasını içerecek şekilde yeniden adlandırılır.
bunların üzerine yazmaktan kaçınmak için ikinci derleme sırasında ek uzantı
ilk tarafından oluşturulur.
Bu seçenek derleyici sürücüsüne geçirildiğinde, ilk derleme
atlanabilir, bu da derleyiciyi uygun şekilde hata ayıklamaktan başka bir işe yaramaz.
-feliminate-cüce2-dups
hakkında yinelenen bilgileri ortadan kaldırarak DWARF 2 hata ayıklama bilgilerini sıkıştırın.
her bir sembol. Bu seçenek yalnızca DWARF 2 hata ayıklaması oluşturulurken anlamlıdır
ile bilgi -gdwarf-2.
-femit-struct-debug-baseonly
Yapı benzeri türler için hata ayıklama bilgilerini yalnızca
derleme kaynak dosyası, yapının tanımlandığı dosyanın temel adıyla eşleşir.
Bu seçenek, hata ayıklama bilgilerinin boyutunu önemli ölçüde azaltır, ancak
hata ayıklayıcı için tür bilgisinde önemli potansiyel kayıp. Görmek
-femit-struct-debug-azaltılmış daha az agresif bir seçenek için. Görmek
-femit-struct-debug-detaylı Daha detaylı kontrol için.
Bu seçenek yalnızca DWARF 2 ile çalışır.
-femit-struct-debug-azaltılmış
Yapı benzeri türler için hata ayıklama bilgilerini yalnızca
derleme kaynak dosyası, türün tanımlandığı dosyanın temel adıyla eşleşir,
yapı bir şablon değilse veya bir sistem başlığında tanımlanmadıkça.
Bu seçenek, hata ayıklama bilgilerinin boyutunu önemli ölçüde azaltır, bazıları
tür bilgisinde hata ayıklayıcıya olası kayıp. Görmek -femit-struct-debug-baseonly
daha agresif bir seçenek için. Görmek -femit-struct-debug-detaylı daha detaylı için
kontrol.
Bu seçenek yalnızca DWARF 2 ile çalışır.
-femit-struct-debug-detaylı[=özellik listesi]
Derleyicinin hata ayıklama bilgileri oluşturduğu yapı benzeri türleri belirtin. NS
amaç, farklı nesne dosyaları arasındaki yinelenen yapı hata ayıklama bilgilerini azaltmaktır.
aynı program içinde.
Bu seçenek, aşağıdakilerin ayrıntılı bir sürümüdür: -femit-struct-debug-azaltılmış ve
-femit-struct-debug-baseonly, çoğu ihtiyaca hizmet eder.
Bir belirtim sözdizimine sahiptir[yön:|in:][sipariş:|tür:](herhangi|sys|baz|Yok)
İsteğe bağlı ilk sözcük, belirtimi doğrudan kullanılan yapılarla sınırlar
(yön:) veya dolaylı olarak kullanılır (in:). Bir yapı türü, tür olduğunda doğrudan kullanılır
bir değişkenin, üye. Dolaylı kullanımlar, yapılara işaretçiler aracılığıyla ortaya çıkar. Yani,
eksik bir yapının kullanımı geçerli olduğunda, kullanım dolaylıdır. Bir örnek yapı
bir doğrudan; yapı iki * dolaylı;.
İsteğe bağlı ikinci sözcük, belirtimi sıradan yapılarla sınırlar (sipariş:) Veya
genel yapılar (tür:). Genel yapıları açıklamak biraz karmaşıktır. C++ için,
bunlar, şablon sınıflarının veya şablon olmayan sınıfların açık olmayan uzmanlıklarıdır.
yukarıdakilerin içinde. Diğer programlama dillerinin jenerikleri vardır, ancak
-femit-struct-debug-detaylı henüz uygulamamaktadır.
Üçüncü kelime, derleyicinin kendisi için kullandığı yapılar için kaynak dosyaları belirtir.
hata ayıklama bilgisi yaymalıdır. Değerler Yok ve herhangi normal anlamı var. NS
değer baz tür bildiriminin bulunduğu dosyanın adının tabanı anlamına gelir.
görünenler, ana derleme dosyasının adının tabanıyla eşleşmelidir. Uygulamada,
bu, derlerken foo.c, türler için hata ayıklama bilgileri oluşturulur
Bu dosyada beyan edilen ve foo.h, ancak diğer başlık dosyalarını değil. Değer sys anlamına geliyor
bu tipler tatmin edici baz veya sistem veya derleyici başlıklarında bildirilir.
Uygulamanız için en iyi ayarları belirlemek için deneme yapmanız gerekebilir.
Varsayılan -femit-struct-debug-detailed=tümü.
Bu seçenek yalnızca DWARF 2 ile çalışır.
-fno-birleştirme-hata ayıklama-dizeleri
Bağlayıcıyı, hata ayıklama bilgilerindeki dizeleri birleştirmemeye yönlendirin.
farklı nesne dosyalarında aynı. Birleştirme, tüm montajcılar tarafından desteklenmez veya
bağlayıcılar. Birleştirme, çıktı dosyasındaki hata ayıklama bilgilerinin boyutunu şu adreste azaltır:
bağlantı işleme süresini artırmanın maliyeti. Birleştirme varsayılan olarak etkindir.
-fdebug-prefix-harita=eski=yeni
Dizindeki dosyaları derlerken eskiolarak açıklayan hata ayıklama bilgilerini kaydedin.
in yeni yerine.
-fno-cüce2-cfi-asm
Derleyici tarafından oluşturulan ".eh_frame" bölümü yerine DWARF 2 çözülme bilgisini yayar
GAS ".cfi_*" direktifleri.
-p Analiz programına uygun profil bilgilerini yazmak için ekstra kod oluşturun
profesör. Hakkında bilgi almak istediğiniz kaynak dosyaları derlerken bu seçeneği kullanmalısınız,
ve bağlantı kurarken de kullanmalısınız.
-pg Analiz programına uygun profil bilgilerini yazmak için ekstra kod oluşturun
gprof. Hakkında bilgi almak istediğiniz kaynak dosyaları derlerken bu seçeneği kullanmalısınız,
ve bağlantı kurarken de kullanmalısınız.
-Q Derleyicinin her işlev adını derlenirken yazdırmasını ve bazılarını yazdırmasını sağlar.
bittiğinde her geçişle ilgili istatistikler.
-ftime-raporu
Derleyicinin, her geçişte harcanan süre hakkında bazı istatistikler yazdırmasını sağlar.
bitirir.
-fmem-raporu
Derleyicinin, kalıcı bellek ayırma hakkında bazı istatistikleri yazdırmasını sağlar.
bitirir.
-fmem-rapor-wpa
Derleyicinin WPA için kalıcı bellek ayırma hakkında bazı istatistikleri yazdırmasını sağlar
sadece faz.
-fpre-ipa-mem-raporu
-fpost-ipa-mem-raporu
Derleyicinin kalıcı bellek tahsisi hakkında bazı istatistikleri önceden veya
prosedürler arası optimizasyondan sonra.
-fprofile-raporu
Derleyicinin (tahmini) profilin tutarlılığı hakkında bazı istatistikler yazdırmasını sağlar
ve bireysel geçişlerin etkisi.
-fstack-kullanımı
Program için derleyici çıktı yığını kullanım bilgilerini işlev başına yapar
temel. Dökümün dosya adı, eklenerek yapılır. .su için yardımcı isim. yardımcı isim is
açıkça belirtilmişse, çıktı dosyasının adından oluşturulur ve bir
yürütülebilir, aksi takdirde kaynak dosyanın temel adıdır. Bir giriş oluşur
üç alan:
· Fonksiyonun adı.
· Bir dizi bayt.
· Bir veya daha fazla niteleyici: "statik", "dinamik", "sınırlı".
"Statik" niteleyicisi, işlevin yığını statik olarak manipüle ettiği anlamına gelir: a
fonksiyon girişinde çerçeve için sabit sayıda bayt tahsis edilir ve
fonksiyon çıkışı; fonksiyonda aksi halde yığın ayarlaması yapılmaz. İkinci
alan bu sabit bayt sayısıdır.
"Dynamic" niteleyicisi, işlevin yığını dinamik olarak manipüle ettiği anlamına gelir:
Yukarıda açıklanan statik tahsise ek olarak, yığın ayarlamaları
işlevin gövdesi, örneğin işlev çağrıları etrafında argümanları itmek/pop için. Eğer
"sınırlı" niteleyicisi de mevcuttur, bu ayarlamaların miktarı
derleme zamanı ve ikinci alan, kullanılan toplam yığın miktarının bir üst sınırıdır
fonksiyon tarafından. Mevcut değilse, bu düzeltmelerin tutarı sınırlı değildir.
derleme zamanında ve ikinci alan yalnızca sınırlı kısmı temsil eder.
-fprofile-yayları
Program akışı için kod ekleyin yaylar enstrümanlıdır. Programın yürütülmesi sırasında
her bir şube ve çağrının kaç kez yürütüldüğünü ve kaç kez alındığını kaydeder
veya geri döner. Derlenmiş program çıktığında, bu verileri adlı bir dosyaya kaydeder.
yardımcı ad.gcda her kaynak dosya için. Veriler, profile yönelik olarak kullanılabilir
optimizasyonlar (-fbranch-olasılıklar) veya test kapsamı analizi için
(-ftest-kapsama). Her nesne dosyasının yardımcı isim adından üretilir
çıktı dosyası, açıkça belirtilmişse ve son yürütülebilir dosya değilse, aksi takdirde
kaynak dosyanın temel adıdır. Her iki durumda da herhangi bir son ek kaldırılır (örn.
foo.gcda giriş dosyası için dizin/foo.cya da dizin/foo.gcda olarak belirtilen çıktı dosyası için -o
yön/foo.o).
--kapsama
Bu seçenek, kapsam analizi için kullanılan kodu derlemek ve bağlamak için kullanılır. NS
seçenek eş anlamlısı -fprofile-yayları -ftest-kapsama (derlerken) ve -lgcov
(bağlanırken). Daha fazla ayrıntı için bu seçeneklerle ilgili belgelere bakın.
· Kaynak dosyaları derleyin -fprofile-yayları artı optimizasyon ve kod oluşturma
seçenekler. Test kapsamı analizi için ek -ftest-kapsama seçeneği.
Bir programdaki her kaynak dosyanın profilini çıkarmanız gerekmez.
· Nesne dosyalarınızı -lgcov or -fprofile-yayları (sonuncusu şu anlama gelir:
önceki).
· Ark profilini oluşturmak için programı temsili bir iş yükü üzerinde çalıştırın
bilgi. Bu, herhangi bir sayıda tekrar edilebilir. Eşzamanlı çalıştırabilirsiniz
programınızın örnekleri ve dosya sisteminin kilitlemeyi desteklemesi koşuluyla,
veri dosyaları doğru şekilde güncellenecektir. Ayrıca "çatal" aramalar algılanır ve
doğru işlenmiş (çift sayım olmayacak).
· Profile yönelik optimizasyonlar için, kaynak dosyaları aynı
optimizasyon ve kod oluşturma seçenekleri artı -fbranch-olasılıklar.
· Test kapsamı analizi için şunu kullanın: gcov insan tarafından okunabilir bilgiler üretmek için
the .gcno ve .gcda Dosyalar. Bakın gcov daha fazlası için belgeler
bilgiler.
İle -fprofile-yayları, programınızın her işlevi için GCC bir program akışı oluşturur
grafiği, ardından grafik için bir kapsayan ağaç bulur. Sadece üzerinde olmayan yaylar
kapsayan ağaç enstrümante edilmelidir: derleyici, sayısını saymak için kod ekler.
bu yayların yürütüldüğü zamanlar. Bir yay tek çıkış veya tek giriş olduğunda
bir blok, enstrümantasyon kodu bloğa eklenebilir; aksi takdirde, yeni bir temel
enstrümantasyon kodunu tutmak için blok oluşturulmalıdır.
-ftest-kapsama
bir not dosyası oluşturun. gcov kod kapsamı yardımcı programı programı göstermek için kullanabilir
kapsama. Her kaynak dosyanın not dosyası denir yardımcı ad.gcno. Bakın
-fprofile-yayları açıklaması için yukarıdaki seçenek yardımcı isim ve nasıl yapılacağına ilişkin talimatlar
test kapsamı verileri oluşturun. Kapsam verileri, aşağıdaki durumlarda kaynak dosyalarla daha yakından eşleşir:
optimize etmiyorsun.
-fdbg-cnt-listesi
Tüm hata ayıklama sayaçları için adı ve sayaç üst sınırını yazdırın.
-fdbg-cnt=karşı-değer-listesi
Dahili hata ayıklama sayacı üst sınırını ayarlayın. karşı-değer-listesi virgülle ayrılmış
listesi isim:değer her hata ayıklama sayacının üst sınırını belirleyen çiftler isim için
değer. Tüm hata ayıklama sayaçları, "UINT_MAX" başlangıç üst sınırına sahiptir; Böylece
"dbg_cnt()", üst sınır bu seçenek tarafından ayarlanmadıkça her zaman true değerini döndürür. İçin
örneğin, ile -fdbg-cnt=dce:10,kuyruk_çağrı:0, "dbg_cnt(dce)" yalnızca ilki için true değerini döndürür
10 çağrı.
-savunabilir-tür-geçmek
-fdevre dışı-tür-geçmek=menzil listesi
Bu, optimizasyonu açıkça devre dışı bırakmak/etkinleştirmek için kullanılan bir dizi seçenek
geçer. Bu seçenekler, GCC hatalarını ayıklamak için kullanılmak üzere tasarlanmıştır. Derleyici kullanıcıları şunları yapmalıdır:
bunun yerine geçişleri etkinleştirmek/devre dışı bırakmak için normal seçenekleri kullanın.
-fdisable-ipa-geçmek
IPA geçişini devre dışı bırak geçmek. geçmek geçiş adıdır. Aynı geçiş statik ise
derleyicide birden çok kez çağrıldığında, geçiş adının sonuna bir
1'den başlayan sıra numarası.
-fdisable-rtl-geçmek
-fdisable-rtl-geçmek=menzil listesi
RTL geçişini devre dışı bırak geçmek. geçmek geçiş adıdır. Aynı geçiş statik ise
derleyicide birden çok kez çağrıldığında, geçiş adının sonuna bir
1'den başlayan sıra numarası. menzil listesi virgülle ayrılmış bir listedir
işlev aralıkları veya montajcı adları. Her aralık, bir ile ayrılmış bir sayı çiftidir.
kolon. Aralık her iki uçta da kapsayıcıdır. Aralık önemsiz ise, sayı
çifti tek bir sayı olarak basitleştirilebilir. Eğer fonksiyonun çağrı grafiği düğümü
uid belirtilen aralıklardan birine girerse, geçmek bunun için devre dışı
işlevi. uid bir döküm dosyasının işlev başlığında gösterilir ve geçiş
Seçenek kullanılarak isimler atılabilir -fdump-geçişler.
-fdisable-ağacı-geçmek
-fdisable-ağacı-geçmek=menzil listesi
Ağaç geçişini devre dışı bırak geçmek. Görmek -fdevre dışı-rtl seçeneğin açıklaması için
argümanlar.
-fenable-ipa-geçmek
IPA geçişini etkinleştir geçmek. geçmek geçiş adıdır. Aynı geçiş statik ise
derleyicide birden çok kez çağrıldığında, geçiş adının sonuna bir
1'den başlayan sıra numarası.
-fenable-rtl-geçmek
-fenable-rtl-geçmek=menzil listesi
RTL geçişini etkinleştir geçmek. Görmek -fdevre dışı-rtl seçenek argüman açıklaması için ve
örnekleri.
-fenable-ağaç-geçmek
-fenable-ağaç-geçmek=menzil listesi
Ağaç geçişini etkinleştir geçmek. Görmek -fdevre dışı-rtl seçenek argümanlarının açıklaması için.
İşte bu seçeneklerin kullanımlarını gösteren bazı örnekler.
# tüm işlevler için ccp1'i devre dışı bırakın
-fdisable-tree-ccp1
# cgraph düğüm kullanıcı kimliği 1 olan işlev için tam kayıttan çıkarmayı devre dışı bırak
-fenable-ağaç-cunroll=1
# aşağıdaki aralıklardaki işlevler için gcse2'yi devre dışı bırakın [1,1],
# [300,400] ve [400,1000]
# foo ve foo2 işlevleri için gcse2'yi devre dışı bırakın
-fdisable-rtl-gcse2=foo,foo2
# erken satır içi oluşturmayı devre dışı bırak
-fdisable-ağaç-einline
# ipa satırını devre dışı bırak
-fdisable-ipa-satır içi
# ağacı tam açmayı etkinleştir
-fenable-ağaç-açma
-dharfler
-fdump-rtl-geçmek
-fdump-rtl-geçmek=Dosya
Derleme sırasında tarafından belirtilen zamanlarda hata ayıklama dökümleri yapılacağını söylüyor harfler. Bu
derleyicinin RTL tabanlı geçişlerinde hata ayıklamak için kullanılır. Çoğu için dosya adları
dökümlere bir geçiş numarası ve bir kelime eklenerek yapılır. çöp adı, Ve
dosyalar, çıktı dosyasının dizininde oluşturulur. durumunda =Dosya seçeneği
döküm, geçiş numaralı döküm dosyaları yerine verilen dosyada çıkar. Not
geçişler geçişe kaydedilirken geçiş numarasının statik olarak hesaplandığını
yönetici. Bu nedenle numaralandırma, dinamik yürütme sırası ile ilgili değildir.
geçer. Özellikle, bir eklenti tarafından yüklenen bir geçişin sayısı 200'ün üzerinde olabilir.
oldukça erken yürütülürse. çöp adı çıktı dosyasının adından oluşturulur,
açıkça belirtilmişse ve yürütülebilir değilse, aksi takdirde
kaynak dosya. Bu anahtarların farklı etkileri olabilir. -E için kullanılır
ön işleme.
Hata ayıklama dökümleri, bir -fdump-rtl geçiş veya bazı -d seçenek harfler. İşte
kullanım için olası harfler nelerdir geçmek ve harfler, ve anlamları:
-fdump-rtl hizalamaları
Dal hizalamaları hesaplandıktan sonra döküm.
-fdump-rtl-asmcons
Karşılanmayan giriş/çıkış kısıtlamalarına sahip rtl deyimlerini düzelttikten sonra döküm.
-fdump-rtl-auto_inc_dec
Otomatik inc-dec keşfinden sonra döküm. Bu geçiş yalnızca şu mimarilerde çalıştırılır:
auto inc veya auto dec talimatlarına sahip olun.
-fdump-rtl-bariyerler
Bariyer talimatlarını temizledikten sonra boşaltın.
-fdump-rtl-bbpart
Sıcak ve soğuk temel blokları böldükten sonra boşaltın.
-fdump-rtl-bbro
Blok yeniden sıralandıktan sonra boşaltın.
-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 ve -fdump-rtl-btl2 iki dal hedefinden sonra boşaltmayı etkinleştir
yük optimizasyonu geçer.
-fdump-rtl-baypas
Atlamadan sonra atlayın ve akış optimizasyonlarını kontrol edin.
-fdump-rtl-birleştirmek
RTL komut kombinasyonu geçişinden sonra boşaltın.
-fdump-rtl-compgotos
Hesaplanan goto'ları çoğalttıktan sonra boşaltın.
-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2, ve -fdump-rtl-ce3 üçten sonra dampingi etkinleştir
dönüşüm geçerse
-fdump-rtl-cprop_hardreg
Sabit kayıt kopya yayılımından sonra dökümü.
-fdump-rtl-csa
Yığın ayarlamalarını birleştirdikten sonra boşaltın.
-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 ve -fdump-rtl-cse2 iki ortaktan sonra dampingi etkinleştir
alt ifade eliminasyonu geçer.
-fdump-rtl-dce
Bağımsız ölü kod eleme geçtikten sonra boşaltın.
-fdump-rtl-dbr
Gecikmeli şube planlamasından sonra döküm.
-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 ve -fdump-rtl-dce2 iki ölü mağazadan sonra boşaltmayı etkinleştir
eleme geçer.
-fdump-rtl-eh
EH işleme kodunun tamamlanmasından sonra döküm.
-fdump-rtl-eh_aralıkları
EH işleme aralığı bölgelerinin dönüştürülmesinden sonra boşaltma.
-fdump-rtl-genişlet
RTL oluşumundan sonra dökümü.
-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 ve -fdump-rtl-fwprop2 iki ileriden sonra dampingi etkinleştir
yayılma geçer.
-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 ve -fdump-rtl-gcse2 küresel ortak kullanımdan sonra dampingi etkinleştir
alt ifade eliminasyonu.
-fdump-rtl-init-reg'ler
Kayıtların başlatılmasından sonra döküm.
-fdump-rtl-başlangıçları
İlk değer kümelerinin hesaplanmasından sonra boşaltın.
-fdump-rtl-into_cfglayout
cfglayout moduna dönüştürdükten sonra dökümü.
-fdump-rtl-ira
Yinelenen kayıt tahsisinden sonra döküm.
-fdump-rtl-atlama
İkinci atlama optimizasyonundan sonra boşaltın.
-fdump-rtl-döngü2
-fdump-rtl-döngü2 rtl döngü optimizasyonu geçtikten sonra boşaltmayı etkinleştirir.
-fdump-rtl-mach
Makineye bağlı yeniden düzenleme geçişini gerçekleştirdikten sonra boşaltma, eğer bu geçerse
bulunmaktadır.
-fdump-rtl-mode_sw
Yedekli mod anahtarlarını çıkardıktan sonra boşaltın.
-fdump-rtl-rnreg
Kayıt yeniden numaralandırma işleminden sonra dökümü.
-fdump-rtl-outof_cfglayout
cfglayout modundan dönüştürdükten sonra dökümü.
-fdump-rtl-gözetleme deliği2
Gözetleme deliğinden geçtikten sonra boşaltın.
-fdump-rtl-yeniden yükleme
Yeniden yükleme sonrası optimizasyonlardan sonra boşaltın.
-fdump-rtl-pro_and_epilogue
İşlev önsözlerini ve sonsözlerini oluşturduktan sonra boşaltın.
-fdump-rtl-regmove
Kayıt taşıma geçişinden sonra boşaltın.
-fdump-rtl-schedu1
-fdump-rtl-schedu2
-fdump-rtl-schedu1 ve -fdump-rtl-schedu2 temel bloktan sonra boşaltmayı etkinleştir
zamanlama geçer.
-fdump-rtl-görmek
İşaret uzantısının ortadan kaldırılmasından sonra boşaltın.
-fdump-rtl-seqabstr
Ortak dizi keşfinden sonra döküm.
-fdump-rtl-kısaltma
Dalları kısalttıktan sonra boşaltın.
-fdump-rtl-kardeş
Kardeş arama optimizasyonlarından sonra döküm.
-fdump-rtl-bölünmüş1
-fdump-rtl-bölünmüş2
-fdump-rtl-bölünmüş3
-fdump-rtl-bölünmüş4
-fdump-rtl-bölünmüş5
-fdump-rtl-bölünmüş1, -fdump-rtl-bölünmüş2, -fdump-rtl-bölünmüş3, -fdump-rtl-bölünmüş4 ve
-fdump-rtl-bölünmüş5 beş tur talimat bölme işleminden sonra boşaltmayı etkinleştirin.
-fdump-rtl-sms
Modulo zamanlamasından sonra dökümü. Bu geçiş yalnızca bazı mimarilerde çalıştırılır.
-fdump-rtl-yığın
GCC'nin "düz kayıt dosyası" kayıtlarından x87'lere dönüştürüldükten sonra döküm
yığın benzeri kayıtlar. Bu geçiş yalnızca x86 türevlerinde çalıştırılır.
-fdump-rtl-altreg1
-fdump-rtl-altreg2
-fdump-rtl-altreg1 ve -fdump-rtl-altreg2 iki alt kayıttan sonra boşaltmayı etkinleştir
genişleme geçer.
-fdump-rtl-paylaşmayı kaldır
Tüm rtl paylaşıldıktan sonra dökümü.
-fdump-rtl-vartrack
Değişken takibinden sonra dökümü.
-fdump-rtl-vreg'ler
Sanal kayıtları sabit kayıtlara dönüştürdükten sonra döküm.
-fdump-rtl-web
Canlı aralık bölünmesinden sonra boşaltın.
-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dbitir
Bu dökümler tanımlanır ancak her zaman boş dosyalar üretir.
-verir
-fdump-rtl-tümü
Yukarıda listelenen tüm dökümleri üretin.
-dA Derleyici çıktısına çeşitli hata ayıklama bilgileriyle açıklama ekleyin.
-dd Normal tanımlamaya ek olarak, ön işlemenin sonunda tüm makro tanımlarını boşaltın
çıktı.
-dH Bir hata oluştuğunda bir çekirdek dökümü oluşturun.
-dp Birleştirici çıktısına, hangi modelin ve
alternatif kullanılır. Her talimatın uzunluğu da yazdırılır.
-dP RTL'yi her komuttan önce bir yorum olarak montajcı çıktısına boşaltın. Ayrıca
açılır -dp Ek açıklama.
-dx Derlemek yerine bir işlev için RTL oluşturun. Genellikle birlikte kullanılır
-fdump-rtl-genişlet.
-fdump-noaddr
Hata ayıklama dökümleri yaparken, adres çıktısını bastırın. Bu, daha uygun hale getirir
farklı derleyici ikili dosyalarına sahip derleyici çağrıları için hata ayıklama dökümlerinde diff kullanın
ve/veya farklı metin / bss / veri / yığın / yığın / dso başlangıç konumları.
-fdump-numarasız
Hata ayıklama dökümleri yaparken, talimat numaralarını ve adres çıktısını gizleyin. Bu
derleyici çağrıları için hata ayıklama dökümlerinde diff kullanmayı daha uygun hale getirir
farklı seçenekler, özellikle ile ve olmadan -g.
-fdump-numarasız-bağlantılar
Hata ayıklama dökümleri yaparken (bkz. -d yukarıdaki seçenek), için talimat numaralarını gizleyin.
bir sıradaki önceki ve sonraki talimatlara bağlantılar.
-fdump-çeviri-birimi (Yalnızca C++)
-fdump-translation-birimi-seçenekleri (Yalnızca C++)
Tüm çeviri birimi için ağaç yapısının bir temsilini bir dosyaya dökün.
Dosya adı ekleyerek yapılır .tu kaynak dosya adına ve dosya
çıktı dosyasıyla aynı dizinde oluşturulur. Eğer -seçenekleri formu kullanılır,
seçenekleri için açıklandığı gibi dökümün ayrıntılarını kontrol eder. -fdump-ağacı seçenekleri.
-fdump-sınıfı-hiyerarşisi (Yalnızca C++)
-fdump-sınıfı-hiyerarşi-seçenekleri (Yalnızca C++)
Her sınıfın hiyerarşisinin ve sanal işlev tablosu düzeninin bir temsilini bir
dosya. Dosya adı ekleyerek yapılır .sınıf kaynak dosya adına ve dosyaya
çıktı dosyasıyla aynı dizinde oluşturulur. Eğer -seçenekleri formu kullanılır,
seçenekleri için açıklandığı gibi dökümün ayrıntılarını kontrol eder. -fdump-ağacı seçenekleri.
-fdump-ipa-anahtar
Prosedürler arası analiz dil ağacının çeşitli aşamalarında dampingi kontrol edin.
dosya. Dosya adı, kaynağa anahtara özel bir sonek eklenerek oluşturulur.
dosya adı ve dosya, çıktı dosyasıyla aynı dizinde oluşturulur. NS
aşağıdaki dökümler mümkündür:
herşey Tüm prosedürler arası analiz dökümlerini etkinleştirir.
cgraf
Çağrı grafiği optimizasyonu, kullanılmayan işlevlerin kaldırılması ve
satır içi kararlar.
inline
İşlev satır içi işleminden sonra boşaltın.
-fdump-geçişler
Geçerli tarafından açılıp kapatılan optimizasyon geçişlerinin listesini boşaltın
komut satırı seçenekleri.
-fdump-istatistikleri-seçenek
Geçiş istatistiklerinin ayrı bir dosyada dökümünü etkinleştirin ve kontrol edin. dosya adı
ile biten bir sonek eklenerek oluşturulur. .İstatistik kaynak dosya adına ve
dosyası, çıktı dosyasıyla aynı dizinde oluşturulur. Eğer -seçenek form
Kullanılmış, -istatistikler Sayaçların tüm derleme birimi üzerinde toplanmasına neden olurken,
-detaylar geçişler onları oluştururken her olayı döker. Seçeneği olmayan varsayılan
derlenen her işlev için sayaçları toplamak için.
-fdump-ağacı-anahtar
-fdump-ağacı-anahtar-seçenekleri
-fdump-ağacı-anahtar-seçenekleri=Dosya
Ara dil ağacının işlenmesinin çeşitli aşamalarında boşaltmayı kontrol edin.
bir dosya. Dosya adı, anahtara özel bir sonek eklenerek oluşturulur.
kaynak dosya adı ve dosya, çıktı dosyasıyla aynı dizinde oluşturulur. İçinde
durum =Dosya seçeneği, döküm, otomatik yerine verilen dosyada çıkar.
adlı döküm dosyaları. Eğer -seçenekleri formu kullanılır, seçenekleri bir listesidir - ayrılmış
dökümün ayrıntılarını kontrol eden seçenekler. Tüm seçenekler hepsi için geçerli değildir
çöplükler; anlamlı olmayanlar göz ardı edilir. Aşağıdaki seçenekler mevcuttur
adres
Her düğümün adresini yazdırın. Genellikle bu değiştiği için anlamlı değildir
ortama ve kaynak dosyaya göre. Birincil kullanımı bir şeyi bağlamak içindir.
bir hata ayıklama ortamına sahip döküm dosyası.
asmname
Belirli bir dekl için "DECL_ASSEMBLER_NAME" ayarlanmışsa, bunu dökümde kullanın
"DECL_NAME" yerine. Birincil kullanımı, geriye doğru çalışan kullanım kolaylığıdır.
derleme dosyasında karışık isimler.
ince
Ön uç ara temsillerini boşaltırken, üyelerinin dampingini engelle
yalnızca o kapsama ulaşıldığı için bir işlevin kapsamı veya gövdesi. Bir tek
bu tür öğeleri başka bir yoldan doğrudan erişilebildiğinde boşaltın.
Güzel basılmış ağaçları atarken, bu seçenek ağaç gövdelerinin atılmasını engeller.
Kontrol Yapıları.
RTL'yi boşaltırken, RTL'yi varsayılan yerine ince (yoğunlaştırılmış) biçimde yazdırın
LISP benzeri gösterim.
çiğ Ağacın ham bir temsilini yazdırın. Varsayılan olarak, ağaçlar oldukça yazdırılır
C benzeri bir temsil.
ayrıntılar
Daha ayrıntılı dökümleri etkinleştirin (her döküm seçeneği tarafından dikkate alınmaz). Ayrıca içerir
optimizasyondan gelen bilgiler geçer.
istatistikler
Geçişle ilgili çeşitli istatistiklerin dökümünü etkinleştirin (her döküm tarafından onurlandırılmaz)
seçenek).
bloklar
Temel blok sınırlarını göstermeyi etkinleştir (ham dökümlerde devre dışı).
grafik
Belirtilen diğer döküm dosyalarının her biri için (-fdump-rtl-geçmek), bir dökümü
için GraphViz ile görüntülemeye uygun kontrol akış grafiğinin temsili
dosya.passid.pass.nokta. Dosyadaki her işlev, bir alt grafik olarak oldukça yazdırılır,
GraphViz'in hepsini tek bir arsada oluşturabilmesi için.
Bu seçenek şu anda yalnızca RTL dökümleri için çalışır ve RTL her zaman
ince form.
vop'lar
Her ifade için sanal işlenenleri göstermeyi etkinleştirin.
keten
İfadeler için satır numaralarını göstermeyi etkinleştirin.
uid Her değişken için benzersiz kimliği ("DECL_UID") göstermeyi etkinleştirin.
gereksiz sözlerle dolu
Her ifade için ağaç dökümünü göstermeyi etkinleştirin.
eh Her bir ifadeyi tutan EH bölge numarasını göstermeyi etkinleştirin.
scev
Skaler evrim analizi ayrıntılarını göstermeyi etkinleştirin.
optimize
Optimizasyon bilgilerini göstermeyi etkinleştir (yalnızca belirli geçişlerde kullanılabilir).
cevapsız
Kaçırılan optimizasyon bilgilerini göstermeyi etkinleştir (yalnızca belirli geçişlerde kullanılabilir).
notlar
Diğer ayrıntılı optimizasyon bilgilerini etkinleştirin (yalnızca belirli geçişlerde kullanılabilir).
=Dosya
Otomatik olarak adlandırılan bir döküm dosyası yerine, verilen dosya adına çıktı alın. Dosya
isimleri stdout'u ve Stderr özel olarak muamele edilir ve zaten açık olarak kabul edilir
standart akışlar. Örneğin,
gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr dosyası.c
çıktılar vectorizer dökümü yiyecek.dump, PRE dökümü açıkken Stderr.
Aynı geçiş için iki çakışan döküm dosya adı verilirse, ikincisi
seçenek öncekini geçersiz kılar.
herşey dışındaki tüm seçenekleri açın. çiğ, ince, gereksiz sözlerle dolu ve keten.
isteğe bağlı
Tüm optimizasyon seçeneklerini açın, yani optimize, cevapsız, ve notlar.
Aşağıdaki ağaç dökümleri mümkündür:
orijinal
Herhangi bir ağaç tabanlı optimizasyondan önce dökümü, dosya.orijinal.
optimize
Tüm ağaç tabanlı optimizasyondan sonra, dosya.optimize edilmiş.
sivilce
Her işlevi bir dosyaya geçişten önce ve sonra boşaltın. Dosya
isim eklenerek yapılır .gimple kaynak dosya adına.
cfg Her işlevin kontrol akış grafiğini bir dosyaya boşaltın. Dosya adı tarafından yapılır
ekleme .cfg kaynak dosya adına.
ch Döngü başlıklarını kopyaladıktan sonra her işlevi boşaltın. Dosya adı ekleyerek yapılır
.ch kaynak dosya adına.
ssa SSA ile ilgili bilgileri bir dosyaya dökün. Dosya adı ekleyerek yapılır .ssa
kaynak dosya adına.
takma ad
Her işlev için takma ad bilgilerini boşaltın. Dosya adı ekleyerek yapılır
.takma ad kaynak dosya adına.
ccp CCP'den sonra her işlevi boşaltın. Dosya adı ekleyerek yapılır .ccp için
kaynak dosya adı.
mağazaccp
STORE-CCP'den sonra her işlevi boşaltın. Dosya adı ekleyerek yapılır .storeccp
kaynak dosya adına.
önceden Kısmi fazlalık ortadan kaldırıldıktan sonra ağaçları boşaltın. Dosya adı tarafından yapılır
ekleme .pre kaynak dosya adına.
fre Tam fazlalık ortadan kaldırıldıktan sonra ağaçları boşaltın. Dosya adı ekleyerek yapılır
.fre kaynak dosya adına.
kopya prop
Kopya yayılımından sonra ağaçları boşaltın. Dosya adı ekleyerek yapılır .kopyalama
kaynak dosya adına.
mağaza_kopyaprop
Mağaza kopyalama yayılımından sonra ağaçları boşaltın. Dosya adı ekleyerek yapılır
.store_copyprop kaynak dosya adına.
dce Ölü kod ortadan kaldırıldıktan sonra her işlevi boşaltın. Dosya adı tarafından yapılır
ekleme .dce kaynak dosya adına.
çamurluk
Çamurluk enstrümantasyonu ekledikten sonra her işlevi boşaltın. Dosya adı tarafından yapılır
ekleme .çamurluk kaynak dosya adına.
sRA Toplamaların skaler değişimini gerçekleştirdikten sonra her işlevi boşaltın. Dosya
isim eklenerek yapılır .sra kaynak dosya adına.
lavabo
Kod batmasını gerçekleştirdikten sonra her işlevi boşaltın. Dosya adı tarafından yapılır
ekleme .lavabo kaynak dosya adına.
hediye Baskın ağaç optimizasyonlarını uyguladıktan sonra her işlevi boşaltın. dosya adı
eklenerek yapılmış .dom kaynak dosya adına.
söyle Ölü depo eliminasyonunu uyguladıktan sonra her işlevi boşaltın. Dosya adı yapılır
ekleyerek .dse kaynak dosya adına.
phiopt
PHI düğümlerini düz çizgi koduna optimize ettikten sonra her işlevi boşaltın. Dosya
isim eklenerek yapılır .phiopt kaynak dosya adına.
ileri pervane
Tek kullanımlık değişkenleri ileriye doğru yaydıktan sonra her işlevi boşaltın. dosya adı
eklenerek yapılır .forwprop kaynak dosya adına.
kopya adı
Kopya yeniden adlandırma optimizasyonunu uyguladıktan sonra her işlevi boşaltın. dosya adı
eklenerek yapılmış .kopya adı kaynak dosya adına.
nrv Jenerik üzerinde adlandırılmış dönüş değeri optimizasyonunu uyguladıktan sonra her işlevi boşaltın
ağaçlar. Dosya adı ekleyerek yapılır .nrv kaynak dosya adına.
vektör
Döngülerin vektörleştirilmesini uyguladıktan sonra her işlevi boşaltın. Dosya adı yapılır
ekleyerek .vect kaynak dosya adına.
slp Temel blokların vektörleştirilmesini uyguladıktan sonra her işlevi boşaltın. dosya adı
eklenerek yapılmış .slp kaynak dosya adına.
vrp Değer Aralığı Yayılımından (VRP) sonra her işlevi boşaltın. Dosya adı tarafından yapılır
ekleme .vrp kaynak dosya adına.
herşey Bu seçenekte sağlanan bayraklarla mevcut tüm ağaç dökümlerini etkinleştirin.
-fopt-bilgi
-fopt-bilgi-seçenekleri
-fopt-bilgi-seçenekleri=Dosya
Çeşitli optimizasyon geçişlerinden optimizasyon dökümlerini kontrol eder. Eğer -seçenekleri form
Kullanılmış, seçenekleri bir listesidir - döküm ayrıntılarını seçmek için ayrılmış seçenekler ve
optimizasyonlar. Eğer seçenekleri belirtilmemiş, varsayılan olarak herşey detaylar için ve isteğe bağlı
optimizasyon grupları için. Eğer Dosya belirtilmemiş, varsayılan olarak Stderr. Not
çıktı olduğunu Dosya birden fazla çeviri birimi olması durumunda üzerine yazılacaktır. Eğer
birden çok çeviri biriminden birleşik çıktı istenir, Stderr kullanılmalıdır
yerine.
Seçenekler iki gruba ayrılabilir, 1) seçeneğin ayrıntı düzeyini tanımlayan seçenekler
dökümü ve 2) hangi optimizasyonların dahil edilmesi gerektiğini açıklayan seçenekler. Seçenekler
Her iki gruptan da üst üste binmedikleri için serbestçe karıştırılabilir. Ancak, durumda
herhangi bir çakışma olduğunda, sonraki seçenekler komut satırındaki önceki seçenekleri geçersiz kılar.
Birden çok -fopt-info seçeneği kabul edilse de, bunlardan yalnızca biri =dosya adı.
Diğer dosya adları sağlanırsa, ilki hariç tümü yoksayılır.
Döküm ayrıntısı aşağıdaki seçeneklere sahiptir
optimize
Bir optimizasyon başarıyla uygulandığında bilgileri yazdırın. geçmek kaldı
Hangi bilgilerin ilgili olduğuna karar vermek için. Örneğin, vektörleştirici baskıyı geçer
başarıyla vektörleştirilen döngülerin kaynak konumu.
cevapsız
Kaçırılan optimizasyonlarla ilgili bilgileri yazdırın. Bireysel geçiş kontrolü
çıktıya dahil edilecek bilgiler. Örneğin,
gcc -O2 -ftree-vectorize -fopt-info-vec-cevapsız
vektörleştirmeden kaçırılan optimizasyon fırsatları hakkında bilgi yazdıracak
stderr'den geçer.
notlar
Belirli dönüşümler gibi optimizasyonlar hakkında ayrıntılı bilgileri yazdırın,
kararlar vb. hakkında daha ayrıntılı mesajlar.
herşey Ayrıntılı optimizasyon bilgilerini yazdırın. Bu içerir optimize, cevapsız, ve
notlar.
İkinci seçenek grubu bir grup optimizasyonu tanımlar ve bir veya
aşağıdakilerden daha fazlası.
ipa Tüm prosedürler arası optimizasyonlardan dökümleri etkinleştirin.
döngü
Tüm döngü optimizasyonlarından dökümleri etkinleştirin.
inline
Tüm satır içi optimizasyonlardan dökümleri etkinleştirin.
vec Tüm vektörleştirme optimizasyonlarından dökümleri etkinleştirin.
Örneğin,
gcc -O3 -fopt-info-missed=cevapsız.all
tüm geçişlerden kaçırılan optimizasyon raporu çıktıları cevapsız.hepsi.
Başka bir örnek olarak,
gcc -O3 -fopt-info-inline-optimize-missed=inline.txt
kaçırılan optimizasyonların yanı sıra optimize edilmiş konumlar hakkında bilgi verir.
tüm satır içi geçişler satır içi.txt.
Eğer Dosya sağlanırsa, geçerli tüm optimizasyonlardan elde edilen dökümler
içine birleştirilmiş Dosya. Aksi takdirde dökümü üzerine çıktı alınır Stderr. Eğer seçenekleri
atlanır, varsayılan olarak tamamen isteğe bağlı, bu, mevcut tüm optimizasyonu boşaltmak anlamına gelir
tüm geçişlerden bilgi. Aşağıdaki örnekte, tüm optimizasyon bilgilerinin çıktısı şuradadır:
için Stderr.
gcc -O3 -fopt bilgisi
Bunu not et -fopt-info-vec-kaçırdı aynı şekilde davranır -fopt-info-kaçırılan-vec.
Başka bir örnek olarak, düşünün
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimize edilmiş=loop.opt
Burada iki çıktı dosya adı vec.miss ve döngü.opt sadece birinden beri çatışıyorlar
çıktı dosyasına izin verilir. Bu durumda, yalnızca ilk seçenek geçerli olur ve
sonraki seçenekler göz ardı edilir. Böylece sadece vec.miss içeren üretilir
vektörleştiriciden kaçırılan fırsatlar hakkında dökümler.
-ftree-vektörleştirici-ayrıntılı=n
Bu seçenek kullanımdan kaldırılmıştır ve aşağıdakiler açısından uygulanmaktadır: -fopt-bilgi. Lütfen kullan
-fopt-bilgi-tür bunun yerine, nerede tür geçerli tercih bilgisi seçeneklerinden biridir. Bilişim Teknoloji
ek optimizasyon bilgilerini yazdırır. İçin n=0 teşhis bilgisi yok
bildirildi. Eğer n=1 vektörleştirici, vektörleştirilen her döngüyü ve toplam
vektörleştirilen döngü sayısı. Eğer n=2 vektörleştirici hangi konumları bildirir:
vektörleştirilemedi ve bunların nedenleri. Daha yüksek ayrıntı düzeyleri için tüm
vektörleştiriciden gelen analiz ve dönüşüm bilgileri rapor edilir.
Bilgi çıktısının şuna dikkat edin: -ftree-vektörleştirici-ayrıntılı seçenek gönderildi
Stderr. Eşdeğer formu ise -fopt-bilgi-seçenekleri=Dosya kullanılır, ardından çıktı
içine gönderildi Dosya yerine.
-frandom-tohum=dizi
Bu seçenek, GCC'nin oluşturma işleminde rasgele sayılar yerine kullandığı bir tohum sağlar.
her derlenmiş dosyada farklı olması gereken belirli sembol adları. Aynı zamanda
Kapsam veri dosyalarına ve üreten nesne dosyalarına benzersiz damgalar yerleştirmek için kullanılır.
onlara. kullanabilirsiniz -frandom-tohum tekrarlanabilir şekilde aynı nesneyi üretme seçeneği
dosyaları.
The dizi derlediğiniz her dosya için farklı olmalıdır.
-fsched-ayrıntılı=n
Talimat zamanlamasını kullanan hedeflerde bu seçenek, aşağıdakilerin miktarını kontrol eder.
hata ayıklama çıktısı zamanlayıcı yazdırır. Bu bilgi standart hataya yazılır,
olmadıkça -fdump-rtl-schedu1 or -fdump-rtl-schedu2 belirtilir, bu durumda çıktı alınır
olağan döküm liste dosyasına, .schedule1 or .schedule2 sırasıyla. Ancak n
dokuzdan büyükse, çıktı her zaman standart hatayla yazdırılır.
ABD n sıfırdan büyük, -fsched-ayrıntılı ile aynı bilgiyi verir
-fdump-rtl-schedu1 ve -fdump-rtl-schedu2. Için n birden büyük, aynı zamanda temel çıktı
blok olasılıkları, ayrıntılı hazır liste bilgileri ve birim/insn bilgileri. İçin n
ikiden büyükse, durdurma noktasında RTL, kontrol akışı ve bölge bilgilerini içerir. Ve
için n dörtten fazla, -fsched-ayrıntılı bağımlılık bilgilerini de içerir.
-kaydet-temps
-save-temps=cwd
Her zamanki "geçici" ara dosyaları kalıcı olarak saklayın; onları akıma yerleştir
dizin ve kaynak dosyaya göre adlandırın. Böylece derleme foo.c ile -c
-kaydet-temps dosyalar üretir foo.i ve foo.s, Hem de foo.o. Bu bir
ön işleme tabi tutulmuş foo.i çıktı dosyası, derleyici artık normalde bir
entegre ön işlemci
ile birlikte kullanıldığında -x komut satırı seçeneği, -kaydet-temps mantıklı
ile aynı uzantıya sahip bir girdi kaynak dosyasının üzerine yazmaktan kaçınmak için yeterli
ara dosya. Karşılık gelen ara dosya yeniden adlandırılarak elde edilebilir.
kullanmadan önce kaynak dosya -kaydet-temps.
GCC'yi paralel olarak çağırırsanız, bir
farklı alt dizinlerdeki ortak temel ad veya aynı kaynak dosya için derlenmiş
birden çok çıktı hedefi varsa, farklı paralel derleyicilerin
birbirinize müdahale edin ve geçici dosyaların üzerine yazın. Örneğin:
gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&
Sonuçlanabilir foo.i ve foo.o her iki derleyici tarafından aynı anda yazılıyor.
-save-temps=nesne
Her zamanki "geçici" ara dosyaları kalıcı olarak saklayın. Eğer -o seçeneği kullanılır,
geçici dosyalar nesne dosyasını temel alır. Eğer -o seçeneği kullanılmaz,
-save-temps=nesne anahtar gibi davranır -kaydet-temps.
Örneğin:
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
oluşturur foo.i, foo.s, dizin/xbar.i, dizin/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s, ve
dir2/yfoobar.o.
Zamanlı[=dosya]
Derleme sırasındaki her bir alt işlem tarafından alınan CPU süresini rapor edin. C için
kaynak dosyalar, bu, uygun derleyici ve derleyicidir (artı, bağlantı kuruluysa bağlayıcı
tamamlamak).
Bir çıktı dosyasının belirtimi olmadan çıktı şöyle görünür:
# cc1 0.12 0.01
# 0.00 0.01 olarak
Her satırdaki ilk sayı, "kullanıcı zamanı"dır, yani işlemi yürütmek için harcanan zamandır.
programın kendisi. İkinci sayı "sistem zamanı", işletimi yürütmek için harcanan zamandır
program adına sistem rutinleri. Her iki sayı da saniye cinsindendir.
Bir çıktı dosyasının belirtimi ile çıktı, adlandırılmış dosyaya eklenir,
ve şuna benziyor:
0.12 0.01 cc1
0.00 0.01 olarak
"Kullanıcı zamanı" ve "sistem zamanı", program adından önce taşınır ve
Programa iletilen seçenekler görüntülenir, böylece daha sonra hangi dosyanın olduğu anlaşılabilir.
derleniyor ve hangi seçeneklerle.
-fvar-izleme
Değişken izleme geçişini çalıştırın. Değişkenlerin her pozisyonda nerede saklandığını hesaplar
kodda. Daha sonra daha iyi hata ayıklama bilgileri oluşturulur (hata ayıklama bilgileri
biçimi bu bilgileri destekler).
Optimizasyon ile derlerken varsayılan olarak etkindir (-İşletim sistemi, -O, -O2, ...),
hata ayıklama bilgileri (-g) ve hata ayıklama bilgisi formatı bunu destekler.
-fvar-izleme-atamaları
Derlemenin başlarında kullanıcı değişkenlerine atamalara açıklama ekleyin ve
bir girişimde, derleme boyunca sonuna kadar ek açıklamalar
optimize ederken hata ayıklama bilgilerini iyileştirmek için. Kullanımı -gdwarf-4 birlikte tavsiye edilir
onunla.
Var-tracking devre dışı bırakılsa bile etkinleştirilebilir, bu durumda ek açıklamalar
yaratılır ve korunur, ancak sonunda atılır.
-fvar-izleme-ödevleri-değiştirme
Toggle -fvar-izleme-atamalarıaynı şekilde -gtoggle geçiş yapar -g.
-baskı-dosya-adı=kütüphane
Kitaplık dosyasının tam adını yazdırın kütüphane ne zaman kullanılacaktı
bağlama --- ve başka bir şey yapmayın. Bu seçenekle, GCC derleme yapmaz veya bağlantı oluşturmaz
herhangi bir şey; sadece dosya adını yazdırır.
-baskı-çoklu-dizin
Diğer anahtarlar tarafından seçilen multilib'e karşılık gelen dizin adını yazdırın
komut satırında bulunur. Bu dizinin içinde olması gerekiyordu GCC_EXEC_PREFIX.
-baskı-çoklu kitaplık
Eşlemeyi multilib dizin adlarından bunları etkinleştiren derleyici anahtarlarına yazdırın.
Dizin adı anahtarlardan şu şekilde ayrılır: ;ve her anahtar bir
@ onun yerine -, birden fazla anahtar arasında boşluk bırakmadan. Bunun olması gerekiyordu
kabuk işlemeyi kolaylaştırır.
-baskı-çoklu-işletim-dizini
Seçilen multilib için işletim sistemi kitaplıklarının yolunu bazılarına göre yazdırın lib
alt dizin. İşletim sistemi kitaplıkları mevcutsa lib alt dizin ve multilib yok
kullanılır, bu genellikle sadece ., işletim sistemi kitaplıkları mevcutsa kütüphane son eki kardeş
bunun yazdırıldığı dizinler, örneğin ../lib64, ../ lib or ../lib32veya işletim sistemi kitaplıkları
içinde mevcut lib/alt dizin yazdırdığı alt dizinler, örneğin amd64, sparcv9 or ev6.
-baskı-multiarch
Seçilen çoklu ark için işletim sistemi kitaplıklarına giden yolu, bazılarına göre yazdırın. lib
alt dizin.
-baskı-prog-adı=program
Facebok sayfasını beğenin : -baskı-dosya-adı, ancak aşağıdaki gibi bir program arar cpp.
-print-libgcc-dosya-adı
Aynısı -baskı-dosya-adı=libgcc.a.
Bu, kullandığınızda yararlıdır -nstdlib or -nodefaultlib'ler ama bağlantı kurmak istiyorsun
libgcc.a. Yapabilirsin:
gcc -nostdlib ... `gcc -print-libgcc-dosya-adı`
-baskı-arama-dir'leri
Yapılandırılan kurulum dizininin adını ve program listesini yazdırın ve
kütüphane dizinleri gcc arar --- ve başka bir şey yapmayın.
Bu yararlı olduğunda gcc hata mesajını yazdırır Kurulum sorun, Amerika’ya vize ile ya da Meksika üzerinden geldikten sonra ilticaya başvuran kişileri, herhangi bir suça karışmadıkları sürece mahkeme kararı olmadan sınır dışı (deport) ettiremez. exec
cpp0: Yok hayır böyle dosya or rehber. Bunu çözmek için ya koymanız gerekir cpp0 ve
diğer derleyici bileşenleri nerede gcc onları bulmayı umuyor veya
Çevre değişkeni GCC_EXEC_PREFIX onları kurduğunuz dizine. yapma
takip etmeyi unut /.
-print-sysroot
Derleme sırasında kullanılan hedef sysroot dizinini yazdırın. bu
yapılandırma zamanında veya --sistem kökü seçeneği
muhtemelen derleme seçeneklerine bağlı olan ekstra bir son ek ile. hedef yoksa
sysroot belirtilirse, seçenek hiçbir şey yazdırmaz.
-print-sysroot-headers-soneki
Başlıkları ararken hedef sistem köküne eklenen son eki yazdırın veya
derleyici böyle bir sonekle yapılandırılmamışsa hata verir ve hiçbir şey yapmayın
Başka.
-aptal makinesi
Derleyicinin hedef makinesini yazdırın (örneğin, i686-pc-linux-gnu)---ve yapma
başka herhangi bir şey.
-döküm
Derleyici sürümünü yazdırın (örneğin, 3.0)---ve başka bir şey yapmayın.
-dumpspec'ler
Derleyicinin yerleşik özelliklerini yazdırın --- ve başka bir şey yapmayın. (Bu ne zaman kullanılır
GCC'nin kendisi inşa ediliyor.)
-fno-kullanılmayan-hata ayıklama-türlerini ortadan kaldırın
Normalde, DWARF 2 çıktısı üretirken, GCC için hata ayıklama sembolü çıktısı üretmekten kaçınır.
derlenmekte olan kaynak dosyada hiçbir yerde kullanılmayan türler. Bazen işe yarar
bir derleme biriminde bildirilen tüm türler için GCC'nin hata ayıklama bilgisi yaymasını sağlamak,
o derleme biriminde gerçekten kullanılıp kullanılmadıklarına bakılmaksızın,
örneğin, hata ayıklayıcıda, gerçekte olmayan bir türe bir değer atamak istiyorsanız
programınızda kullanılır (ancak bildirilir). Bununla birlikte, daha sık olarak, bu bir
önemli miktarda boşa harcanan alan.
Opsiyonlar O Control Optimizasyon
Bu seçenekler, çeşitli optimizasyon türlerini kontrol eder.
Herhangi bir optimizasyon seçeneği olmadan, derleyicinin amacı derleme maliyetini azaltmaktır.
ve hata ayıklamanın beklenen sonuçları üretmesini sağlamak. İfadeler bağımsızdır: eğer
programı ifadeler arasında bir kesme noktası ile durdurun, ardından yeni bir değer atayabilirsiniz.
herhangi bir değişken veya program sayacını işlevdeki başka bir ifadeyle değiştirin ve
tam olarak kaynak koddan beklediğiniz sonuçlar.
Optimizasyon bayraklarını açmak, derleyicinin performansı iyileştirmeye çalışmasını ve/veya
derleme süresi ve muhtemelen hata ayıklama yeteneği pahasına kod boyutu
programı.
Derleyici, program hakkında sahip olduğu bilgilere dayanarak optimizasyon gerçekleştirir.
Birden çok dosyayı aynı anda tek bir çıktı dosyası modunda derlemek, derleyicinin
her birini derlerken tüm dosyalardan elde edilen bilgiler.
Tüm optimizasyonlar doğrudan bir bayrak tarafından kontrol edilmez. Yalnızca
bayrak bu bölümde listelenir.
Çoğu optimizasyon yalnızca şu durumlarda etkinleştirilir: -O seviye komut satırında ayarlanır. Aksi halde
bireysel optimizasyon bayrakları belirtilse bile bunlar devre dışı bırakılır.
Hedefe ve GCC'nin nasıl yapılandırıldığına bağlı olarak, biraz farklı bir dizi
optimizasyonlar her birinde etkinleştirilebilir -O Burada listelenenlerden daha yüksek seviyede. GCC'yi çağırabilirsiniz
ile -Q --help=iyileştiriciler etkinleştirilen tam optimizasyon kümesini bulmak için
her seviye.
-O
-O1 Optimize et. Derlemeyi optimize etmek için biraz daha fazla zaman ve çok daha fazla bellek gerekir.
büyük bir işlev.
İle -O, derleyici, gerçekleştirmeden kod boyutunu ve yürütme süresini azaltmaya çalışır.
çok fazla derleme süresi alan herhangi bir optimizasyon.
-O aşağıdaki optimizasyon bayraklarını açar:
-fauto-inc-dec -fkarşılaştır-elim -fcprop-kayıtları -fdce -fdefer-pop -fgecikmeli-dal
-fdse -fguess-dal-olasılığı -fif-dönüşüm2 -fif-dönüşüm -fipa-saf-const
-fipa-profil -fipa-referans -fmerge-sabitleri -fsplit-geniş-türler -ftree-bit-ccp
-ftree-yerleşik-çağrı-dce -ftree-ccp -ftree-ch -ftree-telif adı -ftree-dce
-ftree-dominator-seçenekleri -ftree-dse -ftree-forwprop -ağaçsız -ftree-phiprop -ftree-slsr
-ftree-sra -ftree-pta -ftree-ter -her seferinde eğlence
-O ayrıca açılır -fomit-frame-işaretçi müdahale etmediği makinelerde
hata ayıklama ile.
-O2 Daha da optimize edin. GCC, aşağıdakileri içermeyen neredeyse tüm desteklenen optimizasyonları gerçekleştirir:
uzay hızında bir değiş tokuş içerir. İle kıyaslandığında -O, bu seçenek hem artırır
derleme süresi ve oluşturulan kodun performansı.
-O2 tarafından belirtilen tüm optimizasyon bayraklarını açar -O. Ayrıca aşağıdakileri de açar
optimizasyon bayrakları: -fthread-atlar -falign-fonksiyonları -falign-atlayışlar -falign-döngüler
-falign-etiketler -fcaller-kaydeder -fçapraz atlama -fcse-takip-atlayışları -fcse-atlama-blokları
-fdelete-null-işaretçi-kontrolleri -fsanallaştırma -çok pahalı-optimizasyonlar -fgcse
-fgcse-lm -fhoist-bitişik-yükler -finline-küçük-fonksiyonlar -findirect-satır içi
-fipa-sra -foptimize-kardeş-çağrıları -fkısmi-satır içi -f gözetleme deliği2 -fregmove
-freorder-blokları -freorder-fonksiyonları -frerun-cse-sonrası döngü -fsched-interblock
-fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-taşma
-ftree-switch-dönüşüm -ftree-tail-birleştirme -ftree-ön -ftree-vrp
Lütfen aşağıdaki uyarıyı dikkate alın -fgcse çağırma hakkında -O2 bilgisayar kullanan programlarda
gotolar.
NOT: Ubuntu 8.10 ve sonraki sürümlerde, -D_FORTIFY_SOURCE=2 varsayılan olarak ayarlanır ve
ne zaman etkinleştirilir -O 2 veya daha yüksek olarak ayarlanır. Bu, ek derleme zamanı sağlar ve
birkaç libc işlevi için çalışma zamanı kontrolleri. Devre dışı bırakmak için şunları belirtin:
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.
-O3 Daha fazlasını optimize edin. -O3 tarafından belirtilen tüm optimizasyonları açar -O2 ve ayrıca açılır
the -finline-fonksiyonlar, -funswitch-döngüler, -föngörücü-ortak, -fgcse-sonra-yeniden yükleme,
-ftree-vektörize, -fvct-maliyet-modeli, -ftree-kısmi-ön ve -fipa-cp-klonu seçenekleri.
-O0 Derleme süresini azaltın ve hata ayıklamanın beklenen sonuçları üretmesini sağlayın. bu
Varsayılan.
-İşletim sistemi Boyut için optimize edin. -İşletim sistemi hepsini etkinleştirir -O2 tipik olarak artmayan optimizasyonlar
kod boyutu. Ayrıca kod boyutunu küçültmek için tasarlanmış daha fazla optimizasyon gerçekleştirir.
-İşletim sistemi aşağıdaki optimizasyon bayraklarını devre dışı bırakır: -falign-fonksiyonları -falign-atlayışlar
-falign-döngüler -falign-etiketler -freorder-blokları -freorder-blokları-ve-bölümü
-fprefetch-loop-dizileri
-Ofast
Katı standartlara uyumu dikkate almayın. -Ofast hepsini etkinleştirir -O3 optimizasyonlar. Ayrıca
tüm standart uyumlu programlar için geçerli olmayan optimizasyonları etkinleştirir. Bilişim Teknoloji
açılır -fffast-matematik ve Fortran'a özgü -fno-koru-parens ve -fstack-dizileri.
-Og Hata ayıklama deneyimini optimize edin. -Og müdahale etmeyen optimizasyonlar sağlar
hata ayıklama. Standart düzenleme için tercih edilen optimizasyon seviyesi olmalıdır.
korurken makul bir optimizasyon seviyesi sunan derleme-hata ayıklama döngüsü
hızlı derleme ve iyi bir hata ayıklama deneyimi.
birden fazla kullanırsanız -O seviye numaraları olan veya olmayan seçenekler, bu tür son seçenek
etkili olan.
Formun seçenekleri -fbayrak makineden bağımsız bayrakları belirtin. Çoğu bayrak her ikisine de sahiptir
olumlu ve olumsuz biçimler; olumsuz biçimi -ffoo is -fno-foo. Aşağıdaki tabloda,
formlardan yalnızca biri listelenir --- genellikle kullandığınız form. diğerini çözebilirsin
ya kaldırarak oluştur yok hayır- veya ekleyerek.
Aşağıdaki seçenekler belirli optimizasyonları kontrol eder. ya tarafından aktive edilirler -O
seçenekler veya olanlarla ilgilidir. Nadir olarak aşağıdaki bayrakları kullanabilirsiniz.
gerçekleştirilecek optimizasyonların "ince ayarının" istendiği durumlar.
-fno-varsayılan-satır içi
Üye işlevlerini yalnızca içeride tanımlandıkları için varsayılan olarak satır içi yapmayın.
sınıf kapsamı (yalnızca C++). Aksi takdirde, belirttiğinizde -O, üye fonksiyonları tanımlandı
sınıf içi kapsam varsayılan olarak satır içi olarak derlenir; yani eklemene gerek yok inline
üye işlev adının önünde.
-fno-erteleme-pop
Her bir işlev çağrısının argümanlarını, o işlev döner dönmez her zaman açın. İçin
bir işlev çağrısından sonra argümanları açması gereken makineler, derleyici normalde
argümanlar, birkaç işlev çağrısı için yığında birikir ve hepsini
bir Zamanlar.
seviyelerde devre dışı bırakıldı -O, -O2, -O3, -İşletim sistemi.
-ileriye-yayılmak
RTL'de bir ileri yayılma geçişi gerçekleştirin. Geçiş, iki talimatı birleştirmeye çalışır
ve sonucun basitleştirilip basitleştirilemeyeceğini kontrol eder. Döngü açma aktifse, iki geçiş
gerçekleştirilir ve ikincisi döngü açıldıktan sonra programlanır.
Bu seçenek, optimizasyon seviyelerinde varsayılan olarak etkindir -O, -O2, -O3, -İşletim sistemi.
-ffp-kontrat=stil
-ffp-kontrat=kapalı kayan noktalı ifade daralmasını devre dışı bırakır. -ffp-kontrat=hızlı
kaynaşmış çarpma-ekleme oluşturma gibi kayan noktalı ifade daralmasını sağlar
hedefin onlar için yerel desteği varsa işlemler. -ffp-kontrat=açık sağlar
dil standardı izin veriyorsa kayan noktalı ifade daralması. Bu
şu anda uygulanmadı ve eşit muamele gördü -ffp-kontrat=kapalı.
Varsayılan -ffp-kontrat=hızlı.
-fomit-frame-işaretçi
Çerçeve işaretçisini, ihtiyaç duymayan işlevler için bir kayıtta tutmayın. Bu
çerçeve işaretçilerini kaydetme, ayarlama ve geri yükleme talimatlarından kaçınır; aynı zamanda bir
birçok fonksiyonda ekstra kayıt mevcuttur. It Ayrıca yapar hata ayıklama imkânsız on
biraz makineleri.
VAX gibi bazı makinelerde bu işaretin hiçbir etkisi yoktur, çünkü standart
çağrı dizisi çerçeve işaretçisini otomatik olarak işler ve hiçbir şey kaydedilmez.
yokmuş gibi davranmak. Makine açıklama makrosu "FRAME_POINTER_REQUIRED"
hedef makinenin bu bayrağı destekleyip desteklemediğini kontrol eder.
GCC sürüm 4.6 ile başlayarak, varsayılan ayar (boyut için optimize edilmediğinde)
32-bit GNU/Linux x86 ve 32-bit Darwin x86 hedefleri olarak değiştirildi
-fomit-frame-işaretçi. Varsayılan geri döndürülebilir -fno-omit-frame-işaretçisi by
ile GCC'yi yapılandırma --enable-frame-işaretçi seçeneğini yapılandırın.
düzeylerde etkin -O, -O2, -O3, -İşletim sistemi.
-foptimize-kardeş-çağrıları
Kardeş ve kuyruk özyinelemeli aramaları optimize edin.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-fno-satır içi
"always_inline" ile işaretlenenler dışında hiçbir işlevi satır içi genişletmeyin
bağlanmak. Bu, optimize edilmediğinde varsayılandır.
Tek işlevler, "noinline" ile işaretlenerek satır içi kullanımdan muaf tutulabilir.
özniteliği.
-finline-küçük-fonksiyonlar
Vücutları beklenenden daha küçük olduğunda işlevleri arayanlara entegre edin
işlev çağrısı kodu (böylece programın genel boyutu küçülür). derleyici
hangi işlevlerin entegre edilmeye değecek kadar basit olduğuna buluşsal olarak karar verir.
Bu taraftan. Bu satır içi oluşturma, satır içi olarak bildirilmemiş olanlar da dahil olmak üzere tüm işlevler için geçerlidir.
Düzeyde etkin -O2.
-findirect-satır içi
Inline ayrıca derleme zamanında bilindiği keşfedilen dolaylı çağrılar sayesinde
önceki satır içi. Bu seçenek, yalnızca satır içi oluşturma açıkken herhangi bir etkiye sahiptir.
tarafından -finline-fonksiyonlar or -finline-küçük-fonksiyonlar seçenekleri.
Düzeyde etkin -O2.
-finline-fonksiyonlar
Satır içi olarak bildirilmeseler bile satır içi için tüm işlevleri göz önünde bulundurun. NS
derleyici, hangi işlevlerin bu şekilde entegre edilmeye değer olduğuna buluşsal olarak karar verir.
Belirli bir işleve yapılan tüm çağrılar entegre edilirse ve işlev bildirilirse
"statik" ise, işlev normalde kendi başına montajcı kodu olarak çıkmaz.
Düzeyde etkin -O3.
-finline-fonksiyonlar-bir kez çağrılır
Arayanlarına satır içi eklemek için bir kez çağrılan tüm "statik" işlevleri düşünün.
"satır içi" olarak işaretlenmezler. Belirli bir işleve bir çağrı entegre edilmişse, o zaman
işlev, kendi başına montajcı kodu olarak çıkmaz.
düzeylerde etkin -O1, -O2, -O3 ve -İşletim sistemi.
-korkuyla satır içi
"always_inline" ile işaretlenmiş satır içi işlevler ve gövdesi şundan daha küçük görünen işlevler
işlev çağrısı, yapmadan önce erken -fprofile-oluşturma enstrümantasyon ve
gerçek satır içi geçiş. Bunu yapmak, profil oluşturmayı önemli ölçüde daha ucuz hale getirir ve genellikle
büyük iç içe sarmalayıcı işlevleri zincirlerine sahip programlarda daha hızlı satır içi.
Varsayılan olarak etkindir.
-fipa-sra
Agregaların prosedürler arası skaler değişimi, kullanılmayan parametrelerin kaldırılması
ve referansla geçirilen parametrelerin, değere göre geçirilen parametrelerle değiştirilmesi.
düzeylerde etkin -O2, -O3 ve -İşletim sistemi.
-finline-limit=n
Varsayılan olarak, GCC satır içi olabilecek işlevlerin boyutunu sınırlar. Bu bayrak izin verir
Bu sınırın kaba kontrolü. n satır içi yazılabilen işlevlerin boyutudur
sözde talimat sayısı.
Satır içi aslında belirtilebilecek bir dizi parametre tarafından kontrol edilir.
kullanarak ayrı ayrı --param isim=değer. -finline-limit=n seçenek bazılarını ayarlar
bu parametreler aşağıdaki gibidir:
max-inline-insns-tek
ayarlandı n/ 2.
max-inline-insns-otomatik
ayarlandı n/ 2.
Satır içi kontrolü kontrol eden bağımsız parametrelerin belgeleri için aşağıya bakın ve
Bu parametrelerin varsayılanları için.
Not: bir değeri olmayabilir -finline-limit bu varsayılan davranışla sonuçlanır.
Not: sözde talimat, bu özel bağlamda, bir özeti temsil eder.
fonksiyonun boyutunun ölçülmesi. Hiçbir şekilde bir montaj sayısını temsil etmez
talimatlar ve bu nedenle tam anlamı bir yayından diğerine değişebilir.
başka.
-fno-satır-içi-dllexport
Bu daha ince taneli bir versiyonu -fkeep-satır içi-işlevlersadece için geçerli olan
"dllexport" özniteliği veya declspec kullanılarak bildirilen işlevler
-fkeep-satır içi-işlevler
C'de, "satır içi" olarak bildirilen "statik" işlevleri nesne dosyasına yayınlayın.
işlev, tüm arayanlarına sıralanmıştır. Bu anahtar etkilemez
GNU C90'daki "harici satır içi" uzantısını kullanan işlevler. C++'da herhangi birini ve hepsini yayınlayın
nesne dosyasına satır içi işlevler.
-fkeep-statik-consts
Optimizasyon açılmadığında "statik const" olarak bildirilen değişkenleri yayar.
değişkenler referans alınmaz.
GCC, bu seçeneği varsayılan olarak etkinleştirir. Derleyiciyi kontrol etmeye zorlamak istiyorsanız, bir
optimizasyonun açık olup olmadığına bakılmaksızın değişkene başvurulursa,
the -fno-saklama-statik-sabitler seçeneği.
-fmerge-sabitleri
Özdeş sabitleri birleştirmeye çalışın (dize sabitleri ve kayan nokta sabitleri)
derleme birimleri arasında.
Bu seçenek, derleyici ve bağlayıcı varsa, optimize edilmiş derleme için varsayılandır.
destekleyin. Kullanmak -fno-birleştirme-sabitleri Bu davranışı engellemek için
düzeylerde etkin -O, -O2, -O3, -İşletim sistemi.
-fmerge-all-sabitleri
Özdeş sabitleri ve özdeş değişkenleri birleştirmeye çalışın.
Bu seçenek şu anlama gelir: -fmerge-sabitleri. Ek olarak -fmerge-sabitleri Re-Tweet
örneğin sabit başlatılmış dizileri veya başlatılmış sabit değişkenleri bile dikkate alır.
integral veya kayan nokta türleri. C veya C++ gibi diller her bir değişkeni gerektirir,
farklı olması için özyinelemeli çağrılarda aynı değişkenin birden çok örneğini dahil etmek
konumlar, bu nedenle bu seçeneğin kullanılması uygun olmayan davranışa neden olur.
-fmodulo-zamanlanmış
İlk zamanlama geçişinden hemen önce salınım modulo planlamasını gerçekleştirin. Bu
pass, en içteki döngülere bakar ve farklı üst üste binerek talimatlarını yeniden düzenler.
yineleme.
-fmodulo-schedule-allow-regmoves
İzin verilen kayıt hareketleriyle daha agresif SMS tabanlı modülo planlama gerçekleştirin. Tarafından
bu bayrağın ayarlanması, belirli bağımlılık önleme kenarları silinir ve bu da
yaşam aralığı analizine dayalı reg-hareket üretimi. Bu seçenek etkilidir
sadece -fmodulo-zamanlanmış sağladı.
-fno-dal-sayısı-reg
Bir sayım kaydında "azaltma ve dallandırma" talimatlarını kullanmayın, bunun yerine
bir kaydı azaltan bir talimat dizisi oluşturun, onunla karşılaştırın
sıfır, ardından sonuca göre dallanır. Bu seçenek yalnızca
x86, PowerPC, IA-64 ve
S / 390.
Varsayılan -fbranch-count-reg.
-fno-işlev-cse
İşlev adreslerini kayıtlara koymayın; çağıran her talimatı yapın
sabit işlev, işlevin adresini açıkça içerir.
Bu seçenek, kodun daha az verimli olmasına neden olur, ancak kodu değiştiren bazı garip saldırılar
assembler çıktısı, bu seçenek kullanıldığında gerçekleştirilen optimizasyonlarla karıştırılabilir.
kullanılmamış.
Varsayılan -fonksiyon-cse
-fno-sıfır-başlatıldı-in-bss
Hedef bir BSS bölümünü destekliyorsa, GCC varsayılan olarak şu değişkenleri koyar:
BSS'de sıfıra başlatıldı. Bu, ortaya çıkan kodda yerden tasarruf sağlayabilir.
Bazı programlar açıkça değişkenlere dayandığından bu seçenek bu davranışı kapatır.
veri bölümüne gitmek --- örneğin, ortaya çıkan yürütülebilir dosyanın bulabilmesi için
ve/veya buna dayalı varsayımlarda bulunun.
Varsayılan -fzero-başlatılmış-in-bss.
-fçamurluk -fçamurluk -fmudflapir
Onu destekleyen ön uçlar için (C ve C++), tüm riskli işaretçileri/dizileri enstrümantal edin
referans kaldırma işlemleri, bazı standart kitaplık dize/yığın işlevleri ve bazı diğer
aralık/geçerlilik testleri ile ilişkili yapılar. Bu şekilde enstrümanlı modüller olmalıdır
arabellek taşmalarına, geçersiz yığın kullanımına ve diğer bazı C/C++ sınıflarına karşı bağışık
programlama hataları Enstrümantasyon, ayrı bir çalışma zamanı kitaplığına dayanır
(libmudflap), eğer bir programa bağlanırsa -fçamurluk bağlantı zamanında verilir. Çalıştırmak-
enstrümanlı programın zaman davranışı tarafından kontrol edilir ÇAMURLUK_SEÇENEKLERİ
Çevre değişkeni. Seçenekleri için bkz. "env MUDFLAP_OPTIONS=-help a.out".
kullanım -fçamurluk yerine -fçamurluk programınız çoklu ise derlemek ve bağlantı kurmak için
dişli. Kullanmak -fmudflapir, ek olarak -fçamurluk or -fçamurluk, Eğer
enstrümantasyon işaretçi okumalarını görmezden gelmelidir. Bu, daha az enstrümantasyon üretir (ve
bu nedenle daha hızlı yürütme) ve yine de doğrudan belleğe karşı bir miktar koruma sağlar
yazmaları bozar, ancak hatalı okuma verilerinin bir program içinde yayılmasını sağlar.
-fthread-atlar
Bir atlamanın başka bir yere atlayıp atlamadığını kontrol eden optimizasyonları gerçekleştirin.
ilki tarafından kapsanan karşılaştırma bulunur. Eğer öyleyse, ilk dal şuraya yönlendirilir:
ikinci şubenin varış yeri veya hemen ardından gelen bir nokta,
koşulun doğru veya yanlış olduğunun bilinmesine bağlı olarak.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-fsplit-geniş-türler
32 bit'te "uzun uzun" gibi birden çok kaydı kaplayan bir tür kullanırken
sistemi, kayıtları birbirinden ayırın ve bağımsız olarak tahsis edin. Bu normalde
bu türler için daha iyi kod oluşturur, ancak hata ayıklamayı daha zor hale getirebilir.
düzeylerde etkin -O, -O2, -O3, -İşletim sistemi.
-fcse-takip-atlayışları
Ortak alt ifade eliminasyonunda (CSE), aşağıdaki durumlarda atlama talimatlarını tarayın:
atlama hedefine başka bir yoldan ulaşılmaz. Örneğin, ÖAM karşılaştığında
"else" yan tümcesine sahip bir "if" ifadesi, koşul gerçekleştiğinde ÖAM atlamayı takip eder.
test yanlış.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-fcse-atlama-blokları
Bu benzer -fcse-takip-atlayışları, ancak ÖAM'nin şu atlamaları takip etmesine neden olur:
koşullu olarak blokları atlayın. ÖAM, no ile basit bir "if" ifadesi ile karşılaştığında
başka cümle, -fcse-atlama-blokları CSE'nin vücudun etrafındaki sıçramayı takip etmesine neden olur
"Eğer".
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-frerun-cse-sonrası döngü
Döngü optimizasyonları gerçekleştirildikten sonra ortak alt ifade eliminasyonunu yeniden çalıştırın.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-fgcse
Genel bir ortak alt ifade eleme geçişi gerçekleştirin. Bu geçiş de gerçekleştirir
küresel sabit ve kopya yayılımı.
Not: Bir GCC uzantısı olan hesaplanmış goto'ları kullanarak bir programı derlerken,
genel ortak alt ifade eliminasyonunu devre dışı bırakırsanız daha iyi çalışma zamanı performansı
ekleyerek geçmek -fno-gcse komut satırına.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-fgcse-lm
Ne zaman -fgcse-lm etkinleştirildiğinde, küresel ortak alt ifade ortadan kaldırma girişimleri hareket etmeye çalışır.
sadece depolar tarafından öldürülen yükler kendi içlerine. Bu, aşağıdakileri içeren bir döngüye izin verir:
döngü dışında bir yüke değiştirilecek yükleme/saklama sırası ve içinde bir kopyalama/saklama
döngü.
Varsayılan olarak etkinleştirildiğinde -fgcse etkin.
-fgcse-sm
Ne zaman -fgcse-sm etkinleştirildiğinde, genel ortak kullanımdan sonra bir mağaza hareketi geçişi çalıştırılır.
alt ifade eliminasyonu. Bu geçiş, mağazaları döngülerin dışına taşımaya çalışır. Kullanıldığında
ile birlikte -fgcse-lm, bir yükleme/depolama sırası içeren döngüler değiştirilebilir
döngüden önce bir yüke ve döngüden sonra bir depoya.
Herhangi bir optimizasyon düzeyinde etkinleştirilmedi.
-fgcse-las
Ne zaman -fgcse-las etkinleştirildiğinde, genel ortak alt ifade eleme geçişi
aynı bellek konumuna depolandıktan sonra gelen fazla yükleri ortadan kaldırır (her ikisi de
kısmi ve tam işten çıkarmalar).
Herhangi bir optimizasyon düzeyinde etkinleştirilmedi.
-fgcse-sonra-yeniden yükleme
Ne zaman -fgcse-sonra-yeniden yükleme etkinleştirilirse, fazlalık bir yük eleme geçişi gerçekleştirilir
yeniden yükledikten sonra. Bu geçişin amacı, gereksiz dökülmeleri temizlemektir.
-fagresif döngü optimizasyonları
Bu seçenek, döngü optimize ediciye, sınırları türetmek için dil kısıtlamalarını kullanmasını söyler.
bir döngünün yineleme sayısı. Bu, döngü kodunun çağırmadığını varsayar.
örneğin imzalı tamsayı taşmalarına veya sınırların dışına çıkmasına neden olarak tanımsız davranış
dizi erişimleri. Bir döngünün yineleme sayısı için sınırlar, rehberlik etmek için kullanılır.
döngü açma ve soyma ve döngü çıkış testi optimizasyonları. Bu seçenek etkinleştirildi
varsayılan olarak.
-funsafe-loop optimizasyonları
Bu seçenek, döngü optimize ediciye döngü indekslerinin taşmadığını varsaymasını söyler ve
önemsiz olmayan çıkış koşuluna sahip döngüler sonsuz değildir. Bu, daha geniş bir
Döngü optimize edicinin kendisi bunların kanıtlayamasa bile döngü optimizasyonları aralığı
varsayımlar geçerlidir. Eğer kullanırsan -Wunsafe-loop optimizasyonları, derleyici sizi uyarır
eğer bu tür bir döngü bulursa.
-fçapraz atlama
Çapraz atlama dönüşümü gerçekleştirin. Bu dönüşüm eşdeğer kodu birleştirir ve
kod boyutunu kaydeder. Ortaya çıkan kod, çapraz olmadan daha iyi performans gösterebilir veya vermeyebilir.
atlama.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-fauto-inc-dec
Adres artışlarını veya azalışlarını bellek erişimleriyle birleştirin. Bu geçiş
bunu destekleyecek talimatları olmayan mimarilerde her zaman atlanır.
Varsayılan olarak etkin -O ve bunu destekleyen mimarilerde daha yüksek.
-fdce
RTL'de ölü kod eleme (DCE) gerçekleştirin. Varsayılan olarak etkin -O Ve daha yüksek.
-fdse
RTL'de ölü depo eleme (DSE) gerçekleştirin. Varsayılan olarak etkin -O Ve daha yüksek.
-fif-dönüşüm
Koşullu atlamaları dalsız eşdeğerlere dönüştürmeye çalışın. Bu içerir
koşullu hareketlerin, min, max, set bayraklarının ve abs talimatlarının ve bazı püf noktalarının kullanımı
standart aritmetik ile yapılabilir. Olduğu yerde cipslerde koşullu yürütmenin kullanılması
kullanılabilir "if-conversion2" tarafından kontrol edilir.
düzeylerde etkin -O, -O2, -O3, -İşletim sistemi.
-fif-dönüşüm2
Koşullu atlamaları dönüştürmek için koşullu yürütmeyi (varsa) kullanın.
dalsız eşdeğerler.
düzeylerde etkin -O, -O2, -O3, -İşletim sistemi.
-fdelete-null-işaretçi-kontrolleri
Programların boş göstericilere güvenli bir şekilde başvuruyu kaldıramayacağını ve hiçbir kod veya verinin olmadığını varsayın.
eleman orada bulunur. Bu, basit sabit katlama optimizasyonları sağlar
optimizasyon seviyeleri. Ek olarak, GCC'deki diğer optimizasyon geçişleri bu bayrağı aşağıdakileri yapmak için kullanır:
boş işaretçiler için gereksiz kontrolleri ortadan kaldıran global veri akışı analizlerini kontrol edin;
bunlar, bir işaretçi zaten başvurudan çıkarıldıktan sonra işaretlenirse,
Boş olamaz.
Ancak bazı ortamlarda bu varsayımın doğru olmadığını unutmayın. Kullanmak
-fno-delete-null-işaretçi-kontrolleri bağlı programlar için bu optimizasyonu devre dışı bırakmak için
bu davranış üzerine.
Bazı hedefler, özellikle gömülü olanlar, bu seçeneği her düzeyde devre dışı bırakır. Aksi halde
tüm seviyelerde etkindir: -O0, -O1, -O2, -O3, -İşletim sistemi. Bilgileri kullanan geçişler
farklı optimizasyon seviyelerinde bağımsız olarak etkinleştirilir.
-fsanallaştırma
Çağrıları yönlendirmek için çağrıları sanal işlevlere dönüştürmeyi deneyin. Bu hem yapılır
dolaylı satır içi oluşturmanın bir parçası olarak bir prosedür dahilinde ve prosedürler arası olarak
("-findirect-inlineing") ve prosedürler arası sabit yayılım (-fipa-cp). Etkinleştirilmiş
seviyelerde -O2, -O3, -İşletim sistemi.
-çok pahalı-optimizasyonlar
Nispeten pahalı olan bir dizi küçük optimizasyon gerçekleştirin.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-Ücretsiz
Gereksiz uzantı talimatlarını kaldırmayı deneyin. Bu özellikle aşağıdakiler için yararlıdır:
86-bit kayıtlarda örtük olarak sıfır genişleyen x64-64 mimarisi
alt 32-bit yarısına yazma.
Düzeylerde x86 için etkinleştirildi -O2, -O3.
-foptimize-kayıt-taşı
-fregmove
Kayıt numaralarını hareket talimatlarında ve diğerlerinin işlenenleri olarak yeniden atamaya çalışmak
kayıt bağlama miktarını en üst düzeye çıkarmak için basit talimatlar. Bu
özellikle iki işlenen talimatları olan makinelerde yararlıdır.
not -fregmove ve -foptimize-kayıt-taşı aynı optimizasyondur.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-fira-algoritma=algoritma
Entegre kayıt ayırıcı için belirtilen renklendirme algoritmasını kullanın. NS
algoritma argüman olabilir öncelikChow'un öncelikli renklendirmesini belirten veya CB,
hangi Chaitin-Briggs renklendirmesini belirtir. Chaitin-Briggs renklendirme uygulanmadı
tüm mimariler için, ancak onu destekleyen hedefler için varsayılandır
çünkü daha iyi kod üretir.
-fira-bölge=bölge
Entegre kayıt ayırıcı için belirtilen bölgeleri kullanın. NS bölge tartışma
aşağıdakilerden biri olmalıdır:
herşey Tüm döngüleri kayıt ayırma bölgeleri olarak kullanın. Bu, aşağıdakiler için en iyi sonuçları verebilir:
küçük ve/veya düzensiz kayıt seti olan makineler.
karışık
Bölgeler olarak küçük kayıt basıncına sahip döngüler hariç tüm döngüleri kullanın. Bu
value genellikle çoğu durumda ve çoğu mimari için en iyi sonuçları verir ve
hız optimizasyonu ile derlenirken varsayılan olarak etkindir (-O, -O2, ...).
bir Tüm işlevleri tek bir bölge olarak kullanın. Bu genellikle en küçük kodla sonuçlanır
boyutundadır ve varsayılan olarak aşağıdakiler için etkindir: -İşletim sistemi or -O0.
-fira-kaldırma-basıncı
Kaldırma kararları için kod kaldırma geçişindeki kayıt basıncını değerlendirmek için IRA'yı kullanın
ifade. Bu seçenek genellikle daha küçük kodla sonuçlanır, ancak kodu yavaşlatabilir.
derleyici aşağı.
Bu seçenek düzeyde etkinleştirilir -İşletim sistemi tüm hedefler için.
-fira-döngü-basıncı
Döngü değişmezlerini taşıma kararları için döngülerdeki kayıt basıncını değerlendirmek için IRA'yı kullanın.
Bu seçenek, genellikle aşağıdakilere sahip makinelerde daha hızlı ve daha küçük kod üretilmesiyle sonuçlanır.
büyük kayıt dosyaları (>= 32 kayıt), ancak derleyiciyi yavaşlatabilir.
Bu seçenek düzeyde etkinleştirilir -O3 bazı hedefler için.
-fno-ira-paylaş-kaydet yuvaları
Çağrıda kullanılan sabit kayıtları kaydetmek için kullanılan yığın yuvalarının paylaşımını devre dışı bırakın
bir arama. Her sabit yazmaç ayrı bir yığın yuvası alır ve sonuç olarak işlev yığını
çerçeveler daha büyüktür.
-fno-ira-share-spill-yuvaları
Sahte kayıtlar için ayrılan yığın yuvalarının paylaşımını devre dışı bırakın. Her sözde kayıt
sabit bir kayıt almayan, ayrı bir yığın yuvası alır ve sonuç olarak işlev
yığın çerçeveleri daha büyüktür.
-fira-ayrıntılı=n
Entegre kayıt ayırıcı için döküm dosyasının ayrıntı düzeyini kontrol edin. NS
varsayılan değer 5'tir. n 10'a eşit veya büyükse döküm çıktısı gönderilir
ile aynı formatı kullanarak stderr'e n eksi 10.
-fgecikmeli-dal
Hedef makine için destekleniyorsa, istismar için talimatları yeniden sıralamayı deneyin.
gecikmeli şube talimatlarından sonra kullanılabilir talimat yuvaları.
düzeylerde etkin -O, -O2, -O3, -İşletim sistemi.
-fschedule-insns
Hedef makine için destekleniyorsa, ortadan kaldırmak için talimatları yeniden sıralamayı deneyin.
gerekli verilerin mevcut olmaması nedeniyle yürütme durakları. Bu, makinelere yardımcı olur
yavaş kayan nokta veya bellek yükleme talimatlarına sahip olmak, diğer talimatların
yük veya kayan nokta talimatının sonucu gerekli olana kadar verilir.
düzeylerde etkin -O2, -O3.
-fschedule-insns2
Benzer -fschedule-insns, ancak ek bir talimat planlaması geçişi ister
Kayıt tahsisi yapıldıktan sonra. Bu, özellikle bir
nispeten az sayıda kayıt ve bellek yükleme talimatlarının
bir döngü.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-fno-zamanlanmış-ara blok
Talimatları temel bloklar arasında programlamayın. Bu normalde varsayılan olarak etkindir
kayıt tahsisinden önce zamanlama yaparken, yani -fschedule-insns ya da -O2 or
daha.
-fno-zamanlanmış-spec
Yüksüz talimatların spekülatif hareketine izin vermeyin. Bu normalde şu şekilde etkinleştirilir:
kayıt tahsisinden önce zamanlama yaparken varsayılan, yani -fschedule-insns ya da
-O2 veya daha yüksek.
-fsched-basınç
Kayıt tahsisinden önce kayıt basıncına duyarlı insn zamanlamasını etkinleştirin. Bu
yalnızca kayıt tahsisi etkinleştirilmeden önce zamanlama yapıldığında anlamlıdır, yani
-fschedule-insns ya da -O2 veya daha yüksek. Bu seçeneğin kullanılması, oluşturulan
sayının üzerindeki yazmaç basıncının artmasını önleyerek kodlayın ve boyutunu küçültün
mevcut sabit kayıtların ve kayıt tahsisinde müteakip dökülmelerin.
-fsched-spec-load
Bazı yükleme talimatlarının spekülatif hareketine izin verin. Bu sadece ne zaman mantıklı olur
kayıt tahsisinden önce zamanlama, yani -fschedule-insns ya da -O2 veya daha yüksek.
-fsched-spec-load-tehlikeli
Daha fazla yükleme talimatının spekülatif hareketine izin verin. Bu sadece ne zaman mantıklı olur
kayıt tahsisinden önce zamanlama, yani -fschedule-insns ya da -O2 veya daha yüksek.
-fsched-durmuş-insns
-fsched-durdu-insns=n
Durdurulanlar kuyruğundan kaç tane insn'nin (varsa) zamanından önce taşınabileceğini tanımlayın
ikinci zamanlama geçişi sırasında hazır listesine girer. -fno-zamanlanmış-durmuş-insns
hiçbir insn'in zamanından önce taşınmadığı anlamına gelir, -fsched-durdurulmuş-insns=0 yok demek
kaç sıraya alınmış insn'nin zamanından önce taşınabileceğine ilişkin sınır. -fsched-durmuş-insns
bir değer olmadan eşdeğerdir -fsched-durdurulmuş-insns=1.
-fsched-durdu-insns-dep
-fsched-durdu-insns-dep=n
Durmuş bir insn'ye bağımlılık için kaç tane insn grubunun (döngü) incelendiğini tanımlayın
bu, durmuş insn'lerin kuyruğundan erken çıkarılmaya adaydır. bu var
yalnızca ikinci zamanlama geçişi sırasında ve yalnızca -fsched-durmuş-insns is
Kullanılmış. -fno-programlı-durdu-insns-dep eşdeğerdir -fsched-staled-insns-dep=0.
-fsched-durdu-insns-dep bir değer olmadan eşdeğerdir
-fsched-staled-insns-dep=1.
-fsched2-use-superblock'lar
Kayıt tahsisinden sonra zamanlama yaparken, süper blok zamanlamayı kullanın. Bu izin verir
temel blok sınırları boyunca hareket, daha hızlı programlarla sonuçlanır. Bu seçenek
deneysel, GCC tarafından kullanılan tüm makine açıklamaları CPU'yu yeterince yakından modellemediğinden
Algoritmadan güvenilir olmayan sonuçlardan kaçınmak için.
Bu, yalnızca kayıt tahsisinden sonra, yani
-fschedule-insns2 ya da -O2 veya daha yüksek.
-fsched-group-sezgisel
Zamanlayıcıda grup buluşsal yöntemini etkinleştirin. Bu buluşsal yöntem, talimattan yanadır
bu bir zamanlama grubuna aittir. Bu, zamanlama yapıldığında varsayılan olarak etkindir.
etkin, yani -fschedule-insns or -fschedule-insns2 ya da -O2 veya daha yüksek.
-fsched-kritik-yol-sezgisel
Zamanlayıcıda kritik yol buluşsal yöntemini etkinleştirin. Bu buluşsal iyilik
kritik yoldaki talimatlar. Bu, zamanlama yapıldığında varsayılan olarak etkindir.
etkin, yani -fschedule-insns or -fschedule-insns2 ya da -O2 veya daha yüksek.
-fsched-spec-insn-sezgisel
Planlayıcıda spekülatif talimat buluşsal yöntemini etkinleştirin. Bu buluşsal iyilik
daha fazla bağımlılık zayıflığı olan spekülatif talimatlar. Bu varsayılan olarak etkindir
zamanlama etkinleştirildiğinde, yani -fschedule-insns or -fschedule-insns2 ya da -O2
veya daha yüksek.
-fsched-rank-sezgisel
Zamanlayıcıda sıra buluşsal yöntemini etkinleştirin. Bu buluşsal yöntem, talimattan yanadır
daha büyük boyut veya frekansa sahip bir temel bloğa ait. Bu varsayılan olarak etkindir
zamanlama etkinleştirildiğinde, yani -fschedule-insns or -fschedule-insns2 ya da -O2
veya daha yüksek.
-fsched-son-insn-sezgisel
Zamanlayıcıda son talimat buluşsal yöntemini etkinleştirin. Bu buluşsal yöntem,
programlanan son talimata daha az bağımlı olan talimat. Bu etkinleştirildi
zamanlama etkinleştirildiğinde varsayılan olarak, yani -fschedule-insns or -fschedule-insns2
ya da -O2 veya daha yüksek.
-fsched-dep-count-sezgisel
Zamanlayıcıda bağımlı sayım buluşsal yöntemini etkinleştirin. Bu buluşsal yöntem,
bağlı olarak daha fazla talimat içeren talimat. Bu varsayılan olarak etkindir
zamanlama etkinleştirildiğinde, yani -fschedule-insns or -fschedule-insns2 ya da -O2
veya daha yüksek.
-freschedule-modulo-programlanmış-döngüler
Modulo çizelgeleme, geleneksel çizelgelemeden önce gerçekleştirilir. Bir döngü modulo ise
planlanmışsa, daha sonraki zamanlama geçişleri zamanlamasını değiştirebilir. için bu seçeneği kullanın
bu davranışı kontrol et.
-fseçici-zamanlama
Seçici zamanlama algoritmasını kullanarak talimatları planlayın. Seçici zamanlama çalıştırmaları
ilk zamanlayıcı geçişi yerine.
-fseçici-zamanlama2
Seçici zamanlama algoritmasını kullanarak talimatları planlayın. Seçici zamanlama çalıştırmaları
ikinci zamanlayıcı geçişi yerine.
-fsel-planlama-boru hattı
Seçici zamanlama sırasında en içteki döngülerin yazılım ardışık düzenini etkinleştirin. Bu
biri olmadıkça seçeneğin etkisi yoktur. -fseçici-zamanlama or -fseçici-zamanlama2
açık.
-fsel-planlanmış-boru hattı-dış döngüler
Seçici zamanlama sırasında boru hattı döngüleri oluştururken, ayrıca boru hattı dış döngüleri. Bu
seçeneği olmadığı sürece hiçbir etkisi yoktur. -fsel-planlama-boru hattı açık.
-fshrink-sarma
İşlev önsözlerini yalnızca işlevin ihtiyaç duyan bölümlerinden önce yayınlayın.
fonksiyonun üst kısmı. Bu bayrak varsayılan olarak şurada etkindir: -O Ve daha yüksek.
-fcaller-kaydeder
İşlev çağrıları tarafından engellenen kayıtlara değerlerin tahsis edilmesini sağlar.
bu tür çağrıların etrafındaki kayıtları kaydetmek ve geri yüklemek için ekstra talimatlar yayar. Çok
tahsis, yalnızca daha iyi kodla sonuçlanıyor gibi göründüğünde yapılır.
Bu seçenek, genellikle belirli makinelerde varsayılan olarak her zaman etkindir.
bunun yerine kullanılacak çağrı korumalı kayıt yok.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-fcombine-yığın ayarlamaları
Yığın ayarlamalarını (itme ve patlatma) ve yığın bellek referanslarını izler ve ardından dener
onları birleştirmenin yollarını bulmak için.
Varsayılan olarak etkin -O1 Ve daha yüksek.
-fconserve-yığın
Yığın kullanımını en aza indirmeye çalışın. Derleyici daha az yığın alanı kullanmaya çalışır, hatta
eğer bu programı yavaşlatırsa. Bu seçenek, büyük yığın çerçeve
parametre 100 ve büyük yığın-çerçeve büyümesi parametresi 400.
-ftree-reassoc
Ağaçlarda yeniden ilişkilendirme gerçekleştirin. Bu bayrak varsayılan olarak şurada etkindir: -O Ve daha yüksek.
-ftree-ön
Ağaçlarda kısmi artıklık eleme (PRE) gerçekleştirin. Bu bayrak tarafından etkinleştirildi
varsayılan -O2 ve -O3.
-ftree-kısmi-ön
Kısmi fazlalık gidermeyi (PRE) daha agresif hale getirin. Bu bayrak tarafından etkinleştirildi
varsayılan -O3.
-ftree-forwprop
Ağaçlarda ileriye doğru yayılım yapın. Bu bayrak varsayılan olarak şurada etkindir: -O ve
daha.
-ağaçsız
Ağaçlarda tam fazlalık eleme (FRE) gerçekleştirin. FRE ve arasındaki fark
PRE, FRE'nin yalnızca şuna giden tüm yollarda hesaplanan ifadeleri dikkate almasıdır.
gereksiz hesaplama Bu analiz PRE'den daha hızlıdır, ancak daha az
işten çıkarmalar. Bu bayrak varsayılan olarak şurada etkindir: -O Ve daha yüksek.
-ftree-phiprop
Ağaçlarda koşullu işaretçilerden yük kaldırma gerçekleştirin. Bu geçiş şu şekilde etkinleştirilir:
varsayılan -O Ve daha yüksek.
-fhoist-bitişik-yükler
Yükler, bir if-then-else'nin her iki dalından spekülatif olarak yükleri kaldırın.
Aynı yapıdaki bitişik konumlar ve hedef mimarinin koşullu bir
hareket talimatı. Bu bayrak varsayılan olarak şurada etkindir: -O2 Ve daha yüksek.
-ftree-kopya-prop
Ağaçlarda kopya yayılımı gerçekleştirin. Bu geçiş, gereksiz kopyalama işlemlerini ortadan kaldırır.
Bu bayrak varsayılan olarak şurada etkindir: -O Ve daha yüksek.
-fipa-saf-const
Hangi fonksiyonların saf veya sabit olduğunu keşfedin. Varsayılan olarak etkin -O Ve daha yüksek.
-fipa-referans
Hangi statik değişkenlerin derleme biriminden kaçmadığını keşfedin. tarafından etkinleştirildi
varsayılan -O Ve daha yüksek.
-fipa-pta
Prosedürler arası işaretçi analizi ve prosedürler arası değişiklik yapın ve
referans analizi. Bu seçenek, aşırı bellek ve derleme zamanı kullanımına neden olabilir.
büyük derleme birimleri. Herhangi bir optimizasyon seviyesinde varsayılan olarak etkin değildir.
-fipa-profil
Prosedürler arası profil yayılımı gerçekleştirin. Sadece soğuktan çağrılan fonksiyonlar
fonksiyonlar soğuk olarak işaretlenir. Ayrıca bir kez yürütülen işlevler ("soğuk",
"noreturn", statik oluşturucular veya yıkıcılar) tanımlanır. Soğuk fonksiyonlar ve
bir kez yürütülen fonksiyonların daha az parçası daha sonra boyut için optimize edilir. tarafından etkinleştirildi
varsayılan -O Ve daha yüksek.
-fipa-cp
Prosedürler arası sabit yayılım gerçekleştirin. Bu optimizasyon programı analiz eder
fonksiyonlara iletilen değerlerin ne zaman sabit olduğunu belirlemek ve ardından optimize etmek için
buna göre. Bu optimizasyon, aşağıdaki durumlarda performansı önemli ölçüde artırabilir:
uygulama, işlevlere geçirilen sabitlere sahiptir. Bu bayrak varsayılan olarak şurada etkindir:
-O2, -İşletim sistemi ve -O3.
-fipa-cp-klonu
Prosedürler arası sabit yayılımı daha güçlü hale getirmek için fonksiyon klonlama gerçekleştirin. Ne zaman
etkinleştirildiğinde, prosedürler arası sabit yayılım, işlev klonlamayı şu durumlarda gerçekleştirir:
harici olarak görülebilen işlev, sabit argümanlarla çağrılabilir. Çünkü bu
optimizasyon, birden çok işlev kopyası oluşturabilir, önemli ölçüde artırabilir
kod boyutu (bkz. --param ipcp-birim-büyümesi=değer). Bu bayrak varsayılan olarak şurada etkindir:
-O3.
-ftree-lavabo
Ağaçlarda ileriye doğru depolama hareketi yapın. Bu bayrak varsayılan olarak şurada etkindir: -O ve
daha.
-ftree-bit-ccp
Ağaçlarda seyrek koşullu bit sabit yayılımı gerçekleştir ve işaretçiyi yay
hizalama bilgileri. Bu geçiş yalnızca yerel skaler değişkenler üzerinde çalışır ve
varsayılan olarak etkin -O Ve daha yüksek. Bunu gerektirir -ftree-ccp etkin.
-ftree-ccp
Ağaçlarda seyrek koşullu sabit yayılım (CCP) gerçekleştirin. Bu geçiş sadece
yerel skaler değişkenler üzerinde çalışır ve varsayılan olarak şurada etkindir: -O Ve daha yüksek.
-ftree-switch-dönüşüm
Bir anahtardaki basit başlatmaların, bir anahtardan başlatmalara dönüştürülmesini gerçekleştirin.
skaler dizi. Bu bayrak varsayılan olarak şurada etkindir: -O2 Ve daha yüksek.
-ftree-tail-birleştirme
Aynı kod dizilerini arayın. Bulunduğunda, birini diğerine atlayarak değiştirin.
Bu optimizasyon, kuyruk birleştirme veya çapraz atlama olarak bilinir. Bu bayrak tarafından etkinleştirildi
varsayılan -O2 Ve daha yüksek. Bu geçişteki derleme süresi aşağıdakiler kullanılarak sınırlandırılabilir:
max-tail-merge-karşılaştırmalar parametre ve max-tail-merge-yinelemeler parametre.
-ftree-dce
Ağaçlarda ölü kod eleme (DCE) gerçekleştirin. Bu bayrak varsayılan olarak şurada etkindir: -O
Ve daha yüksek.
-ftree-yerleşik-çağrı-dce
Yerleşik işlevlere yapılan çağrılar için koşullu ölü kod eleme (DCE) gerçekleştirin.
"errno" ayarlayabilir, ancak aksi takdirde yan etkisi yoktur. Bu bayrak varsayılan olarak etkindir
at -O2 ve daha yüksek ise -İşletim sistemi da belirtilmemiştir.
-ftree-dominator-seçenekleri
Çeşitli basit skaler temizlemeler gerçekleştirin (sabit/kopya yayılımı, artıklık
baskın olana dayalı eleme, aralık yayılımı ve ifade sadeleştirmesi)
ağaç geçişi. Bu aynı zamanda atlamalı iplik geçirme işlemini de gerçekleştirir (atlamaları atlamalara azaltmak için). Bu
bayrak varsayılan olarak şurada etkindir: -O Ve daha yüksek.
-ftree-dse
Ağaçlarda ölü depo eleme (DSE) gerçekleştirin. Ölü bir mağaza, bir belleğe bir mağazadır
daha sonra herhangi bir araya giren yük olmadan başka bir mağaza tarafından üzerine yazılan konum. İçinde
bu durumda önceki mağaza silinebilir. Bu bayrak varsayılan olarak şurada etkindir: -O ve
daha.
-ftree-ch
Ağaçlarda döngü başlığı kopyalama gerçekleştirin. Arttığı için faydalıdır.
kod hareketi optimizasyonlarının etkinliği. Ayrıca bir atlama kaydeder. Bu bayrak
varsayılan olarak etkin -O Ve daha yüksek. için etkinleştirilmedi -İşletim sistemi, çünkü genellikle
kod boyutunu artırır.
-ftree-döngüsü optimizasyonu
Ağaçlarda döngü optimizasyonları gerçekleştirin. Bu bayrak varsayılan olarak şurada etkindir: -O ve
daha.
-ftree-döngü-doğrusal
Ağaç üzerinde döngü değişim dönüşümleri gerçekleştirin. İle aynı -floop-değişimi. Kullanmak
bu kod dönüşümü, GCC ile yapılandırılmalıdır --ppl ile ve -- ile-cloog için
Grafit döngü dönüştürme altyapısını etkinleştirin.
-floop-değişimi
Döngüler üzerinde döngü değişim dönüşümleri gerçekleştirin. İç içe geçmiş iki döngünün değiştirilmesi
iç ve dış döngüleri değiştirir. Örneğin, şöyle bir döngü verilir:
DO J = 1, M
DO ben = 1, N
A(J, ben) = A(J, ben) * C
SON
SON
döngü değişimi, döngüyü yazılmış gibi dönüştürür:
DO ben = 1, N
DO J = 1, M
A(J, ben) = A(J, ben) * C
SON
SON
"N" önbelleklerden daha büyük olduğunda faydalı olabilir, çünkü Fortran'da
Bir dizinin öğeleri, sütuna göre bitişik olarak bellekte saklanır ve orijinal
döngü satırlar üzerinde yinelenir ve potansiyel olarak her erişimde bir önbellek kaçırması oluşturur. Bu
optimizasyon, GCC tarafından desteklenen tüm diller için geçerlidir ve bunlarla sınırlı değildir.
Fortran. Bu kod dönüşümünü kullanmak için GCC'nin şu şekilde yapılandırılması gerekir: --ppl ile
ve -- ile-cloog Grafit döngü dönüşüm altyapısını etkinleştirmek için.
-floop-şerit-mayın
Döngüler üzerinde döngü şerit madenciliği dönüşümleri gerçekleştirin. Şerit madenciliği bir döngüyü ikiye böler
iki iç içe döngü. Dış halka, şerit boyutuna eşit adımlara ve iç halkaya sahiptir.
döngü, bir şerit içinde orijinal döngünün adımlarına sahiptir. Şerit uzunluğu değiştirilebilir
ile döngü-blok-kiremit boyutu parametre. Örneğin, şöyle bir döngü verilir:
DO ben = 1, N
A(I) = A(I) + C
SON
döngü şerit madenciliği, döngüyü yazılmış gibi dönüştürür:
DO II = 1, N, 51
DO I = II, dk (II + 50, N)
A(I) = A(I) + C
SON
SON
Bu optimizasyon, GCC tarafından desteklenen tüm diller için geçerlidir ve bunlarla sınırlı değildir.
Fortran. Bu kod dönüşümünü kullanmak için GCC'nin şu şekilde yapılandırılması gerekir: --ppl ile
ve -- ile-cloog Grafit döngü dönüşüm altyapısını etkinleştirmek için.
-floop-blok
Döngüler üzerinde döngü engelleme dönüşümleri gerçekleştirin. Şerit mayınlarını bloke etmek, her döngüde
eleman döngülerinin bellek erişimleri önbelleklerin içine sığacak şekilde döngü yuvası. NS
şerit uzunluğu kullanılarak değiştirilebilir döngü-blok-kiremit boyutu parametre. Örneğin,
şöyle bir döngü verildi:
DO ben = 1, N
DO J = 1, M
A(J, I) = B(I) + C(J)
SON
SON
döngü engelleme, döngüyü yazılmış gibi dönüştürür:
DO II = 1, N, 51
DO JJ = 1, E, 51
DO I = II, dk (II + 50, N)
DO J = JJ, dk (JJ + 50, M)
A(J, I) = B(I) + C(J)
SON
SON
SON
SON
"M" önbelleklerden daha büyük olduğunda faydalı olabilir, çünkü en içteki döngü
önbelleklerde tutulabilecek daha küçük miktarda veri üzerinde yinelenir. Bu
optimizasyon, GCC tarafından desteklenen tüm diller için geçerlidir ve bunlarla sınırlı değildir.
Fortran. Bu kod dönüşümünü kullanmak için GCC'nin şu şekilde yapılandırılması gerekir: --ppl ile
ve -- ile-cloog Grafit döngü dönüşüm altyapısını etkinleştirmek için.
-fgrafit-kimlik
Grafit için kimlik dönüşümünü etkinleştirin. Her SCoP için
çokyüzlü temsili ve onu tekrar gimple'a dönüştürün. kullanma -fgrafit-kimlik
GIMPLE -> GRAPHITE -> GIMPLE dönüşümünün maliyetlerini veya faydalarını kontrol edebiliriz.
Dizin gibi bazı minimum optimizasyonlar da kod oluşturucu CLooG tarafından gerçekleştirilir.
döngülerde bölme ve ölü kodun ortadan kaldırılması.
-floop-yuva-optimize
ISL tabanlı döngü yuva iyileştiriciyi etkinleştirin. Bu, genel bir döngü yuva iyileştiricisi tabanlıdır.
Pluto optimizasyon algoritmaları üzerinde. için optimize edilmiş bir döngü yapısı hesaplar.
veri yerelliği ve paralellik. Bu seçenek deneyseldir.
-floop-paralelleştir-hepsi
Paralelleştirilebilecek döngüleri belirlemek için Grafit veri bağımlılığı analizini kullanın.
Döngü tarafından taşınan bağımlılıkları içermemesi için analiz edilebilecek tüm döngüleri paralelleştirin
döngüleri paralelleştirmenin karlı olup olmadığını kontrol etmeden.
-fcheck-veri-deps
Birkaç veri bağımlılığı çözümleyicisinin sonuçlarını karşılaştırın. Bu seçenek için kullanılır
veri bağımlılığı çözümleyicilerinde hata ayıklama.
-ftree-loop-if-dönüştürme
En içteki döngülerdeki koşullu atlamaları dalsıza dönüştürmeye çalışma
eşdeğerler. Amaç, kontrol akışını sırayla en içteki döngülerden kaldırmaktır.
vektörleştirme geçişinin bu döngüleri işleme yeteneğini geliştirmek. Bu
vektörleştirme etkinse varsayılan olarak etkindir.
-ftree-loop-if-convert-mağazaları
Ayrıca, bellek yazmalarını içeren koşullu atlamaları if-dönüştürmeye çalışın. Bu
koşullu dönüşüme dönüştüğü için çok iş parçacıklı programlar için dönüşüm güvenli olmayabilir.
bellek koşulsuz belleğe yazar. Örneğin,
için (i = 0; i < N; i++)
eğer (koşul)
A[i] = ifade;
dönüştü
için (i = 0; i < N; i++)
A[i] = koşul ? ifade: A[i];
potansiyel olarak veri yarışları üretiyor.
-ftree-loop-dağıtım
Döngü dağıtımı gerçekleştirin. Bu bayrak, büyük döngü gövdelerinde önbellek performansını iyileştirebilir
ve paralelleştirme veya vektörleştirme gibi daha fazla döngü optimizasyonunun
yer. Örneğin, döngü
DO ben = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
SON
dönüştü
DO ben = 1, N
A(I) = B(I) + C
SON
DO ben = 1, N
D(I) = E(I) * F
SON
-ftree-loop-dağıtım-desenleri
Çağrılarla kod oluşturulabilen kalıpların döngü dağılımını gerçekleştirin.
kütüphane. Bu bayrak varsayılan olarak şurada etkindir: -O3.
Bu geçiş, başlatma döngülerini dağıtır ve memset zero için bir çağrı oluşturur.
Örneğin, döngü
DO ben = 1, N
bir(ben) = 0
B(I) = A(I) + ben
SON
dönüştü
DO ben = 1, N
bir(ben) = 0
SON
DO ben = 1, N
B(I) = A(I) + ben
SON
ve başlatma döngüsü, memset zero çağrısına dönüştürülür.
-ftree-döngü-im
Ağaçlarda döngüsel değişmez hareket gerçekleştirin. Bu geçiş yalnızca zor olan değişmezleri hareket ettirir
RTL düzeyinde işlemek için (işlev çağrıları, önemsiz dizilere genişleyen işlemler
insns). İle birlikte -funswitch-döngüler aynı zamanda koşulların işlenenlerini de taşır.
döngü dışında değişmez, böylece sadece önemsiz değişmezlik analizini kullanabiliriz.
döngü açma. Geçiş ayrıca mağaza hareketini de içerir.
-ftree-döngü-ivcanon
Belirleme için döngülerdeki yineleme sayısı için kurallı bir sayaç oluşturun.
yineleme sayısı karmaşık analiz gerektirir. Daha sonraki optimizasyonlar
sayısını kolayca belirleyin. Özellikle rulo açma ile bağlantılı olarak kullanışlıdır.
-beş nokta
İndüksiyon değişkeni optimizasyonları gerçekleştirin (kuvvet azaltma, indüksiyon değişkeni
ağaçlarda birleştirme ve indüksiyon değişken eleme).
-ftree-paralelleştirme-döngüleri=n
Döngüleri paralel hale getirin, yani yineleme alanlarını n iş parçacığında çalışacak şekilde bölün. Bu
yalnızca yinelemeleri bağımsız olan ve isteğe bağlı olarak yapılabilen döngüler için mümkündür
yeniden düzenlendi. Optimizasyon, döngüler için yalnızca çok işlemcili makinelerde kârlıdır
örneğin bellek bant genişliği ile sınırlandırılmak yerine CPU yoğundur. Bu seçenek
ima -pthreadve bu nedenle yalnızca desteği olan hedeflerde desteklenir.
-pthread.
-ftree-pta
Ağaçlar üzerinde işlev-yerel noktalar-analizini gerçekleştirin. Bu bayrak varsayılan olarak etkindir
at -O Ve daha yüksek.
-ftree-sra
Agregaların skaler değişimini gerçekleştirin. Bu geçiş, yapı referanslarının yerini alır
yapıların çok erken belleğe alınmasını önlemek için skalerlerle. Bu bayrak
varsayılan olarak etkin -O Ve daha yüksek.
-ftree-telif adı
Ağaçlarda kopya yeniden adlandırma gerçekleştirin. Bu geçiş, derleyici geçicilerini şu şekilde yeniden adlandırmaya çalışır:
kopya konumlarındaki diğer değişkenler, genellikle daha fazla olan değişken adlarıyla sonuçlanır.
orijinal değişkenlere çok benzer. Bu bayrak varsayılan olarak şurada etkindir: -O ve
daha.
-ftree-birleştirme-çizgili-vars
Copyrename geçişini söyle (bkz. -ftree-telif adı) küçük kullanıcıyı birleştirmeye çalışmak-
tanımlı değişkenler de, ancak yalnızca diğer işlevlerden satır içine alınmışlarsa. Bu bir
daha sınırlı biçimi -fttree-coalesce-vars. Bu, bu tür hata ayıklama bilgilerine zarar verebilir
satır içi değişkenler, ancak satır içi işlevin değişkenlerini aşağıdakilerden ayrı tutacaktır.
bir durumda beklenen değerleri içerme olasılıkları daha yüksek olacak şekilde birbirlerini
hata ayıklama oturumu. Bu, 4.7'den eski GCC sürümlerinde varsayılandı.
-fttree-coalesce-vars
Copyrename geçişini söyle (bkz. -ftree-telif adı) küçük kullanıcıyı birleştirmeye çalışmak-
sadece derleyici geçicileri yerine tanımlanmış değişkenler. Bu ciddi şekilde sınırlayabilir
ile derlenmiş optimize edilmiş bir programda hata ayıklama yeteneği -fno-var-izleme-atamaları.
Negated formda, bu bayrak, aşağıdakiler dahil olmak üzere kullanıcı değişkenlerinin SSA'nın birleştirilmesini önler.
satır içi olanlar. Bu seçenek varsayılan olarak etkindir.
-ftree-ter
SSA->normal faz sırasında geçici ifade değiştirme gerçekleştirin. Bekar
kullanım/tek tanımlı geçiciler, kullanım yerlerinde tanımlarıyla değiştirilir
ifade. Bu, GIMPLE olmayan kodla sonuçlanır, ancak genişleticilere çok daha fazlasını verir
daha iyi RTL üretimi ile sonuçlanacak karmaşık ağaçlar. Bu, aşağıdakiler tarafından etkinleştirilir:
varsayılan -O Ve daha yüksek.
-ftree-slsr
Ağaçlarda düz çizgi mukavemetini azaltın. Bu, ilgili
çarpmaları içeren ve bunları daha ucuz hesaplamalarla değiştiren ifadeler
mümkün olunca. Bu, varsayılan olarak şurada etkindir: -O Ve daha yüksek.
-ftree-vektörize
Ağaçlarda döngü vektörleştirmesi gerçekleştirin. Bu bayrak varsayılan olarak şurada etkindir: -O3.
-ftree-slp-vektörize
Ağaçlarda temel blok vektörleştirme gerçekleştirin. Bu bayrak varsayılan olarak şurada etkindir: -O3 ve
ne zaman -ftree-vektörize etkin.
-fvect-maliyet-modeli=model
Vektörleştirme için kullanılan maliyet modelini değiştirin. NS model argüman şunlardan biri olmalı
"sınırsız", "dinamik" veya "ucuz". "Sınırsız" model ile vektörleştirilmiş kod-
yolun karlı olduğu varsayılırken, "dinamik" modelde bir çalışma zamanı denetimi yapılır
vektörleştirilmiş kod yolunu, yalnızca olası yineleme sayıları için etkinleştirmek üzere koruyun.
orijinal skaler döngüyü yürütürken olduğundan daha hızlı yürütür. "Ucuz" model olacak
örneğin, bunu yapmanın maliyeti engelleyici olacağı durumlarda döngülerin vektörleştirilmesini devre dışı bırakın
veri bağımlılığı veya hizalama için gerekli çalışma zamanı kontrolleri nedeniyle, ancak aksi takdirde eşittir
"dinamik" modele. Varsayılan maliyet modeli, diğer optimizasyon işaretlerine bağlıdır
ve ya "dinamik" ya da "ucuz"dur.
-ftree-vrp
Ağaçlarda Değer Aralığı Yayılımı gerçekleştirin. Bu, sürekli yayılmaya benzer.
geçer, ancak değerler yerine değer aralıkları yayılır. Bu,
diziye bağlı kontroller ve boş gösterici gibi gereksiz aralık kontrollerini kaldırmak için optimize ediciler
kontrol eder. Bu, varsayılan olarak şurada etkindir: -O2 Ve daha yüksek. Boş işaretçi denetimi eleme
sadece yapılırsa -fdelete-null-işaretçi-kontrolleri etkin.
-tracer
Süper blok boyutunu büyütmek için kuyruk çoğaltma gerçekleştirin. Bu dönüşüm basitleştirir
diğer optimizasyonların daha iyi bir iş çıkarmasına izin veren işlevin kontrol akışı.
-funroll-döngüler
Derleme zamanında veya sonrasında yineleme sayısı belirlenebilen döngüleri açın
döngüye giriş. -funroll-döngüler ima -frerun-cse-sonrası döngü. Bu seçenek
kodu daha büyük olabilir ve daha hızlı çalışmasını sağlayabilir veya sağlamayabilir.
-funroll-all-döngüler
Döngü açıkken yineleme sayıları belirsiz olsa bile tüm döngüleri açın.
girdi. Bu genellikle programların daha yavaş çalışmasına neden olur. -funroll-all-döngüler ima eder
ile aynı seçenekler -funroll-döngüler,
-fsplit-ivs-unroller
Tümevarım değişkenlerinin değerlerinin daha sonraki yinelemelerde ifade edilmesini sağlar.
ilk yinelemedeki değeri kullanarak yuvarlanmamış döngü. Bu uzun bağımlılığı kırar
zincirler, böylece zamanlama geçişlerinin verimliliğini artırır.
Kombinasyonu -fweb ve ÖAM genellikle aynı etkiyi elde etmek için yeterlidir.
Ancak, döngü gövdesinin bir ilmek gövdesinden daha karmaşık olduğu durumlarda bu güvenilir değildir.
tek temel blok. Ayrıca bazı mimarilerde hiç çalışmıyor.
ÖAM geçişindeki kısıtlamalar.
Bu optimizasyon varsayılan olarak etkindir.
-fvariable-genişleme-in-roller
Bu seçenekle, derleyici, aşağıdaki durumlarda bazı yerel değişkenlerin birden çok kopyasını oluşturur.
üstün kodla sonuçlanabilecek bir döngünün açılması.
-fkısmi-satır içi
Fonksiyonların satır içi kısımları. Bu seçeneğin yalnızca kendisi satır içi olduğunda herhangi bir etkisi vardır.
tarafından açıldı -finline-fonksiyonlar or -finline-küçük-fonksiyonlar seçenekleri.
Düzeyde etkin -O2.
-föngörücü-ortak
Tahmine dayalı ortaklaştırma optimizasyonu gerçekleştirin, yani hesaplamaları yeniden kullanın (özellikle
önceki döngü yinelemelerinde gerçekleştirilen bellek yükleri ve depolar).
Bu seçenek düzeyde etkinleştirilir -O3.
-fprefetch-loop-dizileri
Hedef makine tarafından destekleniyorsa, belleği önceden almak için talimatlar oluşturun.
büyük dizilere erişen döngülerin performansını iyileştirin.
Bu seçenek daha iyi veya daha kötü kod üretebilir; sonuçlar son derece bağlıdır
kaynak kodundaki döngülerin yapısı.
düzeyde devre dışı -İşletim sistemi.
-fno-gözetleme deliği
-fno-gözetleme deliği2
Makineye özel gözetleme deliği optimizasyonlarını devre dışı bırakın. Arasındaki fark
-fno-gözetleme deliği ve -fno-gözetleme deliği2 derleyicide nasıl uygulandıkları ile ilgilidir; biraz
hedefler birini, bazıları diğerini, birkaçı ikisini birden kullanır.
-f gözetleme deliği varsayılan olarak etkindir. -f gözetleme deliği2 seviyelerde etkin -O2, -O3, -İşletim sistemi.
-fno-tahmin-dal-olasılığı
Sezgisel yöntemleri kullanarak dal olasılıklarını tahmin etmeyin.
GCC tarafından sağlanmadıkları takdirde dal olasılıklarını tahmin etmek için buluşsal yöntemler kullanır.
profil oluşturma geri bildirimi (-fprofile-yayları). Bu buluşsal yöntemler, kontrol akışına dayalıdır.
grafik. Bazı şube olasılıkları ile belirtilirse __yerleşik_beklenti, sonra
buluşsal yöntemler, kontrol akışının geri kalanı için dallanma olasılıklarını tahmin etmek için kullanılır
grafiği alarak __yerleşik_beklenti bilgileri dikkate alınız. arasındaki etkileşimler
buluşsal yöntemler ve __yerleşik_beklenti karmaşık olabilir ve bazı durumlarda
etkilerinin ortaya çıkması için buluşsal yöntemleri devre dışı bırakın. __yerleşik_beklenti daha kolay
anlama.
Varsayılan -fguess-dal-olasılığı seviyelerde -O, -O2, -O3, -İşletim sistemi.
-freorder-blokları
Alınan sayıyı azaltmak için derlenmiş fonksiyondaki temel blokları yeniden sıralayın.
şubeler ve kod yerelliğini iyileştirin.
düzeylerde etkin -O2, -O3.
-freorder-blokları-ve-bölümü
azaltmak için derlenmiş işlevdeki temel blokları yeniden sıralamaya ek olarak
alınan dal sayısı, bölmeler sıcak ve soğuk temel bloklar ayrı bölümlere
sayfalama ve önbellek yerellik performansını iyileştirmek için derleme ve .o dosyaları.
Bu optimizasyon, istisna işleme varlığında otomatik olarak kapatılır,
linkonce bölümleri için, kullanıcı tanımlı bölüm özniteliğine sahip işlevler için ve herhangi bir
adlandırılmış bölümleri desteklemeyen mimari.
-freorder-fonksiyonları
Kod yerelliğini iyileştirmek için nesne dosyasındaki işlevleri yeniden sıralayın. Bu
en sık yürütülenler için ".text.hot" özel alt bölümleri kullanılarak uygulanır
işlevler ve olası olmayan yürütülen işlevler için ".text.un olası". Yeniden sıralama yapılır
bağlayıcı bu nedenle nesne dosya biçimi adlandırılmış bölümleri desteklemeli ve bağlayıcı yerleştirmelidir
onları makul bir şekilde
Ayrıca bu seçeneği etkili kılmak için profil geri bildirimi mevcut olmalıdır. Görmek
-fprofile-yayları Ayrıntılar için.
düzeylerde etkin -O2, -O3, -İşletim sistemi.
-fstrict-aliasing
Derleyicinin, dil için geçerli olan en katı takma ad kurallarını üstlenmesine izin verin.
derleniyor. C (ve C++) için bu, türe göre optimizasyonları etkinleştirir.
ifade. Özellikle, bir türden bir nesnenin hiçbir zaman aynı yerde bulunmayacağı varsayılır.
türler hemen hemen aynı olmadıkça, farklı türdeki bir nesneyle aynı adres.
Örneğin, bir "imzasız int", bir "int" takma olarak adlandırılabilir, ancak "void*" veya "double" olamaz. A
karakter türü, diğer herhangi bir türün diğer adı olabilir.
Bunun gibi koda özellikle dikkat edin:
birlik a_union {
int ben;
çift d;
};
int f() {
birlik a_union t;
td = 3.0;
dönüş ti;
}
En son üyeden farklı bir sendika üyesinden okuma uygulaması
yazılması ("tip punning" olarak adlandırılır) yaygındır. Bile -fstrict-aliasing, tip-
belleğe birleşim türü aracılığıyla erişilmesi koşuluyla puntalamaya izin verilir. Böylece
yukarıdaki kod beklendiği gibi çalışıyor. Ancak, bu kod şunları yapmayabilir:
int f() {
birlik a_union t;
int * ip;
td = 3.0;
ip = &t.i;
*ip'yi döndür;
}
Benzer şekilde, adresi alarak, ortaya çıkan işaretçiyi yayınlayarak erişim ve
sonucun referansının kaldırılması, döküm bir birlik türü kullansa bile tanımsız davranışa sahiptir,
Örneğin:
int f() {
çift d = 3.0;
dönüş ((birlik a_union *) &d)->i;
}
The -fstrict-aliasing seçenek seviyelerde etkinleştirildi -O2, -O3, -İşletim sistemi.
-fstrict-taşma
Dile bağlı olarak derleyicinin katı imzalı taşma kurallarını kabul etmesine izin verin
derleniyor. C (ve C++) için bu, aritmetik yaparken taşmanın olduğu anlamına gelir.
imzalı sayılar tanımsızdır, bu da derleyicinin öyle olmadığını varsayabileceği anlamına gelir.
olmak. Bu, çeşitli optimizasyonlara izin verir. Örneğin, derleyici şunu varsayar:
"i + 10 > i" gibi bir ifade, imzalı "i" için her zaman doğrudur. Bu varsayım
yalnızca imzalı taşma tanımsızsa geçerlidir, çünkü ifade "i + 10" ise yanlıştır
ikişerli tamamlayıcı aritmetiği kullanırken taşar. Bu seçenek etkin olduğunda herhangi bir
imzalı sayı taşmaları üzerinde bir işlemin yazılması gerekip gerekmediğini belirlemeye çalışmak
gerçekten taşma içermemek için dikkatli bir şekilde.
Bu seçenek ayrıca derleyicinin katı işaretçi anlambilimi üstlenmesine izin verir:
bir nesneye işaretçi, o işaretçiye bir ofset eklenmesi bir işaretçi üretmiyorsa
aynı nesneye ekleme tanımsızdır. Bu, derleyicinin sonuca varmasına izin verir.
"p + u > p", bir "p" göstergesi ve "u" işaretsiz tamsayı için her zaman doğrudur. Bu
varsayım yalnızca, ifade olduğu gibi işaretçi sarma tanımsız olduğundan geçerlidir.
"p + u" ikişer tamamlayıcı aritmetiği kullanarak taşarsa false.
Ayrıca bakınız -fwrapv seçenek. kullanma -fwrapv tamsayı imzalı taşmanın olduğu anlamına gelir
tam olarak tanımlanmış: sarar. Ne zaman -fwrapv kullanılır, arada fark yoktur.
-fstrict-taşma ve -fno-katı-taşma tamsayılar için. İle birlikte -fwrapv belirli türler
taşmasına izin verilir. Örneğin, derleyici bunu yaparken bir taşma alırsa
sabitler üzerinde aritmetik, taşan değer hala kullanılabilir -fwrapvAma
aksi takdirde.
The -fstrict-taşma seçenek seviyelerde etkinleştirildi -O2, -O3, -İşletim sistemi.
-falign-fonksiyonları
-falign-fonksiyonları=n
Fonksiyonların başlangıcını, aşağıdakinden daha büyük olan ikinin bir sonraki kuvvetine göre hizalayın. n, atlama n
bayt. Örneğin, -falign-fonksiyonları=32 işlevleri sonraki 32 bayta hizalar
sınır, ancak -falign-fonksiyonları=24 sonraki 32 baytlık sınıra hizalanır, ancak bu
23 bayt veya daha az atlayarak yapılabilir.
-fno-align-fonksiyonları ve -falign-fonksiyonları=1 eşdeğerdir ve işlevlerin anlamı
hizalı değiller.
Bazı montajcılar bu bayrağı yalnızca şu durumlarda destekler: n iki bir güçtür; bu durumda,
yuvarlanmış.
If n belirtilmemiş veya sıfırsa, makineye bağlı bir varsayılan kullanın.
düzeylerde etkin -O2, -O3.
-falign-etiketler
-falign-etiketleri=n
Tüm şube hedeflerini ikinin kuvveti sınırına hizalayın, n bayt gibi
-falign-fonksiyonları. Bu seçenek, eklemesi gerektiği için kodu kolayca yavaşlatabilir.
kodun olağan akışında dal hedefine ulaşıldığında için kukla işlemler.
-fno-align-etiketleri ve -falign-etiketleri=1 eşdeğerdir ve etiketlerin olmadığı anlamına gelir
hizalı.
If -falign-döngüler or -falign-atlayışlar uygulanabilir ve bu değerden büyükse,
bunun yerine onların değerleri kullanılır.
If n belirtilmemiş veya sıfırsa, büyük olasılıkla makineye bağlı bir varsayılan kullanın
olduğu 1, hizalama yok anlamına gelir.
düzeylerde etkin -O2, -O3.
-falign-döngüler
-falign-döngüler=n
Döngüleri ikinin kuvveti sınırına hizalayarak n bayt gibi -falign-fonksiyonları.
Döngüler birçok kez yürütülürse, bu, kuklanın herhangi bir yürütmesini telafi eder.
işlemleri.
-fno-align-döngüleri ve -falign-döngüleri=1 eşdeğerdir ve döngülerin olmadığı anlamına gelir
hizalı.
If n belirtilmemiş veya sıfırsa, makineye bağlı bir varsayılan kullanın.
düzeylerde etkin -O2, -O3.
-falign-atlayışlar
-falign-atlamalar=n
Hedeflerin olduğu şube hedefleri için, şube hedeflerini ikinin gücü sınırına hizalayın.
sadece atlayarak, atlayarak ulaşılabilir n bayt gibi -falign-fonksiyonları. içinde
bu durumda, hiçbir kukla işlemin yürütülmesine gerek yoktur.
-fno-align-atlayışları ve -falign-atlamalar=1 eşdeğerdir ve döngülerin olmadığı anlamına gelir
hizalı.
If n belirtilmemiş veya sıfırsa, makineye bağlı bir varsayılan kullanın.
düzeylerde etkin -O2, -O3.
-her seferinde eğlence
Bu seçenek, uyumluluk nedenleriyle bırakılmıştır. -her seferinde eğlence etkisi yokken
-bir seferde-fno-birimi ima -fno-üst düzey-yeniden sıralama ve -fno-bölüm-çıpalar.
Varsayılan olarak etkindir.
-fno-üst düzey-yeniden sıralama
Üst düzey işlevleri, değişkenleri ve "asm" ifadelerini yeniden sıralamayın. Onları çıktı al
girdi dosyasında göründükleri sırayla. Bu seçenek kullanıldığında,
başvurulmamış statik değişkenler kaldırılmaz. Bu seçeneğin desteklenmesi amaçlanmıştır.
belirli bir sıralamaya dayanan mevcut kod. Yeni kod için kullanmak daha iyidir
Öznitellikler.
Düzeyde etkin -O0. Açıkça devre dışı bırakıldığında, şu anlama gelir: -fno-bölüm-çıpalar,
aksi halde etkinleştirilen -O0 bazı hedeflerde.
-fweb
Kayıt tahsis amaçları için yaygın olarak kullanılan ağları oluşturur ve her bir ağı atar
bireysel sözde kayıt. Bu, kayıt tahsis geçişinin üzerinde çalışmasına izin verir
doğrudan sözde değil, aynı zamanda ÖAM gibi diğer birkaç optimizasyon geçişini de güçlendirir,
döngü optimize edici ve önemsiz ölü kod sökücü. Ancak hata ayıklama yapabilir
imkansız, çünkü değişkenler artık bir "ev kaydında" kalmıyor.
ile varsayılan olarak etkindir -funroll-döngüler.
-bütün-program
Geçerli derleme biriminin derlenmekte olan tüm programı temsil ettiğini varsayalım.
"Main" ve tarafından birleştirilmiş olanlar hariç tüm genel işlevler ve değişkenler
"externally_visible" özelliği statik işlevler haline gelir ve aslında optimize edilir
prosedürler arası optimize ediciler tarafından daha agresif bir şekilde.
Bu seçenek "-flto" ile birlikte kullanılmamalıdır. Bunun yerine bir şeye güvenmek
linker eklentisi daha güvenli ve daha kesin bilgi sağlamalıdır.
-flto[=n]
Bu seçenek, standart bağlantı zamanı iyileştiricisini çalıştırır. Kaynak koduyla çağrıldığında,
GIMPLE (GCC'nin dahili temsillerinden biri) oluşturur ve onu özel ELF'ye yazar
nesne dosyasındaki bölümler. Nesne dosyaları birbirine bağlandığında, tüm
fonksiyon gövdeleri bu ELF bölümlerinden okunur ve sanki
aynı çeviri biriminin parçası.
Bağlantı zamanı iyileştiriciyi kullanmak için, -flto derleme zamanında ve sırasında belirtilmelidir
son bağlantı. Örneğin:
gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o programım -flto -O2 foo.o bar.o
GCC'ye yapılan ilk iki çağrı, GIMPLE'nin bir bayt kodu gösterimini özel olarak kaydeder.
ELF bölümleri içeride foo.o ve bar.o. Son çağrı GIMPLE bayt kodunu okur
itibaren foo.o ve bar.o, iki dosyayı tek bir dahili görüntüde birleştirir ve derler
sonuç her zamanki gibi. İkisinden beri foo.o ve bar.o tek bir görüntüde birleştirilir, bu
GCC'deki tüm prosedürler arası analizlerin ve optimizasyonların aşağıdakiler arasında çalışmasına neden olur.
iki dosya sanki tek bir dosyaymış gibi. Bu, örneğin, satır içi
işlevleri satır içi yapabilir bar.o işlevlere foo.o ve tam tersi.
Bağlantı zamanı optimizasyonunu etkinleştirmenin bir başka (daha basit) yolu şudur:
gcc -o programım -flto -O2 foo.c bar.c
Yukarıdakiler için bayt kodu üretir foo.c ve bar.c, onları tek bir yerde birleştirir
GIMPLE temsili ve bunları üretmek için her zamanki gibi optimize eder programım.
Akılda tutulması gereken tek önemli şey, bağlantı zamanı optimizasyonlarını etkinleştirmek için
-flto bayrağın hem derleme hem de bağlantı komutlarına iletilmesi gerekir.
Tüm program optimizasyonunu etkili kılmak için, belirli bir bütünün yapılması gerekir.
program varsayımları. Derleyicinin hangi işlevlerin ve değişkenlerin olabileceğini bilmesi gerekir.
bağlantı zamanı için optimize edilmiş birimin dışındaki kitaplıklar ve çalışma zamanı tarafından erişilir. Ne zaman
bağlayıcı tarafından desteklenen, bağlayıcı eklentisi (bkz. -sigorta-bağlayıcı-eklenti) geçer
derleyiciye kullanılan ve harici olarak görünen semboller hakkında bilgi. Ne zaman
linker eklentisi mevcut değil, -bütün-program derleyiciye izin vermek için kullanılmalıdır
daha agresif optimizasyon kararlarına yol açan bu varsayımları yapmak.
Bir dosya ile derlendiğinde şunu unutmayın: -flto, oluşturulan nesne dosyası şundan daha büyük:
GIMPLE bayt kodlarını ve olağan son kodu içerdiğinden normal bir nesne dosyası.
Bu, LTO bilgisine sahip nesne dosyalarının normal nesne olarak bağlanabileceği anlamına gelir.
Dosyalar; Eğer -flto bağlayıcıya iletilmez, prosedürler arası optimizasyon yapılmaz
uygulamalı.
Ayrıca, tek tek dosyaları derlemek için kullanılan optimizasyon bayrakları,
mutlaka bağlantı zamanında kullanılanlarla ilgilidir. Örneğin,
gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o programım -flto -O3 foo.o bar.o
Bu, optimize edilmemiş birleştirici koduna sahip bireysel nesne dosyaları üretir, ancak
sonuçtaki ikili programım optimize edilmiş -O3. Bunun yerine, son ikili ise
olmadan oluşturulan -flto, Daha sonra programım optimize edilmemiştir.
İle son ikili üretirken -flto, GCC yalnızca bağlantı zamanı optimizasyonlarını uygular
bayt kodu içeren dosyalara. Bu nedenle, nesne dosyalarını karıştırabilir ve eşleştirebilirsiniz.
ve GIMPLE bayt kodlarına ve nihai nesne koduna sahip kitaplıklar. GCC otomatik olarak seçer
LTO modunda hangi dosyaların optimize edileceğini ve hangi dosyaların daha fazla bağlanmadan bağlanacağını
işleme.
Bayt kodları oluştururken GCC tarafından korunan bazı kod oluşturma bayrakları vardır.
son bağlantı aşamasında kullanılmaları gerekir. Şu anda, aşağıdaki seçenekler
GIMPLE bayt kodu dosyalarına kaydedilir: -fPIC, -fortak ve hepsi -m hedef bayraklar.
Bağlantı zamanında, bu seçenekler okunur ve yeniden uygulanır. Şu anki
uygulama, bu seçenekler için çakışan değerleri tanıma girişiminde bulunmaz. Eğer
farklı dosyalar çakışan seçenek değerlerine sahiptir (örneğin, bir dosya -fPIC
ve diğeri değil), derleyici bayt kodundan okunan son değeri kullanır.
Dosyalar. Bu durumda, çalışmaya katılan tüm dosyaları derlemeniz önerilir.
aynı seçeneklerle aynı bağlantı.
LTO, ayrı ayrı uyumsuz türlerle bildirilen C bağlantısına sahip nesnelerle karşılaşırsa
birbirine bağlanacak çeviri birimleri (ISO C99'a göre tanımsız davranış
6.2.7), ölümcül olmayan bir teşhis verilebilir. Davranış, çalıştırma sırasında hala tanımsız
Zaman.
LTO'nun bir diğer özelliği de prosedürler arası optimizasyonların uygulanabilmesidir.
farklı dillerde yazılmış dosyalar üzerinde. Bu, dil cephesinde destek gerektirir
son. Şu anda, C, C++ ve Fortran ön uçları GIMPLE yayabilir
bayt kodları, bu nedenle böyle bir şey çalışması gerekir:
gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o programım -flto -O3 foo.o bar.o baz.o -lgfortran
Son bağlantının yapıldığına dikkat edin g ++ C++ çalışma zamanı kitaplıklarını almak ve
-lgfortran Fortran çalışma zamanı kitaplıklarını almak için eklenir. Genel olarak, karıştırırken
LTO modunda dilleri karıştırırken kullandığınız bağlantı komut seçeneklerinin aynısını kullanmalısınız.
düzenli (LTO olmayan) bir derlemedeki diller; eklemeniz gereken tek şey -flto tüm
derleme ve bağlantı komutları.
GIMPLE bayt kodunu içeren nesne dosyaları bir kitaplık arşivinde depolanıyorsa, şunu söyleyin:
libfoo.akullanıyorsanız, bunları bir LTO bağlantısında çıkarmak ve kullanmak mümkündür.
eklenti desteği ile bağlayıcı. Bu özelliği etkinleştirmek için bayrağı kullanın -sigorta-bağlayıcı-eklenti
bağlantı zamanında:
gcc -o myprog -O2 -flto -sigorta-bağlayıcı-eklenti ao bo -lfoo
Bağlayıcı eklentisi etkinleştirildiğinde, bağlayıcı gerekli GIMPLE dosyalarını
libfoo.a ve bunları bir araya getirilmiş olanın bir parçası yapmak için çalışan GCC'ye iletir.
GIMPLE görüntüsü optimize edilecek.
Eklenti destekli bir bağlayıcı kullanmıyorsanız ve/veya bağlayıcıyı etkinleştirmiyorsanız
eklenti, ardından içindeki nesneler libfoo.a her zamanki gibi çıkarılır ve bağlanır, ancak
LTO optimizasyon sürecine katılmayın.
Bağlantı zamanı optimizasyonları, çalışması için tüm programın varlığını gerektirmez.
Program herhangi bir sembolün dışa aktarılmasını gerektirmiyorsa, birleştirmek mümkündür.
-flto ve -bütün-program prosedürler arası optimize edicilerin daha fazlasını kullanmasına izin vermek için
gelişmiş optimizasyon fırsatlarına yol açabilecek agresif varsayımlar. Kullanımı
-bütün-program linker eklentisi aktifken gerekli değildir (bkz. -sigorta-bağlayıcı-eklenti).
LTO'nun mevcut uygulaması, bayt kodu oluşturmaya yönelik hiçbir girişimde bulunmaz.
farklı ana bilgisayar türleri arasında taşınabilir. Bayt kodu dosyaları sürümlenmiştir ve orada
katı bir sürüm kontrolüdür, bu nedenle GCC'nin bir sürümünde oluşturulan bayt kodu dosyaları
GCC'nin daha eski/daha yeni bir sürümüyle çalışın.
Bağlantı zamanı optimizasyonu, hata ayıklama bilgilerinin oluşturulmasıyla iyi çalışmaz.
birleştirme -flto ile -g şu anda deneysel ve yanlış üretmesi bekleniyor
Sonuçlar.
isteğe bağlı olarak belirtirseniz n, bağlantı zamanında yapılan optimizasyon ve kod üretimi
kullanılarak paralel olarak yürütülür n yüklü bir kullanarak paralel işler yapmak programı.
ortam değişkeni YAP kullanılan programı geçersiz kılmak için kullanılabilir. Varsayılan
değeri n 1.
Ayrıca belirtebilirsiniz -flto=iş sunucusu belirlemek için GNU make'nin iş sunucusu modunu kullanmak
paralel işlerin sayısı. Bu, GCC'yi çağıran Makefile zaten
paralel yürütülüyor. başına bir + ebeveyndeki komut tarifine
Bunun çalışması için makefile. Bu seçenek muhtemelen yalnızca şu durumlarda çalışır: YAP GNU yapımıdır.
Bu seçenek varsayılan olarak devre dışıdır.
-flto-bölümü=alg
Bağlantı zamanı iyileştiricisi tarafından kullanılan bölümleme algoritmasını belirtin. değer
orijinal kaynak dosyaları yansıtan bir bölümleme belirtmek için "1to1" veya
eşit büyüklükteki parçalara bölmeyi belirtmek için "dengeli" (mümkün olduğunda) veya
Mümkün olan her sembol için yeni bölüm oluşturmak için "max". "Hiçbiri" olarak belirtilmesi
bir algoritma, bölümlemeyi ve akışı tamamen devre dışı bırakır. Varsayılan değer
"dengeli". "1to1", çeşitli kod sıralamaları için bir geçici çözüm olarak kullanılabilirken
sorunlar, "maks" bölümleme yalnızca dahili test amaçlıdır.
-flto-sıkıştırma düzeyi=n
Bu seçenek, yazılan ara dil için kullanılan sıkıştırma seviyesini belirtir.
LTO nesne dosyalarına dönüştürülür ve yalnızca LTO moduyla birlikte anlamlıdır (-flto).
Geçerli değerler 0 (sıkıştırma yok) ile 9 (maksimum sıkıştırma) arasındadır. Bunun dışındaki değerler
aralık 0 veya 9'a sabitlenir. Seçenek verilmezse, varsayılan dengeli
sıkıştırma ayarı kullanılır.
-flto-rapor
Bağlantı zamanı iyileştiricisinin çalışmaları hakkında dahili ayrıntıları içeren bir rapor yazdırır. NS
bu raporun içeriği sürümden sürüme değişir. GCC için faydalı olması amaçlanmıştır
geliştiriciler, nesne dosyalarını LTO modunda işlerken (aracılığıyla -flto).
Varsayılan olarak devre dışıdır.
-sigorta-bağlayıcı-eklenti
Bağlantı zamanı optimizasyonu sırasında bir bağlayıcı eklentisinin kullanılmasını sağlar. Bu seçenek,
altın veya GNU ld 2.21'de mevcut olan bağlayıcıdaki eklenti desteği hakkında veya
daha yeni.
Bu seçenek, GIMPLE bayt kodu ile nesne dosyalarının kitaplıktan çıkarılmasını sağlar.
arşivler. Bu, bağlantıya daha fazla kod göstererek optimizasyon kalitesini artırır.
zaman optimize edici Bu bilgi, hangi sembollere harici olarak erişilebileceğini belirtir.
(LTO olmayan nesne tarafından veya dinamik bağlantı sırasında). Ortaya çıkan kod kalitesi iyileştirmeleri
ikili dosyalar (ve gizli görünürlük kullanan paylaşılan kitaplıklar) şuna benzer:
"-ftüm-program". Görmek -flto bu bayrağın etkisinin bir açıklaması ve nasıl
kullanın.
Bu seçenek, GCC'de LTO desteği etkinleştirildiğinde ve GCC etkinleştirildiğinde varsayılan olarak etkindir.
eklentileri destekleyen bir bağlayıcı ile kullanım için yapılandırılmıştır (GNU ld 2.21 veya daha yenisi veya altın).
-ffat-lto-nesneleri
Fat LTO nesneleri, hem ara dili hem de dili içeren nesne dosyalarıdır.
nesne kodu. Bu, onları hem LTO bağlama hem de normal bağlama için kullanılabilir hale getirir. Bu
seçenek yalnızca derleme sırasında etkilidir -flto ve bağlantı zamanında yoksayılır.
-fno-fat-lto-nesneleri düz LTO'ya göre derleme süresini iyileştirir, ancak
LTO'dan haberdar olmak için eksiksiz bir araç zinciri. Bağlayıcı eklenti desteğine sahip bir bağlayıcı gerektirir
temel işlevsellik için. Bunlara ek olarak, nm, ar ve Ranlib linker'ı desteklemesi gerekiyor
tam özellikli bir yapı ortamına izin vermek için eklentiler (statik
kütüphaneler vb.) GCC sağlar gcc-ar, gcc-nm, gcc-ranlib geçmek için sarmalayıcılar
Bu araçlar için doğru seçenekler. Yağsız LTO makefiles ile kullanmak için değiştirilmesi gerekir
Onları.
Varsayılan -ffat-lto-nesneleri ancak bu varsayılanın gelecekte değişmesi amaçlanıyor
Bağlayıcı eklentisi etkin ortamlar daha yaygın hale geldiğinde yayınlanır.
-fkarşılaştır-elim
Kayıt tahsisi ve kayıt sonrası tahsis talimatı bölünmesinden sonra, tanımlayın
karşılaştırma işlemine benzer işlemci bayraklarını hesaplayan aritmetik talimatlar
bu aritmetik üzerine kurulu. Mümkünse, açık karşılaştırma işlemini ortadan kaldırın.
Bu geçiş, yalnızca aşağıdakileri açıkça temsil edemeyen belirli hedefler için geçerlidir.
kayıt tahsisi tamamlanmadan önce karşılaştırma işlemi.
düzeylerde etkin -O, -O2, -O3, -İşletim sistemi.
-sigorta-ld=bfd
Kullan kanka varsayılan bağlayıcı yerine bağlayıcı.
-sigorta-ld=altın
Kullan altın varsayılan bağlayıcı yerine bağlayıcı.
-fcprop-kayıtları
Kayıt tahsisi ve kayıt sonrası tahsis talimatı bölme işleminden sonra,
zamanlama bağımlılıklarını azaltmaya çalışmak için bir kopya yayma geçişi ve bazen
kopyayı ortadan kaldırın.
düzeylerde etkin -O, -O2, -O3, -İşletim sistemi.
-fprofile-düzeltme
Çok iş parçacıklı programlar için aletli bir ikili dosya kullanılarak toplanan profiller,
kaçırılan sayaç güncellemeleri nedeniyle tutarsız. Bu seçenek belirtildiğinde, GCC
Bu tür tutarsızlıkları düzeltmek veya düzeltmek için buluşsal yöntemler. Varsayılan olarak, GCC bir
tutarsız bir profil algılandığında hata mesajı.
-fprofil-dir=yol
Profil veri dosyalarının aranacağı dizini ayarlayın. yol. Bu seçenek
yalnızca tarafından oluşturulan profil verilerini etkiler. -fprofile-oluşturma, -ftest-kapsama,
-fprofile-yayları ve tarafından kullanılır -fprofile-kullanımı ve -fbranch-olasılıklar ve bununla ilgili
seçenekler. Hem mutlak hem de göreli yollar kullanılabilir. Varsayılan olarak, GCC,
olarak geçerli dizin yol, bu nedenle profil veri dosyası, aynı dizinde görünür.
nesne dosyası.
-fprofile-oluşturma
-fprofile-oluştur =yol
Kullanışlı profil oluşturmak için genellikle enstrümantasyon uygulaması için kullanılan seçenekleri etkinleştirin
profil geri bildirimi tabanlı optimizasyon ile daha sonra yeniden derleme için. Kullanmalısın
-fprofile-oluşturma hem derlerken hem de programınızı bağlarken.
Aşağıdaki seçenekler etkinleştirilir: "-fprofile-arcs", "-fprofile-values", "-fvpt".
If yol belirtilirse, GCC şuna bakar: yol profil geri bildirim veri dosyalarını bulmak için.
Yerimizi -fprofil-dir.
-fprofile-kullanımı
-fprofile-kullanımı=yol
Profil geri bildirimine yönelik optimizasyonları ve genel olarak karlı olan optimizasyonları etkinleştirin
sadece profil geri bildirimi mevcut.
Aşağıdaki seçenekler etkinleştirilir: "-fbranch-olasılıkları", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer", "-ftree-vectorize",
"ftree-loop-dağıtım-desenleri"
Varsayılan olarak, geri bildirim profilleri ile eşleşmezse GCC bir hata mesajı verir.
kaynak kodu. kullanılarak bu hata uyarıya dönüştürülebilir. -Wkapsam-uyumsuzluğu.
Bunun kötü optimize edilmiş kodla sonuçlanabileceğini unutmayın.
If yol belirtilirse, GCC şuna bakar: yol profil geri bildirim veri dosyalarını bulmak için.
Yerimizi -fprofil-dir.
Aşağıdaki seçenekler, kayan nokta aritmetiğiyle ilgili derleyici davranışını denetler.
Bu seçenekler hız ve doğruluk arasında değiş tokuş yapar. Tümü özel olarak etkinleştirilmelidir.
-float-mağaza
Kayan nokta değişkenlerini kayıtlarda saklamayın ve diğer seçenekleri engelleyin.
kayan noktalı bir değerin bir kayıttan mı yoksa bellekten mi alındığını değiştirebilir.
Bu seçenek, 68000 gibi makinelerde istenmeyen aşırı hassasiyeti önler.
yüzen kayıtlar (68881'in) "çift" olması gerekenden daha fazla hassasiyet sağlar
sahip olmak. Benzer şekilde x86 mimarisi için. Çoğu program için aşırı hassasiyet
sadece işe yarar, ancak birkaç program IEEE kayanlığının kesin tanımına güvenir
puan. Kullanmak -float-mağaza bu tür programlar için, hepsini depolayacak şekilde değiştirdikten sonra
ilgili ara hesaplamalar değişkenlere dönüştürülür.
-fexcess-hassasiyet=stil
Bu seçenek, yüzen makinelerde aşırı hassasiyet üzerinde daha fazla kontrol sağlar.
nokta kayıtları, IEEE "float" ve "double" türlerinden daha hassastır ve
işlemci, bu türlere yuvarlama işlemlerini desteklemez. Varsayılan olarak,
-fexcess-hassasiyet=hızlı yürürlükte; bu, operasyonların yürütüldüğü anlamına gelir.
kayıtların kesinliği ve türlere yuvarlanırken tahmin edilemez olması
kaynak kodunda belirtilen yer alır. C'yi derlerken, eğer
-fexcess-hassasiyet=standart belirtilirse, aşırı hassasiyet kurallara uyar
ISO C99'da belirtilen; özellikle, hem atamalar hem de atamalar değerlerin
anlamsal türlerine yuvarlanır (oysa -float-mağaza yalnızca atamaları etkiler).
Bu seçenek, aşağıdaki gibi katı bir uygunluk seçeneği varsa, varsayılan olarak C için etkindir.
-std = c99 kullanıldı.
-fexcess-hassasiyet=standart C dışındaki diller için uygulanmaz ve
etkisi ise -funsafe-matematik-optimizasyonları or -fffast-matematik belirtilir. x86'da,
ayrıca hiçbir etkisi yoktur -mfpmath=sse or -mfpmath=sse+387 belirtilir; eskiden
durumda, IEEE semantiği aşırı hassasiyet olmadan uygulanır ve ikincisinde yuvarlama
öngörülemeyen.
-fffast-matematik
Setler -fno-matematik-errno, -funsafe-matematik-optimizasyonları, -ffinite-matematik-sadece,
-fno-yuvarlama-matematiği, -fno-sinyalleme-nanları ve -fcx-sınırlı-aralık.
Bu seçenek, "__FAST_MATH__" önişlemci makrosunun tanımlanmasına neden olur.
Bu seçenek herhangi biri tarafından açılmadı. -O ayrıca seçenek -Ofast sonuçlanabileceğinden
IEEE veya ISO'nun tam olarak uygulanmasına bağlı olan programlar için yanlış çıktı
matematik fonksiyonları için kurallar/spesifikasyonlar. Bununla birlikte, daha hızlı kod verebilir
bu özelliklerin garantisini gerektirmeyen programlar.
-fno-matematik-errno
Tek tuşla yürütülen matematik fonksiyonlarını çağırdıktan sonra "errno" ayarlamayın.
talimat, örneğin, "sqrt". Matematik hatası için IEEE istisnalarına dayanan bir program
işleme, IEEE aritmetiğini korurken hız için bu bayrağı kullanmak isteyebilir
uyumluluğu.
Bu seçenek herhangi biri tarafından açılmadı. -O yanlış çıktıya neden olabileceğinden seçenek
IEEE veya ISO'nun tam olarak uygulanmasına bağlı olan programlar için
matematik fonksiyonları için kurallar/spesifikasyonlar. Bununla birlikte, daha hızlı kod verebilir
bu özelliklerin garantisini gerektirmeyen programlar.
Varsayılan -fmath-hata.
Darwin sistemlerinde, matematik kütüphanesi asla "errno" koymaz. bu nedenle hiçbir sebep yok
derleyicinin bunun olasılığını düşünmesi ve -fno-matematik-errno olduğunu
Varsayılan.
-funsafe-matematik-optimizasyonları
(a) bağımsız değişkenlerin ve
sonuçlar geçerlidir ve (b) IEEE veya ANSI standartlarını ihlal edebilir. Bağlantı zamanında kullanıldığında,
varsayılan FPU kontrol kelimesini değiştiren kitaplıklar veya başlangıç dosyaları içerebilir veya
diğer benzer optimizasyonlar.
Bu seçenek herhangi biri tarafından açılmadı. -O yanlış çıktıya neden olabileceğinden seçenek
IEEE veya ISO'nun tam olarak uygulanmasına bağlı olan programlar için
matematik fonksiyonları için kurallar/spesifikasyonlar. Bununla birlikte, daha hızlı kod verebilir
bu özelliklerin garantisini gerektirmeyen programlar. etkinleştirir
-fno-imzalı-sıfırlar, -fno-trapping-matematiği, -fasosiyatif-matematik ve -karşılıklı-matematik.
Varsayılan -fno-güvensiz-matematik optimizasyonları.
-fasosiyatif-matematik
Bir dizi kayan nokta işleminde işlenenlerin yeniden ilişkilendirilmesine izin verin. Bu
muhtemelen hesaplama sonucunu değiştirerek ISO C ve C++ dil standardını ihlal ediyor.
NOT: yeniden sipariş verme sıfırın işaretini değiştirebilir, ayrıca NaN'leri yok sayabilir ve engelleyebilir veya
eksik veya taşma oluşturun (ve dolayısıyla yuvarlamaya dayanan kodda kullanılamaz
"(x + 2**52) - 2**52" gibi davranış. Ayrıca kayan nokta karşılaştırmalarını yeniden düzenleyebilir ve
bu nedenle sıralı karşılaştırmalar gerektiğinde kullanılamaz. Bu seçenek şunu gerektirir:
her ikisi de -fno-imzalı-sıfırlar ve -fno-trapping-matematiği yürürlükte olmak. Üstelik yapmaz
ile çok mantıklı -frounding-matematik. Fortran için seçenek, aşağıdaki durumlarda otomatik olarak etkinleştirilir:
her ikisi de -fno-imzalı-sıfırlar ve -fno-trapping-matematiği yürürlüktedir.
Varsayılan -fno-ilişkisel-matematik.
-karşılıklı-matematik
Bu durumda, değere bölmek yerine bir değerin karşılığının kullanılmasına izin verin.
optimizasyonları sağlar. Örneğin, "x / y", "x * (1/y)" ile değiştirilebilir;
"(1/y)" ortak alt ifade eliminasyonuna tabi ise yararlıdır. unutmayın ki bu
hassasiyeti kaybeder ve değer üzerinde çalışan flop sayısını artırır.
Varsayılan -fno-karşılıklı-matematik.
-ffinite-matematik-sadece
Argümanların ve
sonuçlar NaN'ler veya +-Inf'ler değildir.
Bu seçenek herhangi biri tarafından açılmadı. -O yanlış çıktıya neden olabileceğinden seçenek
IEEE veya ISO'nun tam olarak uygulanmasına bağlı olan programlar için
matematik fonksiyonları için kurallar/spesifikasyonlar. Bununla birlikte, daha hızlı kod verebilir
bu özelliklerin garantisini gerektirmeyen programlar.
Varsayılan -fno-sonlu-matematik-sadece.
-fno-imzalı-sıfırlar
Sıfırın imzasını yok sayan kayan nokta aritmetiği için optimizasyonlara izin verin.
IEEE aritmetiği, farklı +0.0 ve -0.0 değerlerinin davranışını belirtir;
x+0.0 veya 0.0*x gibi ifadelerin sadeleştirilmesini yasaklar (
-ffinite-matematik-sadece). Bu seçenek, sıfır sonucun işaretinin
önemli.
Varsayılan -fsigned-sıfırlar.
-fno-trapping-matematiği
Kayan nokta işlemlerinin kullanıcı tarafından görünür hale gelemeyeceğini varsayarak kodu derleyin
tuzaklar. Bu tuzaklar sıfıra bölme, taşma, taşma, tam olmayan sonuç ve
Geçersiz işlem. Bu seçenek şunu gerektirir: -fno-sinyalleme-nanları yürürlükte olmak.
Bu seçeneğin ayarlanması, "kesintisiz" IEEE aritmetiğine bağlıysa daha hızlı koda izin verebilir,
örneğin.
Bu seçenek hiçbir zaman herhangi biri tarafından açılmamalıdır. -O sonuçlanabileceğinden seçenek
IEEE veya ISO'nun tam olarak uygulanmasına bağlı olan programlar için yanlış çıktı
matematik fonksiyonları için kurallar/spesifikasyonlar.
Varsayılan -ftrapping-matematik.
-frounding-matematik
Varsayılan kayan nokta yuvarlamasını varsayan dönüşümleri ve optimizasyonları devre dışı bırakın
davranış. Bu, tüm kayan noktadan tamsayıya dönüşümler için sıfıra yuvarlanır ve
diğer tüm aritmetik kesmeler için en yakına yuvarlak. Bu seçenek olmalıdır
FP yuvarlama modunu dinamik olarak değiştiren veya
varsayılan olmayan bir yuvarlama modu ile yürütülür. Bu seçenek, sürekli katlamayı devre dışı bırakır.
derleme zamanında kayan noktalı ifadeler (yuvarlama modundan etkilenebilir)
ve işarete bağlı durumlarda güvenli olmayan aritmetik dönüşümler
yuvarlama modları.
Varsayılan -fno-yuvarlama-matematiği.
Bu seçenek deneyseldir ve şu anda tüm GCC'lerin devre dışı bırakılmasını garanti etmemektedir.
yuvarlama modundan etkilenen optimizasyonlar. GCC'nin gelecekteki sürümleri şunları sağlayabilir:
C99'un "FENV_ACCESS" pragmasını kullanarak bu ayarın daha hassas kontrolü. Bu komut satırı
seçeneği, "FENV_ACCESS" için varsayılan durumu belirtmek için kullanılacaktır.
-fsignaling-Nans
IEEE sinyalleme NaN'lerinin aşağıdakiler sırasında kullanıcı tarafından görülebilen tuzaklar oluşturabileceğini varsayarak kodu derleyin.
kayan nokta işlemleri. Bu seçeneğin ayarlanması, değişebilecek optimizasyonları devre dışı bırakır
NaN'leri işaret ederken görünen istisnaların sayısı. Bu seçenek şu anlama gelir:
-ftrapping-matematik.
Bu seçenek, "__SUPPORT_SNAN__" önişlemci makrosunun tanımlanmasına neden olur.
Varsayılan -fno-sinyalleme-nanları.
Bu seçenek deneyseldir ve şu anda tüm GCC'lerin devre dışı bırakılmasını garanti etmemektedir.
sinyalizasyon NaN davranışını etkileyen optimizasyonlar.
-fsingle-hassas-sabit
Kayan nokta sabitlerini örtük olarak dönüştürmek yerine tek bir kesinlik olarak ele alın
onları çift duyarlıklı sabitlere dönüştürün.
-fcx-sınırlı-aralık
Etkinleştirildiğinde, bu seçenek, aşağıdaki durumlarda bir aralık azaltma adımına gerek olmadığını belirtir.
karmaşık bölme yapmak. Ayrıca, bir sonucun olup olmadığı kontrol edilmez.
karmaşık çarpma veya bölme işlemi "NaN + I*NaN" şeklindedir.
bu durumda durum. Varsayılan -fno-cx-sınırlı menzil, ancak tarafından etkinleştirilir
-fffast-matematik.
Bu seçenek, ISO C99 "CX_LIMITED_RANGE" pragmasının varsayılan ayarını kontrol eder.
Bununla birlikte, seçenek tüm diller için geçerlidir.
-fcx-fortran-kuralları
Karmaşık çarpma ve bölme Fortran kurallarını takip eder. Menzil azaltma şu şekilde yapılır:
karmaşık bölünmenin bir parçası, ancak bir kompleksin sonucunun olup olmadığının kontrolü yok.
çarpma veya bölme durumu kurtarmak için "NaN + I*NaN" şeklindedir.
bu durumda.
Varsayılan -fno-cx-fortran-kuralları.
Aşağıdaki seçenekler, performansı artırabilecek ancak iyileştirmeyen optimizasyonları kontrol eder.
herhangi biri tarafından etkinleştirildi -O seçenekler. Bu bölüm, aşağıdakileri üretebilecek deneysel seçenekleri içerir:
bozuk kod.
-fbranch-olasılıklar
İle derlenmiş bir programı çalıştırdıktan sonra -fprofile-yayları, ikinci kez derleyebilirsiniz
kullanma -fbranch-olasılıklar, optimizasyonların sayısını temel alarak iyileştirmek için
her şube alındı. Bir program derlendiğinde -fprofile-yayları çıkar, kurtarır
ark yürütme, adlı bir dosyaya sayılır kaynakadi.gcda her kaynak dosya için. NS
Bu veri dosyasındaki bilgiler, oluşturulan verinin yapısına çok bağlıdır.
bu nedenle, her ikisi için de aynı kaynak kodunu ve aynı optimizasyon seçeneklerini kullanmalısınız.
derlemeler.
İle -fbranch-olasılıklar, GCC koyar REG_BR_PROB her birine not JUMP_INSN ve
CALL_INSN. Bunlar optimizasyonu geliştirmek için kullanılabilir. Şu anda sadece kullanılıyorlar
tek bir yerde: içinde yeniden düzenleme, bir dalın hangi yoldan gitme olasılığının daha yüksek olduğunu tahmin etmek yerine
al, REG_BR_PROB değerler, hangi yolun daha fazla alındığını tam olarak belirlemek için kullanılır.
genellikle.
-fprofile-değerleri
ile birleştirilirse -fprofile-yaylarıdeğerleri hakkında bazı verilerin olması için kod ekler.
programdaki ifadeler toplanır.
İle -fbranch-olasılıklar, profil oluşturma değerlerinden toplanan verileri geri okur.
optimizasyonlarda kullanım için ifadeler.
ile etkinleştirildi -fprofile-oluşturma ve -fprofile-kullanımı.
-fvpt
ile birleştirilirse -fprofile-yayları, bu seçenek derleyiciye kod eklemesini söyler.
ifadelerin değerleri hakkında bilgi toplamak.
İle -fbranch-olasılıklar, toplanan verileri okur ve gerçekte
bunlara dayalı optimizasyonlar. Şu anda optimizasyonlar, uzmanlaşmayı içermektedir.
Paydanın değeri hakkındaki bilgileri kullanarak bölme işlemleri.
-frename-kayıtları
Kalan kayıtları kullanarak zamanlanmış kodda yanlış bağımlılıklardan kaçınmaya çalışın
kayıt tahsisinden sonra bitti. Bu optimizasyon en çok işlemcilere çok şey kazandırır.
kayıtların. Hedef tarafından benimsenen hata ayıklama bilgi formatına bağlı olarak,
ancak, değişkenler artık bir "ev" içinde kalmadığından hata ayıklamayı imkansız hale getirebilir.
Kayıt ol".
ile varsayılan olarak etkindir -funroll-döngüler ve -fpeel-döngüler.
-tracer
Süper blok boyutunu büyütmek için kuyruk çoğaltma gerçekleştirin. Bu dönüşüm basitleştirir
diğer optimizasyonların daha iyi bir iş çıkarmasına izin veren işlevin kontrol akışı.
ile etkinleştirildi -fprofile-kullanımı.
-funroll-döngüler
Derleme zamanında veya sonrasında yineleme sayısı belirlenebilen döngüleri açın
döngüye giriş. -funroll-döngüler ima -frerun-cse-sonrası döngü, -fweb ve
-frename-kayıtları. Ayrıca tam döngü soymayı da açar (yani
az sayıda sabit yinelemeli döngüler). Bu seçenek kodu büyütür ve
daha hızlı çalışmasını sağlayabilir veya sağlamayabilir.
ile etkinleştirildi -fprofile-kullanımı.
-funroll-all-döngüler
Döngü açıkken yineleme sayıları belirsiz olsa bile tüm döngüleri açın.
girdi. Bu genellikle programların daha yavaş çalışmasına neden olur. -funroll-all-döngüler ima eder
ile aynı seçenekler -funroll-döngüler.
-fpeel-döngüler
Çok fazla yuvarlanmadıkları yeterli bilgi bulunan soyma döngüleri (
profil geri bildirimi). Ayrıca tam döngü soymayı da açar (yani
küçük sabit sayıda yinelemeli döngüler).
ile etkinleştirildi -fprofile-kullanımı.
-fmove-loop-değişmezleri
RTL döngü optimize edicide döngü değişmez hareket geçişini etkinleştirir. Düzeyde etkin
-O1
-funswitch-döngüler
Döngü değişmez koşullarına sahip dalları, döngünün kopyalarıyla döngüden çıkarın.
her iki dalda da döngü (durumun sonucuna göre değiştirilir).
-fonksiyon-bölümler
-fdata-bölümleri
Hedef, her işlevi veya veri öğesini çıktı dosyasındaki kendi bölümüne yerleştirin.
keyfi bölümleri destekler. Fonksiyonun adı veya veri öğesinin adı
çıktı dosyasında bölümün adını belirler.
Bağlayıcının iyileştirmeler yapmak için optimizasyonlar gerçekleştirebileceği sistemlerde bu seçenekleri kullanın.
talimat alanında referans yeri. ELF nesnesini kullanan çoğu sistem
Solaris 2 çalıştıran format ve SPARC işlemciler, bu tür optimizasyonlara sahip bağlayıcılara sahiptir.
AIX gelecekte bu optimizasyonlara sahip olabilir.
Bu seçenekleri yalnızca bunu yapmanın önemli yararları olduğunda kullanın. Sen ne zaman
bu seçenekleri belirtin, derleyici ve bağlayıcı daha büyük nesne ve yürütülebilir dosya oluşturur
dosyalar ve ayrıca daha yavaştır. Bunu belirtirseniz tüm sistemlerde "gprof" kullanamazsınız.
hem bu seçeneği hem de bu seçeneği belirtirseniz hata ayıklama ile ilgili sorunlar yaşayabilirsiniz.
-g.
-fbranch-hedef-yükleme-optimize etme
Prolog / epilog iş parçacığı oluşturmadan önce dal hedef kaydı yük optimizasyonu gerçekleştirin.
Hedef yazmaçların kullanımı tipik olarak yalnızca yeniden yükleme sırasında ortaya çıkabilir, bu nedenle kaldırma
döngülerden yükler ve bloklar arası zamanlama yapmak ayrı bir optimizasyon gerektirir
geçmektedir.
-fdal-hedef-yük-optimize2
Prolog / epilog threading işleminden sonra dal hedef kaydı yük optimizasyonu gerçekleştirin.
-fbtr-bb-özel
Şube hedefi kayıt yükleme optimizasyonu gerçekleştirirken şube hedefini yeniden kullanmayın
herhangi bir temel blok içinde kayıt yapar.
-fstack-koruyucu
Yığın parçalama saldırıları gibi arabellek taşmalarını kontrol etmek için fazladan kod yayınlayın. Bu
savunmasız nesnelere sahip işlevlere bir koruma değişkeni eklenerek yapılır. Bu
"alloca" çağıran işlevleri ve 8 bayttan büyük arabelleğe sahip işlevleri içerir.
Korumalar, bir fonksiyon girildiğinde başlatılır ve daha sonra kontrol edildiğinde kontrol edilir.
fonksiyon çıkar. Koruma denetimi başarısız olursa, bir hata mesajı yazdırılır ve program
çıkışlar.
NOT: Ubuntu 6.10 ve sonraki sürümlerde bu seçenek varsayılan olarak C, C++,
ObjC, ObjC++, eğer hiçbiri -fno-yığın koruyucusu, -nstdlibne de -bağımsız vardır
Bulunan.
-fstack-koruyucu-tümü
Facebok sayfasını beğenin : -fstack-koruyucu dışında tüm işlevler korunur.
-fsection-ankrajlar
Paylaşılan "çapa" kullanarak sembolik adres hesaplamalarının sayısını azaltmaya çalışın
yakındaki nesnelere hitap eden semboller. Bu dönüşüm sayıyı azaltmaya yardımcı olabilir
Bazı hedeflerde GOT girişlerinin ve GOT erişimlerinin sayısı.
Örneğin, aşağıdaki "foo" işlevinin uygulanması:
statik int a, b, c;
int foo (void) { döndürme a + b + c; }
genellikle üç değişkenin hepsinin adreslerini hesaplar, ancak onu derlerseniz
-fsection-ankrajlar, bunun yerine değişkenlere ortak bir bağlantı noktasından erişir. NS
efekt aşağıdaki sözde koda benzer (geçerli C değildir):
int foo (boş)
{
kayıt int *xr = &x;
dönüş xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}
Tüm hedefler bu seçeneği desteklemez.
--param isim=değer
Bazı yerlerde GCC, optimizasyon miktarını kontrol etmek için çeşitli sabitler kullanır.
yapıldı. Örneğin, GCC, belirli bir değerden fazlasını içeren satır içi işlevler içermez.
talimat sayısı. Bu sabitlerin bazılarını komut satırından kontrol edebilirsiniz.
ile --param seçeneği.
Belirli parametrelerin adları ve değerlerin anlamı,
derleyicinin içindekiler ve gelecekte haber verilmeksizin değiştirilebilir.
bültenleri.
Her durumda, değer bir tamsayıdır. için izin verilen seçenekler isim şunlardır:
öngörülebilir-dal-sonuç
Dalın bu eşikten daha düşük bir olasılıkla alınması öngörüldüğünde
(yüzde olarak), o zaman iyi tahmin edilebilir olarak kabul edilir. Varsayılan 10'dur.
maksimum çapraz atlama kenarları
Çapraz atlama için dikkate alınacak maksimum gelen kenar sayısı. algoritma
kullandığı -fçapraz atlama her bloğa gelen kenar sayısında O(N^2)'dir.
Artan değerler daha agresif optimizasyon anlamına gelir, bu da derleme süresini uzatır
yürütülebilir boyutta muhtemelen küçük bir gelişme ile artış.
min-crossjump-insns
İki bloğun sonunda eşleşmesi gereken minimum talimat sayısı
üzerlerinde çapraz atlama yapılmadan önce. Bu değer durumda yoksayılır.
çapraz atlanan bloktaki tüm talimatların eşleştiği yer. NS
varsayılan değer 5'tir.
max-grow-copy-bb-insns
Bunun yerine temel blokları kopyalarken maksimum kod boyutu genişletme faktörü
atlama. Genişletme, bir atlama talimatına göredir. Varsayılan değer
8.
max-goto-dplication-insns
Bir bloğa atlayan bir bloğa kopyalanacak maksimum talimat sayısı
hesaplanan goto. Birkaç geçişte O(N^2) davranışından kaçınmak için GCC faktörleri
derleme işleminin başlarında hesaplanan goto'ları ve onları en geç kadar faktörsüzleştirir
mümkün. Yalnızca temel blokların sonundaki hesaplanan atlamalar, en fazla maks.
goto-dplication-insns faktörsüzdür. Varsayılan değer 8'dir.
max-delay-slot-insn-arama
Bir talimat ararken dikkate alınması gereken maksimum talimat sayısı
bir gecikme yuvasını doldurun. Bu keyfi sayıdan daha fazla talimat varsa
arandığında, gecikme aralığını doldurmaktan elde edilen zaman tasarrufu minimumdur, bu nedenle dur
Aranıyor. Artan değerler, daha agresif optimizasyon anlamına gelir;
derleme süresi, yürütme süresinde muhtemelen küçük bir iyileşme ile artar.
max-delay-slot-canlı arama
Gecikme yuvalarını doldurmaya çalışırken, dikkate alınması gereken maksimum talimat sayısı
geçerli canlı kayıt bilgilerine sahip bir blok ararken. Bunu artırmak
keyfi olarak seçilen değer, daha agresif optimizasyon anlamına gelir ve
derleme zamanı. Gecikme yuvası kodu olduğunda bu parametre kaldırılmalıdır.
kontrol akış grafiğini korumak için yeniden yazılmıştır.
max-gcse-bellek
gerçekleştirmek için ayrılabilecek yaklaşık maksimum bellek miktarı.
küresel ortak alt ifade eleme optimizasyonu. Daha fazla bellek varsa
belirtilen gereklidir, optimizasyon yapılmaz.
max-gcse-ekleme oranı
İfade eklemelerinin silmelere oranı bu değerden büyükse
herhangi bir ifade, ardından RTL PRE ifadeyi ekler veya kaldırır ve böylece bırakır
talimat akışında kısmen gereksiz hesaplamalar. Varsayılan değer
20
maksimum bekleyen liste uzunluğu
Bekleyen bağımlılıkların maksimum sayısı, programlamayı temizlemeden önce izin verir.
mevcut durum ve baştan başlama. Birkaç şubesi veya çağrısı olan büyük işlevler,
bellek ve kaynakları gereksiz yere tüketen aşırı büyük listeler oluşturun.
max-modulo-backtrack-girişimleri
Modulo olduğunda zamanlayıcının yapması gereken maksimum geri izleme denemesi sayısı
bir döngü zamanlama. Daha büyük değerler, derleme süresini katlanarak artırabilir.
max-inline-insns-tek
Birkaç parametre, GCC'de kullanılan ağaç satırını kontrol eder. Bu sayıyı ayarlar
maksimum talimat sayısı (GCC'nin dahili temsilinde sayılır)
ağaç satır içi aracının satır içi için dikkate aldığı tek işlev. Bu sadece etkiler
satır içi olarak bildirilen işlevler ve bir sınıf bildiriminde (C++) uygulanan yöntemler.
Varsayılan değer 400'dır.
max-inline-insns-otomatik
Ne zaman kullanmak -finline-fonksiyonlar (dahil -O3), birçok işlev
aksi takdirde satır içi için dikkate alınmaz derleyici tarafından araştırılır. NS
bu işlevler, işlevlere kıyasla farklı (daha kısıtlayıcı) bir sınır
beyan edilen satır içi uygulanabilir. Varsayılan değer 40'tır.
satır içi-min-hızlanma
Arayan + aranan çalışma zamanının tahmini performans iyileştirmesi bunu aştığında
eşik (mevcut), fonksiyon üzerindeki sınırdan bağımsız olarak satır içi olabilir
--param max-inline-insns-tek ve --param max-inline-insns-otomatik.
büyük-fonksiyon-insns
Gerçekten büyük işlevleri belirten sınır. Bu limitten daha büyük fonksiyonlar için
satır içi sonra, satır içi ile sınırlıdır --param büyük-fonksiyon-büyüme. Bu
parametresi, öncelikli olarak, olmayanların neden olduğu aşırı derleme süresinden kaçınmak için yararlıdır.
arka uç tarafından kullanılan doğrusal algoritmalar. Varsayılan değer 2700'dür.
büyük-fonksiyon-büyüme
Yüzde cinsinden satır içi oluşturmanın neden olduğu büyük işlevin maksimum büyümesini belirtir. NS
varsayılan değer 100'dür ve bu, büyük işlev büyümesini orijinalin 2.0 katıyla sınırlar
boyutu.
büyük-birim-insns
Büyük çeviri birimini belirten sınır. Birimlerin sıralanmasının neden olduğu büyüme
bu sınırdan daha büyük ile sınırlıdır --param satır içi birim büyümesi. Küçük birimler için
bu çok sıkı olabilir. Örneğin, A fonksiyonundan oluşan bir birim düşünün.
bu satır içi ve B'yi yalnızca üç kez çağırır. B, A'ya göre küçükse,
birimin büyümesi %300'dür ve yine de böyle bir satır içi oluşturma çok mantıklıdır. çok büyük için
küçük satır içi fonksiyonlardan oluşan birimler, ancak genel birim büyümesi
kod boyutunun üstel patlamasını önlemek için sınır gereklidir. Böylece daha küçük
birimler, boyut büyütülür --param büyük-birim-insns uygulamadan önce --param
satır içi birim büyümesi. Varsayılan 10000'dir.
satır içi birim büyümesi
Satır içi oluşturmanın neden olduğu derleme biriminin maksimum genel büyümesini belirtir. NS
varsayılan değer, birim büyümesini orijinal boyutun 30 katıyla sınırlayan 1.3'dur.
ipcp-birim-büyümesi
Derleme biriminin prosedürler arası neden olduğu maksimum genel büyümeyi belirtir.
sürekli yayılma. Varsayılan değer 10'dur ve birim büyümeyi 1.1 ile sınırlar
orijinal boyutunun katı.
büyük yığın çerçeve
Büyük yığın çerçevelerini belirten sınır. Algoritmayı satır içi yaparken deniyor
Bu sınırı çok fazla büyütmemek için. Varsayılan değer 256 bayttır.
büyük yığın-çerçeve büyümesi
Yüzde olarak satır içi oluşturmanın neden olduğu büyük yığın çerçevelerinin maksimum büyümesini belirtir.
Varsayılan değer 1000'dir ve bu, büyük yığın çerçevesi büyümesinin 11 katıyla sınırlanır.
orijinal boyut.
max-inline-insns-özyinelemeli
max-inline-insns-özyinelemeli-otomatik
Kendi kendine bir kopyanın hat dışı bir kopyasının maksimum talimat sayısını belirtir.
özyinelemeli satır içi işlevi, özyinelemeli satır içi oluşturma gerçekleştirerek büyüyebilir.
Satır içi bildirilen işlevler için, --param max-inline-insns-özyinelemeli içine alınır
hesap. Satır içi olarak bildirilmeyen işlevler için, özyinelemeli satır içi yalnızca şu durumlarda gerçekleşir:
-finline-fonksiyonlar (dahil -O3) etkinleştirilir ve --param max-inline-insns-
özyinelemeli-otomatik kullanıldı. Varsayılan değer 450'dir.
max-inline-yinelemeli-derinlik
max-inline-özyinelemeli-derinlik-otomatik
Yinelemeli satır içi için kullanılan maksimum yineleme derinliğini belirtir.
Satır içi bildirilen işlevler için, --param max-inline-yinelemeli-derinlik içine alınır
hesap. Satır içi olarak bildirilmeyen işlevler için, özyinelemeli satır içi yalnızca şu durumlarda gerçekleşir:
-finline-fonksiyonlar (dahil -O3) etkinleştirilir ve --param maksimum satır içi özyinelemeli
derinlik-otomatik kullanıldı. Varsayılan değer 8'dir.
min-inline-özyinelemeli-olasılık
Özyinelemeli satır içi oluşturma, yalnızca derin özyinelemeye sahip işlev için karlıdır.
ortalamayı artırarak küçük özyineleme derinliğine sahip işlev için zarar verebilir.
diğer optimize edicilere giriş boyutu veya işlev gövdesinin karmaşıklığı.
Profil geri bildirimi mevcut olduğunda (bkz. -fprofile-oluşturma) gerçek özyineleme
derinlik, belirli bir çağrı yoluyla işlevin yinelenmesi olasılığından tahmin edilebilir
ifade. Bu parametre, satır içi oluşturmayı yalnızca
olasılık verilen eşiği aşıyor (yüzde olarak). Varsayılan değer 10'dur.
erken satır içi-insns
Erken satır içi satırın yapabileceği büyümeyi belirtin. Aslında miktarı arttırır
büyük bir soyutlama cezasına sahip kod için satır içi. Varsayılan değer 10'dur.
max-early-inliner-yinelemeler
max-early-inliner-yinelemeler
Erken satır içi yinelemelerin sınırı. Bu temelde sayısını sınırlar
iç içe dolaylı çağrılar erken satır içi çözümleyebilir. Daha derin zincirler hala
geç satır içi ile işlenir.
comdat-paylaşım-olasılığı
comdat-paylaşım-olasılığı
C++ satır içi işlevinin comdat görünürlüğüne sahip olma olasılığı (yüzde olarak)
birden çok derleme birimi arasında paylaşılır. Varsayılan değer 20'dir.
min-vect-döngüye bağlı
Aşağıdaki durumlarda döngülerin vektörleştirilmediği minimum yineleme sayısı
-ftree-vektörize kullanıldı. Vektörleştirmeden sonraki yineleme sayısı,
vektörleştirmeye izin vermek için bu seçenek tarafından belirtilen değerden daha büyük olabilir. NS
varsayılan değer 0'tir.
gcse-maliyet-mesafe-oran
Bir ifadenin hareket ettirilebileceği maksimum mesafenin hesaplanmasında ölçeklendirme faktörü
GCSE optimizasyonları. Bu, şu anda yalnızca kod kaldırma geçişinde desteklenmektedir.
Oran ne kadar büyükse, daha agresif kod kaldırma basit
ifadeler, yani, maliyeti daha düşük olan ifadeler gcse-sınırsız-
maliyet. 0 belirtilmesi, basit ifadelerin kaldırılmasını devre dışı bırakır. Varsayılan değer
10
gcse-sınırsız-maliyet
Maliyet, kabaca tek bir tipik makine talimatının maliyeti olarak ölçülür.
hangi GCSE optimizasyonları bir ifadenin kat edebileceği mesafeyi kısıtlamaz.
Bu, şu anda yalnızca kod kaldırma geçişinde desteklenmektedir. Maliyet ne kadar düşükse,
daha agresif kod kaldırma. 0 belirtmek, tüm ifadelerin
sınırsız mesafelere seyahat edin. Varsayılan değer 3'tür.
maksimum kaldırma derinliği
Kaldırılacak ifadeler için baskın ağaçtaki arama derinliği. Bu kullanılır
Kaldırma algoritmasında ikinci dereceden davranıştan kaçınmak için. 0 değeri sınırlamaz
ancak büyük işlevlerin derlenmesini yavaşlatabilir. varsayılan değer
30.
max-tail-merge-karşılaştırmalar
Bir bb ile karşılaştırılacak maksimum benzer bbs miktarı. Bu önlemek için kullanılır
ağaç kuyruğu birleştirmede ikinci dereceden davranış. Varsayılan değer 10'dur.
max-tail-merge-yinelemeler
İşlev üzerinden geçişin maksimum yineleme miktarı. Bu kullanılır
ağaç kuyruğu birleştirmede derleme süresini sınırlayın. Varsayılan değer 2'dir.
maksimum-açılmamış-insns
Bir döngünün açılması gerekebilecek maksimum talimat sayısı. eğer bir döngü
açılır, bu parametre aynı zamanda döngü kodunun kaç kez olduğunu da belirler.
açılmamış.
maks-ortalama-açılmamış-insns
Yürütme olasılıklarına göre önyargılı maksimum talimat sayısı
bir döngünün açılması gerekebilir. Bir döngü açılırsa, bu parametre de
döngü kodunun kaç kez açılacağını belirler.
maksimum açma süreleri
Tek bir döngünün maksimum açılma sayısı.
max-soyulmuş-insns
Bir döngünün soyulması gerekebilecek maksimum talimat sayısı. eğer bir döngü
soyulursa, bu parametre aynı zamanda döngü kodunun kaç kez soyulacağını da belirler.
maksimum soyulma süreleri
Tek bir döngünün maksimum soyma sayısı.
max soyma dalları
Soyulmuş dizi boyunca sıcak yoldaki maksimum dal sayısı.
max-tamamen-soyulmuş-insns
Tamamen soyulmuş bir döngünün maksimum insn sayısı.
maksimum-tamamen-soyulma süreleri
Tam soyma için uygun olacak bir döngünün maksimum yineleme sayısı.
maksimum-tamamen-soyma-döngü-yuva derinliği
Tam soyma için uygun bir döngü yuvasının maksimum derinliği.
max-unswitch-insns
Anahtarlanmamış bir döngünün maksimum insn sayısı.
max-unswitch-seviyesi
Tek bir döngüde anahtarı kaldırılan maksimum dal sayısı.
Lim-pahalı
Döngü değişmez hareketinde pahalı bir ifadenin minimum maliyeti.
iv-tüm adayları-bağlı düşünün
Tüm adayların altında kaldığı tümevarım değişkenleri için aday sayısına bağlı
tümevarım değişken optimizasyonlarında her kullanım için dikkate alınır. Eğer varsa
bundan daha fazla aday varsa, yalnızca en alakalı olanların kaçındığı kabul edilir.
ikinci dereceden zaman karmaşıklığı.
iv-max-dikkate alınan kullanımlar
Endüksiyon değişkeni optimizasyonları, daha fazla endüksiyon içeren döngülerden vazgeçer
değişken kullanır.
iv-her zaman-budak-cand-set-bağlı
Kümedeki aday sayısı bu değerden küçükse her zaman
yenisini eklerken gereksiz IV'leri setten çıkarın.
scev-max-ifade-size
Skaler evrim çözümleyicisinde kullanılan ifadelerin boyutuna bağlı. Büyük
ifadeler analizörü yavaşlatır.
scev-max-expr-karmaşıklık
Skaler evrim çözümleyicisindeki ifadelerin karmaşıklığına bağlıdır.
Karmaşık ifadeler çözümleyiciyi yavaşlatır.
omega-max-vars
Bir Omega kısıtlama sistemindeki maksimum değişken sayısı. varsayılan değer
128.
omega-max-geq'ler
Bir Omega kısıtlama sistemindeki maksimum eşitsizlik sayısı. Varsayılan
değer 256'dir.
omega-max-eşdeğerleri
Bir Omega kısıtlama sistemindeki maksimum eşitlik sayısı. varsayılan değer
128.
omega-max-joker-kartlar
Omega çözücünün ekleyebileceği maksimum joker değişken sayısı.
Varsayılan değer 18'dır.
omega-hash-tablo boyutu
Omega çözücüdeki karma tablosunun boyutu. Varsayılan değer 550'dir.
omega-max-anahtarları
Omega çözücü tarafından kullanılan maksimum anahtar sayısı. Varsayılan değer 500'dür.
omega-ortadan kaldırmak-yedek-kısıtlamalar
1'e ayarlandığında, tüm gereksiz kısıtlamaları ortadan kaldırmak için pahalı yöntemler kullanın. NS
varsayılan değer 0'tir.
vect-max-sürüm-için-hizalama-kontrolleri
Döngü yapılırken gerçekleştirilebilecek maksimum çalışma zamanı denetimi sayısı
vektörleştiricide hizalama için sürüm oluşturma.
takma ad kontrolleri için vect-max-versiyonu
Döngü yapılırken gerçekleştirilebilecek maksimum çalışma zamanı denetimi sayısı
vektörleştiricideki takma ad için sürüm oluşturma.
hizalama için vect-max-soyma
Vectorizer için erişim hizalamasını geliştirmek için maksimum döngü soyma sayısı. Değer
-1 'sınırsız' anlamına gelir.
izlenecek maksimum yineleme
Analiz için kaba kuvvet algoritması olan bir döngünün maksimum yineleme sayısı
döngünün yineleme sayısını değerlendirmeye çalışır.
hot-bb-count-ws-permil
Temel bir blok profil sayısı, verilen değere katkıda bulunuyorsa sıcak olarak kabul edilir.
tüm profilli yürütmenin permillajı (yani 0...1000).
sıcak-bb-frekans-kesir
Giriş bloğundaki temel bloğun yürütme frekansının kesirini seçin.
Temel blok verilen işlevin sıcak olarak kabul edilmesi gerekir.
maksimum tahmin edilen yinelemeler
Statik olarak tahmin ettiğimiz maksimum döngü yineleme sayısı. Bu yararlıdır
bir fonksiyonun bilinen bağlı tek bir döngü ve başka bir döngü içerdiği durumlar
bilinmeyen bağlı. Bilinen yineleme sayısı doğru tahmin edilirken,
bilinmeyen yineleme sayısı ortalaması kabaca 10'dur. Bu, döngünün
sınırsız diğerine göre yapay olarak soğuk görünür.
hizalama eşiği
Bir dizideki temel bir bloğun maksimum yürütme frekansının kesirini seçin.
temel bloğu hizalama işlevi.
hizalama döngüsü yinelemeleri
En azından seçilen sayıda yinelemeyi yinelemesi beklenen bir döngü hizalanır.
izleyici-dinamik-kapsam
izleyici-dinamik-kapsam-geribildirim
Bu değer, verilen yüzde bir kez süper blok oluşumunu sınırlamak için kullanılır.
yürütülen talimatları kapsar. Bu, gereksiz kod boyutu genişletmesini sınırlar.
The izleyici-dinamik-kapsam-geribildirim yalnızca profil geri bildirimi olduğunda kullanılır
mevcut. Gerçek profiller (statik olarak tahmin edilenlerin aksine) çok
eşiğin daha büyük bir değer olmasına izin vererek daha az dengeli.
izleyici-maks-kod-büyümesi
Kod büyümesi verilen yüzdeye ulaştığında kuyruk çoğaltmasını durdurun. Bu bir
kopyaların çoğu daha sonra çapraz olarak elimine edildiğinden, oldukça yapay sınır
atlama, bu nedenle istenen kod büyümesinden çok daha yüksek değerlere ayarlanabilir.
izleyici-min-dal oranı
En iyi kenarın ters olasılığı bundan daha az olduğunda ters büyümeyi durdurun
eşik (yüzde olarak).
izleyici-min-dal oranı
izleyici-min-dal-oran-geribildirim
En iyi kenarın olasılığı bu eşikten daha düşükse ileriye doğru büyümeyi durdurun.
Benzer şekilde izleyici-dinamik-kapsam iki değer mevcut, biri derleme için
profil geri bildirimi için ve bir tane olmadan derleme için. Derleme değeri
yapmak için profil geri bildiriminin daha muhafazakar (daha yüksek) olması gerekir.
iz etkili.
max-cse-path-uzunluğu
CSE'nin dikkate aldığı yol üzerindeki maksimum temel blok sayısı. Varsayılan 10'dur.
max-cse-insns
Yıkamadan önce CSE'nin işlediği maksimum talimat sayısı. Varsayılan
1000
ggc-min-genişlet
GCC, kendi bellek ayırmasını yönetmek için bir çöp toplayıcı kullanır. Bu parametre
çöp toplayıcının yığınının olması gereken minimum yüzdeyi belirtir
koleksiyonlar arasında genişlemeye izin verilir. Bunu ayarlamak derleme hızını artırabilir;
kod üretimi üzerinde hiçbir etkisi yoktur.
Varsayılan, %30 + %70 * (RAM/1GB) şeklindedir ve RAM >= 100GB olduğunda üst sınır %1'dür.
"Getrlimit" mevcutsa, "RAM" kavramı gerçek RAM'in en küçüğüdür ve
"RLIMIT_DATA" veya "RLIMIT_AS". GCC, belirli bir bilgisayarda RAM'i hesaplayamıyorsa
platformda %30'luk alt sınır kullanılır. Bu parametrenin ayarlanması ve GGC-Din-
yığın boyutu sıfıra, her fırsatta tam bir koleksiyonun gerçekleşmesine neden olur. Bu
son derece yavaştır, ancak hata ayıklama için yararlı olabilir.
ggc-min-yığın boyutu
Toplama zahmetine başlamadan önce çöp toplayıcı yığınının minimum boyutu
çöp. İlk toplama, yığın genişledikten sonra gerçekleşir. ggc-min-genişlet%
Ötesinde ggc-min-yığın boyutu. Yine, bunu ayarlamak derleme hızını artırabilir ve
kod üretimi üzerinde hiçbir etkisi yoktur.
Varsayılan, RAM/8, RLIMIT_RSS'den daha küçük olan veya bunu sağlamaya çalışan bir sınırdır.
RLIMIT_DATA veya RLIMIT_AS aşılmadığı, ancak 4096 alt sınırı ile
(dört megabayt) ve 131072 (128 megabayt) üst sınırı. GCC mümkün değilse
Belirli bir platformda RAM'i hesaplamak için alt sınır kullanılır. Bunu ayarlamak
parametre çok büyük çöp toplamayı etkin bir şekilde devre dışı bırakır. Bunu ayarlamak
parametre ve ggc-min-genişlet sıfıra, her seferinde tam bir koleksiyonun gerçekleşmesine neden olur
fırsat.
max-reload-arama-insns
Maksimum talimat yeniden yükleme sayısı, eşdeğer için geriye bakmalıdır
Kayıt ol. Artan değerler, daha agresif optimizasyon anlamına gelir;
derleme süresi, muhtemelen biraz daha iyi performansla artar. Varsayılan
değer 100'dir.
max-cselib-bellek-konumları
Cselib'in maksimum bellek konumu sayısı dikkate alınmalıdır.
Artan değerler daha agresif optimizasyon anlamına gelir, bu da derleme süresini uzatır
muhtemelen biraz daha iyi performansla artırın. Varsayılan değer 500'dür.
yeniden sırala-blokları-çoğalt
yeniden sırala-bloklar-yinelenen-geribildirim
Koşulsuz kullanılıp kullanılmayacağına karar vermek için temel blok yeniden sıralama geçişi tarafından kullanılır
hedefindeki kodu dallandırın veya çoğaltın. Kod kopyalandığında
tahmini boyut, tahmini boyutla çarpılan bu değerden daha küçüktür.
programın sıcak noktalarında koşulsuz atlama.
The yeniden sırala-blok-yinelenen-geribildirim yalnızca profil geri bildirimi olduğunda kullanılır
mevcut. Şundan daha yüksek değerlere ayarlanabilir: yeniden sırala-blok-çoğalt beri
sıcak noktalar hakkındaki bilgiler daha doğrudur.
max-planlı-hazır-insns
Verilmeye hazır maksimum talimat sayısı, zamanlayıcı
ilk zamanlama geçişi sırasında herhangi bir zamanda düşünün. Artan değerler
daha kapsamlı aramalar anlamına gelir, bu da derleme süresinin muhtemelen artmasını sağlar
az fayda. Varsayılan değer 100'dür.
max-sched-bölge-blokları
Bir bölgedeki bloklar arası için dikkate alınacak maksimum blok sayısı
zamanlama. Varsayılan değer 10'dur.
max-boru hattı-bölge blokları
Bir bölgedeki boru hattı için dikkate alınacak maksimum blok sayısı
seçici zamanlayıcı Varsayılan değer 15'tir.
maksimum programlı-bölge-insns
Interblock için dikkate alınacak bir bölgedeki maksimum insn sayısı
zamanlama. Varsayılan değer 100'dur.
max-boru hattı-bölge-insns
Bir bölgedeki ardışık düzen için dikkate alınacak maksimum insn sayısı
seçici zamanlayıcı Varsayılan değer 200'tir.
min-spec-prob
Bloklar arası için bir kaynak bloğa ulaşmanın minimum olasılığı (yüzde olarak)
spekülatif zamanlama. Varsayılan değer 40'tır.
maksimum zamanlanmış-genişletilmiş-bölgeler-yineleyiciler
Bölgeleri genişletmek için CFG aracılığıyla maksimum yineleme sayısı. 0 değeri (
varsayılan) bölge uzantılarını devre dışı bırakır.
max-schedule-insn-çakışma-gecikmesi
Spekülatif hareket için dikkate alınacak bir insn için maksimum çakışma gecikmesi.
Varsayılan değer 3'dır.
zamanlanmış-belirtilen-prob-kesintisi
Minimum spekülasyon başarısı olasılığı (yüzde olarak), böylece spekülatif
insns planlanmıştır. Varsayılan değer 40'tır.
sched-spec-durum-kenar-prob-kesme
Zamanlayıcının durumunu kaydetmesi için bir kenarın sahip olması gereken minimum olasılık
karşısında. Varsayılan değer 10'dur.
sched-mem-true-dep-maliyet
Aynı belleği hedefleyen mağaza ve yük arasındaki minimum mesafe (CPU döngülerinde)
konumlar. Varsayılan değer 1'dir.
selsched-max-lookahead
Seçici planlamanın ileriye dönük penceresinin maksimum boyutu. bu bir derinlik
mevcut talimatları aramak için. Varsayılan değer 50'dir.
selsched-max-planlanmış-zamanlar
Seçmeli sırasında bir talimatın maksimum programlanma sayısı
zamanlama. Bu, işlemin gerçekleştirildiği yineleme sayısındaki sınırdır.
talimat boru hattı olabilir. Varsayılan değer 2'dir.
yeniden adlandırmak için selsched-max-insns
Hazır listede dikkate alınan maksimum en iyi talimat sayısı
seçici zamanlayıcıda yeniden adlandırma. Varsayılan değer 2'dir.
sms-dk-sc
Salınım modulo zamanlayıcısının ürettiği minimum aşama sayısı değeri. NS
varsayılan değer 2'tir.
maksimum-son-değer-rtl
Bir ifadede kaydedilebilen RTL sayısı olarak ölçülen maksimum boyut
o kaydın bilinen son değeri olarak bir sözde kayıt için birleştiricide. NS
varsayılan 10000'tür.
tamsayı-pay-limit
Küçük tamsayı sabitleri, paylaşılan bir veri yapısı kullanabilir ve derleyicinin
bellek kullanımı ve hızını artırma. Bu, paylaşılan bir dosyanın maksimum değerini ayarlar.
tamsayı sabiti. Varsayılan değer 256'dır.
ssp-tampon boyutu
Yığın parçalama koruması alan minimum arabellek boyutu (yani diziler)
ne zaman -fstack koruması kullanıldı.
Ubuntu 10.10'dan önceki bu varsayılan "8" idi. Şu anda, artırmak için "4"
yığın koruyucusu tarafından korunan işlevlerin sayısı.
max-atlama-iplik-çoğaltma-stmts
Ne zaman çoğaltılması gereken bir blokta izin verilen maksimum ifade sayısı
iplik atlamaları.
maksimum-alan-için-alan-duyarlı
sırasında alana duyarlı bir şekilde işlenen bir yapıdaki maksimum alan sayısı
işaretçi analizi. için varsayılan sıfırdır -O0 ve -O1ve 100 için -İşletim sistemi, -O2, ve
-O3.
önceden getirme gecikmesi
Ön getirmeden önce yürütülen ortalama talimat sayısı hakkında tahmin
bitirir. Önceden alınan mesafe bu sabitle orantılıdır.
Bu sayının arttırılması, daha az akışın önceden getirilmesine de yol açabilir (bkz.
eşzamanlı-önceden getirmeler).
eşzamanlı-önceden getirmeler
Aynı anda çalıştırılabilen maksimum ön getirme sayısı.
l1-önbellek-satır boyutu
L1 önbelleğindeki önbellek satırının bayt cinsinden boyutu.
l1-önbellek boyutu
Kilobayt cinsinden L1 önbelleğinin boyutu.
l2-önbellek boyutu
Kilobayt cinsinden L2 önbelleğinin boyutu.
min-insn-to-prefetch-oran
Talimat sayısı ile önceden getirme sayısı arasındaki minimum oran
bir döngüde önceden getirmeyi etkinleştirmek için.
önceden getirme-min-insn-mem-oranı
Komut sayısı ile bellek sayısı arasındaki minimum oran
bir döngüde önceden getirmeyi etkinleştirmek için referanslar.
kullanım-kanonik-türler
Derleyicinin "kurallı" tip sistemi kullanması gerekip gerekmediği. Varsayılan olarak, bu
karşılaştırma için daha verimli bir iç mekanizma kullanan her zaman 1 olmalıdır.
C++ ve Objective-C++ türleri. Ancak, kurallı tip sistemdeki hatalar
derleme hatalarına neden oluyorsa, kurallı türleri devre dışı bırakmak için bu değeri 0'a ayarlayın.
anahtar-dönüşüm-maks-dal oranı
Anahtar başlatma dönüşümü, şundan daha büyük diziler oluşturmayı reddediyor:
anahtar-dönüşüm-maks-dal oranı anahtardaki dal sayısı ile çarpılır.
max-kısmi-anti-uzunluk
Ağaç kısmi sırasında hesaplanan kısmi antik kümenin maksimum uzunluğu
artıklık giderme optimizasyonu (-ftree-ön) optimizasyon yaparken -O3 ve yukarıda.
Bazı kaynak kodu türleri için gelişmiş kısmi fazlalık ortadan kaldırılması
optimizasyon, ana bilgisayarda bulunan tüm belleği tüketerek kaçabilir
makine. Bu parametre, hesaplanan kümelerin uzunluğuna bir sınır koyar,
hangi kaçak davranışı engeller. Bu parametre için 0 değerinin ayarlanması
sınırsız set uzunluğuna izin verir.
sccvn-max-scc-boyutu
SCCVN işleme sırasında güçlü bir şekilde bağlı bileşenin (SCC) maksimum boyutu. Eğer
bu sınıra ulaşılır, tüm fonksiyon için SCCVN işlemi yapılmaz ve
buna bağlı olarak optimizasyonlar devre dışı bırakılır. Varsayılan maksimum SCC boyutu
10000
sccvn-max-alias-sorgular-erişim başına
Artıklık ararken gerçekleştirdiğimiz maksimum takma ad-oracle sorgusu sayısı
yükler ve mağazalar için. Bu sınıra ulaşılırsa arama iptal edilir ve yük veya
mağaza gereksiz olarak kabul edilmez. Sorgu sayısı algoritmik olarak
yükten fonksiyon girişine kadar tüm yollardaki mağaza sayısı ile sınırlıdır.
Varsayılan maksimum sorgu sayısı 1000'dir.
ira-max-döngüler-num
IRA, varsayılan olarak bölgesel kayıt tahsisini kullanır. Bir işlev daha fazlasını içeriyorsa
bu parametre tarafından verilen sayıdan daha fazla döngü, yalnızca en fazla verilen sayıda
en sık yürütülen döngüler, bölgesel kayıt tahsisi için bölgeler oluşturur.
Parametrenin varsayılan değeri 100'dür.
ira-max-çatışma tablosu boyutu
IRA, çakışma tablosunu sıkıştırmak için karmaşık bir algoritma kullansa da,
tablo hala büyük işlevler için aşırı miktarda bellek gerektirebilir. Eğer
bir işlev için çakışma tablosu, bununla verilen MB cinsinden boyuttan daha fazla olabilir
parametre, kayıt ayırıcı bunun yerine daha hızlı, daha basit ve daha düşük
sözde kayıt çakışma tablosu oluşturmayı gerektirmeyen kalite algoritması.
Parametrenin varsayılan değeri 2000'dür.
ira-döngüsü-ayrılmış kayıtlar
IRA, kararlar için döngülerdeki daha doğru kayıt basıncını değerlendirmek için kullanılabilir
döngü değişmezlerini taşımak için (bkz. -O3). için ayrılmış mevcut kayıt sayısı
bu parametre tarafından başka amaçlar verilir. Varsayılan değer
parametresi 2'dir ve tipik olarak ihtiyaç duyulan minimum kayıt sayısıdır.
Talimatlar. Bu değer, sayısız deneyden elde edilen en iyi değerdir.
döngü-değişmez-max-bbs-in-loop
Döngü değişmez hareketi hem derleme zamanında hem de zaman açısından çok pahalı olabilir.
çok büyük döngülerle gerekli derleme zamanı belleği miktarı. Daha fazlası ile döngüler
bu parametreden daha temel bloklar, döngü değişmez hareket optimizasyonuna sahip olmayacak
üzerlerinde gerçekleştirilmiştir. için parametrenin varsayılan değeri 1000'dir. -O1 ve 10000
için -O2 ve yukarıda.
veritabanları için loop-max-dataref'ler
Veri bağımlılıkları oluşturmak çok büyük döngüler için pahalıdır. Bu parametre
veriler için düşünülen döngülerdeki veri referanslarının sayısını sınırlar
bağımlılık analizi. Bu büyük döngüler, kullanılan optimizasyonlar tarafından ele alınmaz.
döngü veri bağımlılıkları. Varsayılan değer 1000'dir.
max-vartrack-size
Değişken izleme veri akışı sırasında kullanılacak maksimum karma tablo yuvası sayısını ayarlar
Herhangi bir fonksiyonun analizi. Bu limit, değişken izleme ile aşılırsa
atamalar etkinleştirildi, bu işlev için analiz onsuz yeniden denendi, sonra
tüm hata ayıklama insn'lerini işlevden kaldırma. Sınırsız bile aşılırsa
hata ayıklama insns, var izleme analizi, işlev için tamamen devre dışı bırakılır.
Parametreyi sıfıra ayarlamak onu sınırsız hale getirir.
max-vartrack-ifade-derinliği
Değişken adlarını eşlemeye çalışırken maksimum sayıda yineleme düzeyi ayarlar veya
ifadelere değer vermek için geçicilerin hatalarını ayıklayın. Bu, derleme süresini daha fazlası için takas eder
hata ayıklama bilgilerini tamamlayın. Bu çok düşük ayarlanırsa, değer ifadeleri
kullanılabilir ve hata ayıklama bilgilerinde gösterilebilir, sonunda kullanılmayabilir;
bunu daha yükseğe ayarlamak, derleyicinin daha karmaşık hata ayıklama bulmasını sağlayabilir
ifadeler, ancak derleme süresi ve bellek kullanımı artabilir. Varsayılan değer 12'dir.
min-nodebug-insn-uid
Hata ayıklamayan insns için bu parametreden başlayan kullanıcı kimliklerini kullanın. Aşağıdaki aralık
parametre, yalnızca tarafından oluşturulan hata ayıklama insn'leri için ayrılmıştır.
-fvar-izleme-atamaları, ancak hata ayıklama insn'leri yukarıda (örtüşmeyen) kullanıcı kimlikleri alabilir
ayrılmış aralık tükendiyse.
ipa-sra-ptr-büyüme faktörü
IPA-SRA, bir kümeye işaretçiyi yalnızca bir veya daha fazla yeni parametreyle değiştirir
kümülatif boyutları şuna eşit veya daha az olduğunda ipa-sra-ptr-büyüme faktörü kez
orijinal işaretçi parametresinin boyutu.
tm-max-toplam boyutu
Bir işlemde iş parçacığı yerel değişkenlerinin kopyalarını yaparken, bu parametre
ardından değişkenlerin günlüğe kaydetme ile kaydedildiği bayt cinsinden boyutu belirtir
kod dizisi çiftlerini kaydetmek/geri yüklemek yerine işlev görür. Bu seçenek yalnızca
kullanırken geçerlidir -fgnu-tm.
grafit-max-nb-scop-params
Grafit döngü dönüşümlerinde üstel etkilerden kaçınmak için,
Statik Kontrol Bölümündeki (SCoP) parametreler sınırlandırılır. Varsayılan değer 10'dur
parametreler. Derleme zamanında değeri bilinmeyen ve tanımlanmış bir değişken
SCoP dışında, SCoP'un bir parametresidir.
grafit-max-bbs-per-fonksiyon
SCoP'lerin tespitinde üstel etkilerden kaçınmak için fonksiyonların boyutu
Grafit tarafından analiz edilen sınırlıdır. Varsayılan değer 100 temel bloktur.
döngü-blok-kiremit boyutu
ile etkinleştirilen döngü engelleme veya şerit madenciliği dönüşümleri -floop-blok or
-floop-şerit-mayın, döngü yuvasındaki her döngüyü belirli bir sayıda çıkarın
yinelemeler. Şerit uzunluğu kullanılarak değiştirilebilir döngü-blok-kiremit boyutu
parametre. Varsayılan değer 51 yinelemedir.
ipa-cp-değer-liste-boyutu
IPA-CP, bir işlevin işlevlerine iletilen tüm olası değerleri ve türleri izlemeye çalışır.
bunları yaymak ve sanallaştırmayı gerçekleştirmek için parametre. ipa-cp-değeri-
liste boyutu bir biçimsel başına depoladığı maksimum değer ve tür sayısıdır.
bir fonksiyonun parametresi.
lto bölümleri
WHOPR derlemesi sırasında üretilen istenen bölüm sayısını belirtin. NS
bölüm sayısı, derleme için kullanılan CPU sayısını geçmelidir. NS
varsayılan değer 32'tir.
lto-min bölümü
WHOPR için minimum bölümün boyutu (tahmini talimatlarda). Bu engeller
çok küçük programları çok fazla bölüme ayırma masrafları.
tanı-yardım için cxx-max-ad-alanları
C++ ad araması sırasında öneriler için danışılacak maksimum ad alanı sayısı
bir tanımlayıcı için başarısız olur. Varsayılan 1000'dir.
lavabo-frekans-eşik
Hedef bloğun maksimum göreli yürütme frekansı (yüzde olarak)
bir ifadenin batmasına izin vermek için bir ifadenin orijinal bloğuna göre
Beyan. Daha büyük sayılar daha agresif ifade batmasına neden olur. NS
varsayılan değer 75'tir. Aşağıdaki ifadeler için küçük bir pozitif düzeltme uygulanır.
bellek işlenenleri daha da karlı olduğu için batar.
max-store-to-lavabo
Batırılabilecek maksimum koşullu mağaza çifti sayısı. 0 olarak ayarlayın
ya vektörleştirme (-ftree-vektörize) veya if-dönüşüm (-ftree-loop-if-dönüştürme)
devre dışı. Varsayılan 2'dir.
izin-yükleme-veri yarışları
Optimize edicilerin yüklerde yeni veri yarışları başlatmasına izin verin. İzin vermek için 1'e ayarlayın,
aksi takdirde 0'a. Bu seçenek varsayılan olarak etkindir.
-fbellek-modeli= seçeneği.
veri depola-yarışlarına izin ver
Optimize edicilerin mağazalarda yeni veri yarışları başlatmasına izin verin. İzin vermek için 1'e ayarlayın,
aksi takdirde 0'a. Bu seçenek varsayılan olarak etkindir.
-fbellek-modeli= seçeneği.
izin-paketlenmiş-yük-veri yarışları
Optimize edicilerin paketlenmiş veri yüklerinde yeni veri yarışları başlatmasına izin verin. 1'e ayarla
izin ver, aksi takdirde 0'a. Bu seçenek, tarafından dolaylı olarak ayarlanmadıkça varsayılan olarak etkindir.
the -fbellek-modeli= seçeneği.
izin-paketlenmiş-depo-veri yarışları
Optimize edicilerin paketlenmiş veri depolarında yeni veri yarışları başlatmasına izin verin. 1'e ayarla
izin ver, aksi takdirde 0'a. Bu seçenek, tarafından dolaylı olarak ayarlanmadıkça varsayılan olarak etkindir.
the -fbellek-modeli= seçeneği.
vaka-değerleri-eşik
Bir atlama tablosu kullanmanın en iyi olduğu farklı değerlerin en küçük sayısı
koşullu dallardan oluşan bir ağaç yerine. Değer 0 ise, varsayılanı kullanın
makine. Varsayılan 0'dır.
ağaç-reassoc-width
Yeniden ilişkilendirilmiş ağaçta paralel olarak yürütülen komutların maksimum sayısını ayarlayın.
Bu parametre, varsayılan olarak kullanılan hedefe bağlı buluşsal yöntemleri geçersiz kılar.
sıfır değer.
sched-basınç-algoritması
Mevcut iki uygulama arasından seçim yapın -fsched-basınç. algoritma 1
orijinal uygulamadır ve talimatların engellenmesi daha olasıdır
yeniden düzenleniyor. Algoritma 2, aşağıdakiler arasında bir uzlaşma olacak şekilde tasarlanmıştır.
algoritma 1 tarafından alınan nispeten muhafazakar yaklaşım ve oldukça agresif
varsayılan zamanlayıcı tarafından alınan yaklaşım. Daha çok sahip olmaya dayanır.
düzenli kayıt dosyası ve doğru kayıt basınç sınıfları. Görmek haifa-schedu.c
Daha fazla ayrıntı için GCC kaynaklarında.
Varsayılan seçim hedefe bağlıdır.
max-slsr-cand-tarama
Aranırken dikkate alınacak maksimum mevcut aday sayısını belirleyin
yeni bir doğrusal kuvvet azaltma adayı için bir temel.
Opsiyonlar Denetleme the Preprocessor
Bu seçenekler, her bir C kaynak dosyasında gerçek sürümden önce çalıştırılan C önişlemcisini kontrol eder.
derleme.
Eğer kullanıyorsanız -E seçeneği, ön işleme dışında hiçbir şey yapılmaz. Bu seçeneklerden bazıları
sadece birlikte anlamlı -E çünkü önişlemci çıktısının
gerçek derleme için uygun değil.
-Wp,seçenek
Sen kullanabilirsiniz -Wp,seçenek derleyici sürücüsünü atlamak ve geçmek için seçenek doğrudan
önişlemciye. Eğer seçenek virgül içerir, birden çok seçeneğe bölünmüştür.
virgüller. Bununla birlikte, birçok seçenek değiştirilebilir, tercüme edilebilir veya yorumlanabilir.
önişlemciye geçmeden önce derleyici sürücüsü ve -wp zorla atlatır
bu aşama. Önişlemcinin doğrudan arabirimi belgelenmemiş ve
değiştirin, bu nedenle mümkün olduğunda kullanmaktan kaçınmalısınız. -wp ve sürücünün halletmesine izin verin
bunun yerine seçenekler.
-X önişlemci seçenek
Geçiş seçenek önişlemci için bir seçenek olarak. Bunu sistemi beslemek için kullanabilirsiniz-
GCC'nin tanımadığı belirli önişlemci seçenekleri.
Argüman alan bir seçeneği iletmek istiyorsanız, kullanmanız gerekir. -X önişlemci
iki kez, bir kez seçenek için ve bir kez de argüman için.
-tümleşik olmayan-cpp
Derlemeden önce ön işlemeyi ayrı bir geçiş olarak gerçekleştirin. Varsayılan olarak, GCC şunları gerçekleştirir:
giriş belirteçleştirme ve ayrıştırmanın entegre bir parçası olarak ön işleme. Bu seçenek
sağlandığında, uygun dil ön ucu (cc1, cc1plusya da cc1obj C, C++ için,
ve sırasıyla Objective-C) bunun yerine iki kez çağrılır, bir kez yalnızca ön işleme için
ve önceden işlenmiş girdinin gerçek derlemesi için bir kez. Bu seçenek yararlı olabilir
ile birlikte -B or -sarmalayıcı alternatif bir önişlemci belirleme seçenekleri veya
normal ön işleme ile program kaynağının ek işlemlerini gerçekleştirin.
derleme.
-D isim
önceden tanımla isim tanım 1 ile bir makro olarak.
-D isim=tanım
İçeriği tanım sırasında göründükleri gibi belirtilmiş ve işlenmiştir.
çeviri aşaması üç #tanımlamak direktif. Özellikle, tanım şu şekilde olacaktır:
gömülü yeni satır karakterleri tarafından kesildi.
Önişlemciyi bir kabuktan veya kabuk benzeri bir programdan çağırıyorsanız, ihtiyacınız olabilir.
boşluklar gibi karakterleri korumak için kabuğun alıntı sözdizimini kullanmak için
kabuk sözdiziminde anlam.
Komut satırında fonksiyon benzeri bir makro tanımlamak istiyorsanız, argümanını yazın.
(varsa) eşittir işaretinden önce parantez içinde listeleyin. parantezler
çoğu kabuk için anlamlıdır, bu nedenle seçeneği alıntılamanız gerekir. İle birlikte sh ve csh,
-NS'isim(argümanlar...)=tanım' çalışır.
-D ve -U seçenekler komut satırında verildikleri sırayla işlenir. Tüm
-ikrolar dosya ve -Dahil etmek dosya sonuçta seçenekler işleniyor -D ve -U seçenekleri.
-U isim
Herhangi bir önceki tanımını iptal et isim, yerleşik veya bir ile sağlanan -D seçeneği.
-undef
Herhangi bir sisteme özel veya GCC'ye özgü makroları önceden tanımlamayın. Standart önceden tanımlanmış
makrolar tanımlı kalır.
-I dir
dizini ekle dir başlık dosyaları için aranacak dizinler listesine.
tarafından adlandırılan dizinler -I standart sistem dizinleri içermeden önce aranır.
eğer dizin dir standart bir sistem dizin içerir, seçenek yoksayılır
sistem dizinleri için varsayılan arama sırasının ve özel muamelenin
sistem üstbilgileri yenilmez. Eğer dir "=" ile başlar, ardından "=" olur
sysroot öneki ile değiştirildi; görmek --sistem kökü ve -isysroot.
-o dosya
çıktıyı şuraya yaz: dosya. Bu belirtmekle aynı dosya ikinci seçenek olmayan olarak
argüman cpp. gcc ikinci bir seçenek olmayan argümanın farklı bir yorumuna sahiptir,
bu yüzden kullanmalısın -o çıktı dosyasını belirtmek için.
-Duvar
Normal kod için istenen tüm isteğe bağlı uyarıları açar. şu anda bu
is -Wyorum, -Wtrigraflar, -Wmultichar ve bir tamsayı promosyonu hakkında bir uyarı
"#if" ifadelerinde işaret değişikliği. Önişlemcinin uyarılarının çoğunun
varsayılan olarak açıktır ve bunları kontrol etme seçeneği yoktur.
-Wyorum
-Yorumlar
Yorum başlatma dizisi olduğunda uyar /* bir /* yorum yapın veya ne zaman bir
ters eğik çizgi-yeni satır görünür // Yorum. (Her iki form da aynı etkiye sahiptir.)
-Wtrigraflar
Yorumlardaki çoğu trigraf programın anlamını etkileyemez. Ancak, bir
kaçan bir yeni satır oluşturacak trigraf (??/ bir satırın sonunda)
yorumun başladığı veya bittiği yeri değiştirme. Bu nedenle, yalnızca oluşturulacak trigraflar
kaçan yeni satırlar, bir yorumun içinde uyarılar üretir.
Bu seçenek şu şekilde ima edilir: -Duvar. Eğer -Duvar verilmedi, bu seçenek hala etkin
trigraflar etkinleştirilmedikçe. Uyarılar olmadan trigraf dönüşümü elde etmek için, ancak
öteki -Duvar uyarılar, kullanım -trigraflar -Duvar -Wno-trigraflar.
-Geleneksel
Geleneksel ve ISO C'de farklı davranan belirli yapılar hakkında uyarın.
geleneksel C eşdeğeri olmayan ve sorunlu olan ISO C yapıları hakkında uyarın
kaçınılması gereken yapılardır.
-Wundef
Bir dosyada makro olmayan bir tanımlayıcı ile karşılaşıldığında uyar. #Eğer , direktif
dışında tanımlı. Bu tür tanımlayıcılar sıfır ile değiştirilir.
-Wunused-makrolar
Kullanılmayan ana dosyada tanımlanan makrolar hakkında uyarın. bir makro Kullanılmış Eğer öyleyse
en az bir kez genişletildi veya varlığı test edildi. Önişlemci ayrıca şu durumlarda uyarı verir:
makro, yeniden tanımlandığı veya tanımlanmadığı sırada kullanılmamıştır.
Yerleşik makrolar, komut satırında tanımlanan makrolar ve içerme öğesinde tanımlanan makrolar
dosyalar hakkında uyarı yapılmaz.
Not: Bir makro gerçekten kullanılıyorsa, ancak yalnızca atlanan koşullu bloklarda kullanılıyorsa, o zaman
CPP bunu kullanılmamış olarak bildirecektir. Böyle bir durumda uyarıdan kaçınmak için,
makronun tanımının kapsamı, örneğin onu ilk atlanana taşıyarak
engellemek. Alternatif olarak, aşağıdaki gibi bir yapay kullanım sağlayabilirsiniz:
#if tanımlı the_macro_causing_the_warning
#endif
-Wendif-etiketleri
ne zaman uyarsa #else ya da #endif metin takip eder. Bu genellikle olur
formun kodu
#eğer FOO
Kendi ID’n ile mağazalarını oluştur
#else FOO
Kendi ID’n ile mağazalarını oluştur
#endif FOO
İkinci ve üçüncü "FOO" yorumlarda olmalıdır, ancak genellikle eski programlarda değildir.
Bu uyarı varsayılan olarak açıktır.
-Whata
Tüm uyarıları zor hatalara dönüştürün. Uyarıları tetikleyen kaynak kodu
reddedildi.
-Wsystem-başlıkları
Sistem başlıklarında kod için uyarılar yayınlayın. Bunlar normalde bulmakta yardımcı olmazlar.
kendi kodunuzdaki hatalar, bu nedenle bastırılır. Sistemden siz sorumluysanız
kütüphane, onları görmek isteyebilirsiniz.
-w GNU CPP'nin varsayılan olarak verdiği uyarılar da dahil olmak üzere tüm uyarıları bastırın.
- bilgiçlik
C standardında listelenen tüm zorunlu teşhisleri yayınlayın. Bazıları kaldı
zararsız kodda sık sık tetikledikleri için varsayılan olarak.
-pedantik-hatalar
Tüm zorunlu tanılamaları yayınlayın ve tüm zorunlu tanılamaları hatalara dönüştürün.
Bu, GCC'nin yayınlamadığı zorunlu teşhisleri içerir. - bilgiçlik ama davranır
uyarılar.
-M Ön işlemenin sonucunu çıkarmak yerine, aşağıdakilere uygun bir kural çıktısı alın: yapmak
ana kaynak dosyanın bağımlılıklarını açıklayan. Önişlemci bir çıktı verir
yapmak o kaynak dosya için nesne dosya adını, iki nokta üst üste ve adları içeren kural
gelenler de dahil olmak üzere dahil edilen tüm dosyaların -Dahil etmek or -ikrolar komuta
satır seçenekleri.
Açıkça belirtilmedikçe (ile -MT or -MQ), nesne dosya adı şunlardan oluşur:
nesne dosya soneki ile değiştirilen herhangi bir sonek ve herhangi bir son ek ile kaynak dosyanın adı
önde gelen dizin parçaları kaldırıldı. Dahil edilen çok sayıda dosya varsa, kural şudur:
kullanarak birkaç satıra bölün \-Yeni hat. Kuralın komutları yoktur.
Bu seçenek, önişlemcinin aşağıdaki gibi hata ayıklama çıktısını bastırmaz. -dM. Kaçınmak
bu tür hata ayıklama çıktılarını bağımlılık kurallarıyla karıştırmak, açıkça belirtmeniz gereken
bağımlılık çıktı dosyası ile -MFveya gibi bir ortam değişkeni kullanın
DEPENDENCECIES_OUTPUT. Hata ayıklama çıktısı, normal çıktı akışına şu şekilde gönderilmeye devam edecek:
Normal.
Geçen -M sürücüye ima eder -E, ve örtük bir şekilde uyarıları bastırır -w.
-MM Facebok sayfasını beğenin : -M ancak sistem başlık dizinlerinde bulunan başlık dosyalarından bahsetmeyin,
ne de doğrudan veya dolaylı olarak böyle bir başlıktan dahil edilen başlık dosyaları.
Bu, açılı ayraç veya çift tırnak seçiminin bir #Dahil etmek
direktif kendi başına bu başlığın görünüp görünmeyeceğini belirlemez. -MM
bağımlılık çıktısı Bu, GCC 3.0 sürümlerinden anlambilimde küçük bir değişikliktir ve
daha erken.
-MF dosya
Ile kullanıldığında -M or -MM, bağımlılıkların yazılacağı dosyayı belirtir. Eğer hayırsa -MF
anahtar verildiğinde, önişlemci kuralları göndereceği yere gönderir.
önceden işlenmiş çıktı
Sürücü seçenekleriyle kullanıldığında -OS or -MMD, -MF varsayılan bağımlılığı geçersiz kılar
çıktı dosyası.
-MG gibi bir seçenekle birlikte -M bağımlılık oluşturma isteği, -MG varsayar
eksik başlık dosyaları oluşturulan dosyalardır ve bunları bağımlılık listesine ekler.
bir hata yükseltiyor. Bağımlılık dosya adı doğrudan "#include" öğesinden alınır
herhangi bir yol eklemeden yönerge. -MG ayrıca önceden işlenmiş çıktıyı bastırır.
eksik başlık dosyası bunu işe yaramaz hale getirir.
Bu özellik, makefile'lerin otomatik olarak güncellenmesinde kullanılır.
-MP Bu seçenek, CPP'ye aşağıdakiler dışındaki her bağımlılık için sahte bir hedef eklemesini söyler.
ana dosya, her birinin hiçbir şeye bağlı olmamasına neden olur. Bu kukla kurallar hatalara karşı çalışır
yapmak üstbilgi dosyalarını güncellemeden kaldırırsanız verir Makefile eşleştirmek.
Bu tipik çıktıdır:
test.o: test.c test.h
test.h:
-MT hedef
Bağımlılık oluşturma tarafından yayılan kuralın hedefini değiştirin. Varsayılan olarak CPP
ana girdi dosyasının adı, herhangi bir dizin bileşenini ve herhangi bir dosya son ekini siler
gibi .c, ve platformun olağan nesne son ekini ekler. Sonuç hedeftir.
An -MT seçeneği, hedefi tam olarak belirttiğiniz dize olacak şekilde ayarlayacaktır. Eğer istersen
birden fazla hedef, bunları tek bir argüman olarak belirtebilirsiniz. -MTveya birden çok
-MT seçenekleri.
Örneğin, -MT '$(objpfx)foo.o' verebilir
$(objpfx)foo.o: foo.c
-MQ hedef
Aynısı -MT, ancak Make için özel olan herhangi bir karakterden alıntı yapar.
-MQ '$(objpfx)foo.o' verir
$$(objpfx)foo.o: foo.c
Varsayılan hedef, sanki birlikte verilmiş gibi otomatik olarak alıntılanır. -MQ.
-OS -OS eşdeğerdir -M -MF dosyabunun dışında -E ima edilmez. Sürücü
belirleyen dosya olup olmadığına bağlı olarak -o seçenek verilir. Eğer öyleyse, sürücü kendi
argüman ama bir sonek ile .d, aksi takdirde girdi dosyasının adını alır,
tüm dizin bileşenlerini ve son eki kaldırır ve bir .d soneki.
If -OS ile birlikte kullanılır -E, hiç -o anahtarı belirtmek için anlaşılır
bağımlılık çıktı dosyası, ancak kullanılmadan kullanılırsa -Eher biri -o belirtmek için anlaşılır
hedef nesne dosyası.
Dan beri -E ima edilmez, -OS olarak bir bağımlılık çıktı dosyası oluşturmak için kullanılabilir
derleme işleminin yan etkisi.
-MMD
Facebok sayfasını beğenin : -OS sistem başlık dosyalarından değil, yalnızca kullanıcı başlık dosyalarından bahsetmek dışında.
-fpch-deps
Önceden derlenmiş başlıklar kullanıldığında, bu bayrak, bağımlılık çıktı bayraklarının
ayrıca önceden derlenmiş başlığın bağımlılıklarından dosyaları listeler. Yalnızca belirtilmemişse
önceden derlenmiş başlık listelenir ve onu oluşturmak için kullanılan dosyalar değil
çünkü önceden derlenmiş bir başlık kullanıldığında bu dosyalara başvurulmaz.
-fpch-önişlem
Bu seçenek, önceden derlenmiş bir başlığın birlikte kullanılmasına izin verir. -E. Özel bir ekler
"#pragma", "#pragma GCC pch_preprocess "dosya adı"" yeri işaretlemek için çıktıda
önceden derlenmiş başlığın bulunduğu yer ve Dosya. Ne zaman -fönceden işlenmiş olduğu
GCC bu "#pragma"yı tanır ve PCH'yi yükler.
Bu seçenek varsayılan olarak kapalıdır, çünkü elde edilen önceden işlenmiş çıktı yalnızca
GCC'ye girdi olarak gerçekten uygun. tarafından açılır -kaydet-temps.
Bu "#pragma"yı kendi kodunuza yazmamalısınız, ancak kodu düzenlemek güvenlidir.
PCH dosyası farklı bir konumda mevcutsa dosya adı. dosya adı olabilir
mutlak veya GCC'nin geçerli dizinine göre olabilir.
-x c
-x c ++
-x amaç-c
-x cpp ile montajcı
Kaynak dili belirtin: C, C++, Objective-C veya Assembly. Bunun alakası yok
standartlara uygunluk veya uzantılar ile; yalnızca hangi temel sözdiziminin kullanılacağını seçer
beklemek. Bu seçeneklerden hiçbirini vermezseniz, cpp dili
kaynak dosyanın uzantısı: .c, . Cc, .mya da .S. için diğer bazı yaygın uzantılar
C++ ve derleme de tanınır. cpp uzantıyı tanımıyorsa,
dosyayı C olarak ele alacak; bu en genel moddur.
Not: cpp'nin önceki sürümleri bir -dil her ikisini de seçen seçenek
dil ve standartlara uygunluk düzeyi. Bu seçenek kaldırıldı, çünkü
ile çelişiyor -l seçeneği.
-std=standart
-ansi
Kodun uyması gereken standardı belirtin. Şu anda CPP, C'yi biliyor
ve C++ standartları; diğerleri gelecekte eklenebilir.
standart şunlardan biri olabilir:
"c90"
"c89"
"iso9899: 1990"
1990'dan itibaren ISO C standardı. c90 bu sürümü için alışılmış kısayol
standart.
The -ansi seçenek eşdeğerdir -std = c90.
"iso9899: 199409"
1990 yılında değiştirilen 1994 C standardı.
"iso9899: 1999"
"c99"
"iso9899:199x"
"c9x"
Aralık 1999'da yayınlanan revize edilmiş ISO C standardı. Yayınlanmadan önce bu
C9X olarak biliniyordu.
"iso9899: 2011"
"c11"
"c1x"
Aralık 2011'da yayınlanan revize edilmiş ISO C standardı. Yayınlanmadan önce bu
C1X olarak biliniyordu.
"gnu90"
"gnu89"
1990 C standardı artı GNU uzantıları. Bu varsayılandır.
"gnu99"
"gnu9x"
1999 C standardı artı GNU uzantıları.
"gnu11"
"gnu1x"
2011 C standardı artı GNU uzantıları.
"c++98"
1998 ISO C++ standardı artı değişiklikler.
"gnu++98"
Aynı -std=c++98 artı GNU uzantıları. Bu, C++ kodu için varsayılandır.
-BEN- Dahil etme yolunu bölün. ile belirtilen herhangi bir dizin -I önce seçenekler -BEN- vardır
yalnızca "#include" ile istenen başlıklar arandıdosya""; onlar aranmaz
"#Dahil etmekdosya>". Ek dizinler ile belirtilirse -I seçeneklerinden sonra
-BEN-, bu dizinler herkes için aranır #Dahil etmek direktifler.
Ek olarak, -BEN- geçerli dosya dizininin dizininin kullanımını şu şekilde engeller:
"#include" için ilk arama dizinidosya"". Bu seçenek kullanımdan kaldırıldı.
-nostdinc
Başlık dosyaları için standart sistem dizinlerini aramayın. Sadece dizinler
ile belirttiğiniz -I seçenekler (ve mevcut dosyanın dizini, eğer
uygun) aranır.
-nostdinc++
C++'a özgü standart dizinlerde başlık dosyalarını aramayın, ancak yine de
diğer standart dizinleri arayın. (Bu seçenek, C++'ı oluştururken kullanılır.
kütüphane.)
-Dahil etmek dosya
Süreç dosya sanki "#include "file"" birincil kaynağın ilk satırı olarak görünüyor
dosya. Ancak, aranan ilk dizin dosya önişlemci çalışıyor mu
rehber yerine of ana kaynak dosyayı içeren dizin. Bulunmazsa
orada, "#include "..."" arama zincirinin geri kalanında şu şekilde aranır:
Normal.
Birden fazla ise -Dahil etmek seçenekler verildiğinde, dosyalar bulundukları sıraya göre dahil edilmiştir.
komut satırında görünür.
-ikrolar dosya
Tıpkı -Dahil etmek, tarama ile üretilen herhangi bir çıktı dışında dosya Atıldı
uzak. Tanımladığı makrolar tanımlı kalır. Bu, tüm makroları edinmenizi sağlar.
bildirimlerini de işlemeden bir başlıktan.
tarafından belirtilen tüm dosyalar -ikrolar tarafından belirtilen tüm dosyalardan önce işlenir -Dahil etmek.
-dirafter dir
Ara dir başlık dosyaları için, ancak yapın sonra ile belirtilen tüm dizinler -I ve
standart sistem dizinleri tükendi. dir içeren bir sistem olarak kabul edilir
dizin. Eğer dir "=" ile başlar, ardından "=" sysroot ile değiştirilir
önek; görmek --sistem kökü ve -isysroot.
-iprefix önek
Belirtmek önek sonrakiler için ön ek olarak -iwithprefix seçenekler. önek ise
bir dizini temsil ediyorsa, finali eklemelisiniz /.
-iwithprefix dir
-iön eki ile dir
eklemek dir ile daha önce belirtilen önek için -iprefix, ve sonucu ekleyin
dizini içerme arama yoluna. -iön eki ile aynı yere koyar -I
istemek; -iwithprefix nereye koyar -dirafter olur.
-isysroot dir
Bu seçenek, tıpkı --sistem kökü seçeneği, ancak yalnızca başlık dosyaları için geçerlidir (hariç
Darwin, hem başlık dosyaları hem de kitaplıklar için geçerli olduğu hedefler). Bkz.
--sistem kökü Daha fazla bilgi için seçenek.
-imultilib dir
kullanım dir hedefe özel C++ başlıklarını içeren dizinin bir alt dizini olarak.
-isistem dir
Ara dir tarafından belirtilen tüm dizinlerden sonra başlık dosyaları için -I ama önce
standart sistem dizinleri. Bir sistem dizini olarak işaretleyin, böylece aynı olsun
standart sistem dizinlerine uygulandığı gibi özel işlem. Eğer dir başlıyor
"=" ile, "=" sysroot öneki ile değiştirilecektir; görmek --sistem kökü ve
-isysroot.
-Alıntı yaparım dir
Ara dir yalnızca "#include" ile istenen başlık dosyaları içindosya""; onlar değil
"#includedosya>", tarafından belirtilen tüm dizinlerden önce -I ve önce
standart sistem dizinleri. Eğer dir "=" ile başlar, ardından "=" ile değiştirilir
sistem kökü öneki; görmek --sistem kökü ve -isysroot.
-yalnızca yönergeler
Ön işleme sırasında yönergeleri kullanın, ancak makroları genişletmeyin.
Seçeneğin davranışı şunlara bağlıdır: -E ve -fönceden işlenmiş seçenekleri.
İle -E, ön işleme, "#define" gibi yönergelerin işlenmesiyle sınırlıdır,
"#ifdef" ve "#hata". Makro genişletme gibi diğer önişlemci işlemleri ve
trigraf dönüşümü yapılmaz. ek olarak -dd seçenek dolaylı olarak
sağladı.
İle -fönceden işlenmiş, komut satırının ve çoğu yerleşik makronun ön tanımı
engelli. Bağlamsal olarak bağımlı olan "__LINE__" gibi makrolar işlenir
normalde. Bu, önceden "-E" ile önceden işlenmiş dosyaların derlenmesini sağlar.
-yalnızca yönergeler".
İkisi ile -E ve -fönceden işlenmiş, kurallar -fönceden işlenmiş öncelik almak. Bu
önceden "-E ile işlenmiş dosyaların tam ön işlenmesini sağlar
-yalnızca yönergeler".
-fdollar-in-tanımlayıcıları
Kabul et $ tanımlayıcılarda.
-genişletilmiş-tanımlayıcılar
Tanımlayıcılarda evrensel karakter adlarını kabul edin. Bu seçenek deneyseldir; içinde
GCC'nin gelecekteki sürümü, varsayılan olarak C99 ve C++ için etkinleştirilecektir.
-fno-kanonik-sistem-başlıkları
Ön işleme yaparken, kurallılaştırma ile sistem başlık yollarını kısaltmayın.
-fönceden işlenmiş
Giriş dosyasının önceden işlendiğini ön işlemciye belirtin. Bu
makro genişletme, trigraf dönüştürme, kaçan yeni satır ekleme gibi şeyleri bastırır,
ve çoğu direktifin işlenmesi. Önişlemci hala tanır ve kaldırır
yorumlar, böylece önceden işlenmiş bir dosyayı iletebilirsiniz. -C derleyici olmadan
sorunlar. Bu modda, entegre önişlemci bir belirteç oluşturucudan biraz daha fazlasıdır.
ön uçlar için.
-fönceden işlenmiş girdi dosyası uzantılardan birine sahipse örtüktür .i, .ii or .mi.
Bunlar, GCC tarafından oluşturulan önceden işlenmiş dosyalar için kullandığı uzantılardır. -kaydet-temps.
-ftabstop=genişlik
Sekme durakları arasındaki mesafeyi ayarlayın. Bu, önişlemcinin doğru sütunu rapor etmesine yardımcı olur
satırda sekmeler görünse bile uyarı veya hatalardaki sayılar. değer daha az ise
1'den büyük veya 100'den büyükse, seçenek yoksayılır. Varsayılan 8'dir.
-fdebug-cpp
Bu seçenek yalnızca GCC hatalarını ayıklamak için kullanışlıdır. ile kullanıldığında -E, dökümleri hata ayıklama
konum haritaları hakkında bilgi. Çıktıdaki her belirteçten önce dökümü gelir.
konumunun ait olduğu harita. Bir jetonun konumunu tutan haritanın dökümü
olabilir:
{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"yer": }
olmadan kullanıldığında -E, bu seçeneğin hiçbir etkisi yoktur.
-ftrack-makro-genişletme[=seviye]
Makro genişletmelerde belirteçlerin konumlarını izleyin. Bu, derleyicinin yaymasına izin verir.
içinde bir derleme hatası oluştuğunda geçerli makro genişletme yığını hakkında tanılama
bir makro genişletme. Bu seçeneği kullanmak, önişlemciyi ve derleyiciyi tüketir.
daha fazla hafıza NS seviye parametre, belirtecin kesinlik düzeyini seçmek için kullanılabilir
konum izleme, böylece gerekirse bellek tüketimini azaltır. Değer 0 of
seviye yokmuş gibi bu seçeneği devre dışı bırakır. -ftrack-makro-genişletme üzerinde mevcuttu
komut satırı. Değer 1 için düşük bir modda belirteç konumlarını izler
minimum bellek yükü. Bu modda, bir sistemin genişletilmesinden kaynaklanan tüm jetonlar
işlev benzeri bir makronun argümanı aynı konuma sahiptir. Değer 2 iz jetonları
yerleri tamamen Bu değer en çok hafızaya aç olan değerdir. Bu seçenek verildiğinde
argüman yok, varsayılan parametre değeri 2.
-ftrack-macro-expansion=2'nin varsayılan olarak etkinleştirildiğini unutmayın.
-fexec-karakter seti=karakter kümesi
Dize ve karakter sabitleri için kullanılan yürütme karakter kümesini ayarlayın. Varsayılan
UTF-8'dir. karakter kümesi sistemin "iconv" kitaplığı tarafından desteklenen herhangi bir kodlama olabilir
rutin.
-fwide-exec-karakter kümesi=karakter kümesi
Geniş dize ve karakter sabitleri için kullanılan geniş yürütme karakter kümesini ayarlayın.
Varsayılan, "wchar_t" genişliğine karşılık gelen UTF-32 veya UTF-16'dır. Olarak
ile -fexec-karakter seti, karakter kümesi sistemin "iconv" tarafından desteklenen herhangi bir kodlama olabilir
kütüphane rutini; ancak, uymayan kodlamalarla ilgili sorunlarınız olacaktır.
tam olarak "wchar_t" içinde.
-finput-karakter seti=karakter kümesi
Giriş karakter kümesinden çeviri için kullanılan giriş karakter kümesini ayarlayın
GCC tarafından kullanılan kaynak karakter kümesine dosya. Yerel ayar belirtmiyorsa veya GCC
bu bilgiyi yerel ayardan alamaz, varsayılan UTF-8'dir. Bu olabilir
yerel ayar veya bu komut satırı seçeneği tarafından geçersiz kılınır. Şu anda komut
çakışma varsa line seçeneği önceliklidir. karakter kümesi herhangi bir kodlama olabilir
sistemin "iconv" kitaplığı rutini tarafından desteklenir.
-fworking-dizini
Derleyiciye izin verecek önişlemci çıktısında çizgi işaretleyicilerin oluşturulmasını etkinleştirin
ön işleme sırasında geçerli çalışma dizinini bilin. Bu seçenek ne zaman
etkinleştirildiğinde, önişlemci, ilk çizgi işaretçisinden sonra ikinci bir çizgi işaretçisi yayacaktır.
geçerli çalışma dizini ve ardından iki eğik çizgi ile. GCC bunu kullanacak
dizin, önceden işlenmiş girdide mevcut olduğunda, dizin olarak
bazı hata ayıklama bilgi biçimlerinde geçerli çalışma dizini. Bu seçenek
hata ayıklama bilgisi etkinleştirilirse dolaylı olarak etkinleştirilir, ancak bu şu şekilde engellenebilir:
reddedilen form -fno-çalışma-dizini. Eğer -P komutta bayrak var
line, bu seçeneğin hiçbir etkisi yoktur, çünkü hiçbir "#line" yönergesi yayınlanmaz.
-fno-göster-sütun
Tanılamada sütun numaralarını yazdırmayın. Teşhis gerekliyse bu gerekli olabilir.
gibi sütun numaralarını anlamayan bir program tarafından taranması
dejagnu.
-A yüklem=cevap
Yüklem ile bir iddiada bulunun yüklem ve cevap cevap. Bu form
eski forma tercih -A yüklem(cevap), ki bu hala desteklenmektedir, çünkü
kabuk özel karakterleri kullanmaz.
-A -yüklem=cevap
Yüklemle bir iddiayı iptal et yüklem ve cevap cevap.
-dCHARS
KARALAR aşağıdaki karakterlerden bir veya daha fazlasının dizisidir ve
önce bir boşluk. Diğer karakterler derleyici tarafından uygun şekilde yorumlanır veya
GCC'nin gelecekteki sürümleri için ayrılmıştır ve bu nedenle sessizce yok sayılır. belirtirseniz
davranışları çatışan karakterler, sonuç tanımsızdır.
M Normal çıktı yerine, bir liste oluşturun #tanımlamak tüm yönergeler için
önceden tanımlanmış olanlar dahil, önişlemcinin yürütülmesi sırasında tanımlanan makrolar
makrolar. Bu size, sürümünüzde neyin önceden tanımlandığını bulmanın bir yolunu verir.
önişlemci. Dosyanız olmadığını varsayarsak foo.h, komuta
foo.h'ye dokunun; cpp -dM foo.h
tüm önceden tanımlanmış makroları gösterecektir.
Eğer kullanıyorsanız -dM olmadan -E seçeneği -dM eş anlamlısı olarak yorumlanır
-fdump-rtl-mach.
D Facebok sayfasını beğenin : M iki açıdan hariç: öyle değil önceden tanımlanmış makroları içerir ve
çıkışlar her ikisi de the #tanımlamak yönergeler ve ön işlemenin sonucu. Her iki tür
çıktının standart çıktı dosyasına gidin.
N Facebok sayfasını beğenin : D, ancak genişletmelerini değil, yalnızca makro adlarını yayar.
I Çıktı #Dahil etmek ön işleme sonucuna ek olarak yönergeler.
U Facebok sayfasını beğenin : D yalnızca genişletilen veya tanımlılığı test edilen makrolar dışında
önişlemci yönergelerinde çıktı alınır; çıkış kullanıma kadar ertelenir veya
makro testi; ve #undef direktifler ayrıca test edilen makrolar için çıktıdır, ancak
zaman tanımsız.
-P Önişlemciden gelen çıktıda çizgi işareti oluşumunu engeller. Bu olabilir
önişlemciyi C kodu olmayan ve gönderilecek bir şey üzerinde çalıştırırken kullanışlıdır
çizgi işaretleri tarafından karıştırılabilecek bir programa.
-C Yorumları atmayın. Tüm yorumlar, aşağıdakiler dışında çıktı dosyasına iletilir.
Direktifle birlikte silinen işlenmiş direktiflerdeki yorumlar için.
Kullanırken yan etkilere hazırlıklı olmalısınız. -C; önişlemcinin çalışmasına neden olur
yorumları kendi başlarına belirteçler olarak ele alın. Örneğin, şurada görünen yorumlar
Yönlendirici bir satırın ne olacağının başlangıcı, bu satırı bir yönergeye dönüştürme etkisine sahiptir.
sıradan kaynak satırı, çünkü satırdaki ilk jeton artık bir #.
-CC Makro genişletme sırasında da dahil olmak üzere yorumları atmayın. bu gibi -C, dışında
makrolar içinde yer alan yorumların da çıktı dosyasına iletildiğini, burada
makro genişletilir.
İlacın yan etkilerine ek olarak -C seçenek -CC seçenek tüm C++ stiline neden olur
C tarzı yorumlara dönüştürülecek bir makro içindeki yorumlar. Bu daha sonra önlemek için
Bu makronun, kaynak satırın geri kalanını yanlışlıkla yorumlamaktan kullanılması.
The -CC seçeneği genellikle tiftik yorumlarını desteklemek için kullanılır.
-geleneksel-cpp
ISO C'nin aksine eski moda C ön işlemcilerinin davranışını taklit etmeye çalışın
önişlemciler.
-trigraflar
İşlem trigraf dizileri. Bunlar, tümü ile başlayan üç karakterli dizilerdir.
??, ISO C tarafından tek karakterleri temsil edecek şekilde tanımlanır. Örneğin, ??/ standları
için \, yani '??/n' yeni satır için bir karakter sabitidir. Varsayılan olarak, GCC yok sayar
trigraflar, ancak standart uyumlu modlarda onları dönüştürür. Bkz. -std ve -ansi
seçenekleri.
Dokuz üçleme ve bunların yerine geçenler
Trigraf: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Değiştirme: [ ] { } # \ ^ | ~
-yeniden eşle
Yalnızca çok kısa dosyaya izin veren dosya sistemlerinde çalışmak için özel kodu etkinleştirin
MS-DOS gibi isimler.
--yardım et
--hedef-yardım
Herhangi bir şeyi önceden işlemek yerine tüm komut satırı seçeneklerini açıklayan metni yazdırın.
-v Ayrıntılı mod. Yürütmenin başlangıcında GNU CPP'nin sürüm numarasını yazdırın ve
içerme yolunun son şeklini bildirin.
-H Diğer normal etkinliklere ek olarak kullanılan her başlık dosyasının adını yazdırın. Her biri
adının ne kadar derin olduğunu göstermek için girintili #Dahil etmek yığın öyle. Önceden derlenmiş başlık
dosyalar da geçersiz bulunsalar bile yazdırılır; geçersiz önceden derlenmiş
başlık dosyası ile yazdırılır ...X ve geçerli bir ...! .
-version
--versiyon
GNU CPP'nin sürüm numarasını yazdırın. Bir tire ile normal şekilde ön işlemeye devam edin.
İki tire ile hemen çıkın.
Geçen Opsiyonlar için the montajcı
Montajcıya seçenekleri iletebilirsiniz.
-WA,seçenek
Geçiş seçenek montajcı için bir seçenek olarak. Eğer seçenek virgül içerir, bölünür
virgüllerde birden çok seçeneğe.
-X birleştirici seçenek
Geçiş seçenek montajcı için bir seçenek olarak. Bunu sisteme özel tedarik etmek için kullanabilirsiniz.
GCC'nin tanımadığı montajcı seçenekleri.
Argüman alan bir seçeneği iletmek istiyorsanız, kullanmanız gerekir. -X birleştirici iki defa,
bir kez seçenek için ve bir kez de argüman için.
Opsiyonlar için Bağlayıcı
Bu seçenekler, derleyici nesne dosyalarını yürütülebilir bir dosyaya bağladığında devreye girer.
çıktı dosyası. Derleyici bir bağlantı adımı yapmıyorsa anlamsızdırlar.
nesne-dosya-adı
Tanınan özel bir sonekle bitmeyen bir dosya adı, bir dosya adı olarak kabul edilir.
nesne dosyası veya kitaplık. (Nesne dosyaları, bağlayıcı tarafından kitaplıklardan ayırt edilir.
dosya içeriğine göre.) Bağlama yapılırsa, bu nesne dosyaları olarak kullanılır.
bağlayıcıya giriş yapın.
-c
-S
-E Bu seçeneklerden herhangi biri kullanılırsa, bağlayıcı çalışmaz ve nesne dosya adları
argüman olarak kullanılmamalıdır.
-lkütüphane
-l kütüphane
Adlı kitaplığı arayın kütüphane bağlanırken. (İkinci alternatif,
kitaplığı ayrı bir argüman olarak kullanmak yalnızca POSIX uyumluluğu içindir ve önerilmez.)
Bu seçeneği komutta nereye yazdığınız fark eder; bağlayıcı arar
ve kitaplıkları ve nesne dosyalarını belirtilen sırayla işler. Böylece, foo.o
-lz bar.o kitaplığı arar z dosyadan sonra foo.o ama önce bar.o. Eğer bar.o atıfta
işlevler z, bu işlevler yüklenmeyebilir.
Bağlayıcı, aslında kitaplık için standart bir dizin listesi arar.
adlı bir dosya kitaplık.a. Bağlayıcı daha sonra bu dosyayı belirtilmiş gibi kullanır.
tam olarak adıyla.
Aranan dizinler, birkaç standart sistem dizinini ve sizin
ile belirtmek -L.
Normalde bu şekilde bulunan dosyalar kütüphane dosyalarıdır --- üyeleri olan arşiv dosyalarıdır.
nesne dosyaları. Bağlayıcı, üyeler için tarayarak bir arşiv dosyasını işler
şimdiye kadar başvurulan ancak tanımlanmayan sembolleri tanımlayan. Ama eğer
Bulunan dosya sıradan bir nesne dosyasıdır, olağan şekilde bağlantılıdır. NS
kullanmak arasındaki tek fark -l seçeneği ve bir dosya adı belirtmek şudur: -l
çevreleyen kütüphane ile lib ve .a ve birkaç dizini arar.
-lobjc
Bu özel duruma ihtiyacınız var -l bir Objective-C'yi bağlamak için seçenek veya
Objective-C++ programı.
-nostartfiles
Bağlanırken standart sistem başlangıç dosyalarını kullanmayın. standart sistem
kütüphaneler normal olarak kullanılır, sürece -nstdlib or -nodefaultlib'ler kullanıldı.
-nodefaultlib'ler
Bağlanırken standart sistem kitaplıklarını kullanmayın. Yalnızca belirttiğiniz kitaplıklar
bağlayıcıya iletilir ve sistem kitaplıklarının bağlantısını belirten seçenekler, örneğin
"-static-libgcc" veya "-shared-libgcc" olarak dikkate alınmazlar. Standart başlangıç dosyaları
olmadıkça normal olarak kullanılır -nostartfiles kullanıldı.
Derleyici "memcmp", "memset", "memcpy" ve "memmove" çağrıları üretebilir. Bunlar
girişler genellikle libc'deki girişlerle çözülür. Bu giriş noktaları,
bu seçenek belirtildiğinde başka bir mekanizma aracılığıyla sağlanır.
-nstdlib
Bağlanırken standart sistem başlangıç dosyalarını veya kitaplıklarını kullanmayın. Başlangıç yok
dosyalar ve yalnızca belirttiğiniz kitaplıklar bağlayıcıya iletilir ve seçenekler
"-static-libgcc" gibi sistem kitaplıklarının bağlantısını belirtmek veya
"-shared-libgcc" yok sayılır.
Derleyici "memcmp", "memset", "memcpy" ve "memmove" çağrıları üretebilir. Bunlar
girişler genellikle libc'deki girişlerle çözülür. Bu giriş noktaları,
bu seçenek belirtildiğinde başka bir mekanizma aracılığıyla sağlanır.
Tarafından atlanan standart kitaplıklardan biri -nstdlib ve -nodefaultlib'ler is libgcc.a,
GCC'nin belirli eksikliklerin üstesinden gelmek için kullandığı dahili alt rutinler kütüphanesi
makineler veya bazı diller için özel ihtiyaçlar.
Çoğu durumda, ihtiyacınız libgcc.a diğer standart kitaplıklardan kaçınmak istediğinizde bile.
Başka bir deyişle, belirttiğinizde -nstdlib or -nodefaultlib'ler genellikle yapmalısın
belirtmek -lgcc ilave olarak. Bu, çözümlenmemiş referanslarınız olmamasını sağlar.
dahili GCC kitaplığı alt rutinleri. (Böyle bir dahili alt programa bir örnek,
__ana, C++ yapıcılarının çağrılmasını sağlamak için kullanılır.)
-turta
Onu destekleyen hedefler üzerinde konumdan bağımsız yürütülebilir bir dosya oluşturun. öngörülebilir
sonuçlar için, derleme için kullanılan seçeneklerin aynısını da belirtmelisiniz (-fpie,
-fPIEveya model alt seçenekleri) bu bağlayıcı seçeneğini belirlediğinizde.
-rdinamik
bayrağı geçmek -ihracat-dinamik ELF bağlayıcıya, onu destekleyen hedeflerde. Bu
bağlayıcıya yalnızca kullanılanları değil tüm sembolleri dinamik sembole eklemesini söyler
tablo. Bu seçenek, bazı "dlopen" kullanımları için veya elde edilmesine izin vermek için gereklidir.
bir program içinden geriye doğru izler.
-s Yürütülebilir dosyadan tüm sembol tablosunu ve yer değiştirme bilgilerini kaldırın.
-statik
Dinamik bağlantıyı destekleyen sistemlerde bu, paylaşılan bağlantıyla bağlantı kurulmasını engeller.
kütüphaneler. Diğer sistemlerde bu seçeneğin hiçbir etkisi yoktur.
-paylaşılan
Daha sonra diğer nesnelerle ilişkilendirilebilecek paylaşılan bir nesne üretin.
yürütülebilir. Tüm sistemler bu seçeneği desteklemez. Öngörülebilir sonuçlar için şunları yapmalısınız:
ayrıca derleme için kullanılan seçeneklerin aynısını belirtin (-fpic, -fPICveya modeli
alt seçenekler) bu bağlayıcı seçeneğini belirlediğinizde.[1]
-paylaşılan-libgcc
-statik-libgcc
sağlayan sistemlerde libgcc paylaşılan bir kitaplık olarak, bu seçenekler
sırasıyla paylaşılan veya statik sürüm. Paylaşılan bir sürümü yoksa libgcc oldu
derleyici yapılandırıldığında oluşturulur, bu seçeneklerin hiçbir etkisi yoktur.
Bir uygulamanın paylaşılan verileri kullanması gereken birkaç durum vardır. libgcc
statik sürüm yerine. Bunlardan en yaygın olanı, uygulamanın
farklı paylaşılan kütüphaneler arasında istisnalar atmak ve yakalamak istiyor. Bu durumda,
kütüphanelerin her biri ve uygulamanın kendisi, paylaşılan libgcc.
Bu nedenle, G++ ve GCJ sürücüleri otomatik olarak -paylaşılan-libgcc ne zaman inşa etsen
paylaşılan bir kitaplık veya bir ana yürütülebilir dosya, çünkü C++ ve Java programları genellikle
istisnalar, bu yüzden yapılacak doğru şey bu.
Bunun yerine, paylaşılan kitaplıklar oluşturmak için GCC sürücüsünü kullanırsanız, bunların
her zaman paylaşılanlarla bağlantılı değildir libgcc. GCC bulursa, konfigürasyonunda
GNU olmayan bir bağlayıcınız veya seçeneği desteklemeyen bir GNU bağlayıcınız olduğu zaman
--eh-kare-hdr, paylaşılan sürümünü bağlar libgcc tarafından paylaşılan kütüphanelere
varsayılan. Aksi takdirde, bağlayıcıdan yararlanır ve bağlantıyı optimize eder.
paylaşılan sürümü ile libgcc, tarafından libgcc'nin statik sürümüyle bağlantı
varsayılan. Bu, istisnaların bu tür paylaşılan kitaplıklar aracılığıyla herhangi bir işlem yapmadan yayılmasını sağlar.
kitaplık yükleme zamanında ortaya çıkan yer değiştirme maliyetleri.
Ancak, bir kitaplık veya ana yürütülebilir dosyanın istisnalar oluşturması veya yakalaması gerekiyorsa,
kullanılan dillere uygun olarak G++ veya GCJ sürücüsünü kullanarak bağlamalıdır.
programı veya seçeneği kullanarak -paylaşılan-libgcc, paylaşılan ile bağlantılı olacak şekilde
libgcc.
-statik-libasan
Zaman -fsanitize=adres seçenek, bir programı bağlamak için kullanılır, GCC sürücüsü
karşı otomatik olarak bağlanır Lübnan. Eğer Lübnan paylaşılan bir kitaplık olarak kullanılabilir ve
the -statik seçeneği kullanılmaz, o zaman bu, paylaşılan sürümüne bağlanır Lübnan.
The -statik-libasan seçeneği, GCC sürücüsünü bağlantıya yönlendirir Lübnan statik olarak, olmadan
mutlaka diğer kütüphaneleri statik olarak bağlama.
-statik-libtsan
Zaman -fsanitize=iş parçacığı seçenek, bir programı bağlamak için kullanılır, GCC sürücüsü
karşı otomatik olarak bağlanır libtsan. Eğer libtsan paylaşılan bir kitaplık olarak kullanılabilir ve
the -statik seçeneği kullanılmaz, o zaman bu, paylaşılan sürümüne bağlanır libtsan.
The -statik-libtsan seçeneği, GCC sürücüsünü bağlantıya yönlendirir libtsan statik olarak, olmadan
mutlaka diğer kütüphaneleri statik olarak bağlama.
-statik-libstdc++
Zaman g ++ program bir C++ programını bağlamak için kullanılır, normalde otomatik olarak bağlanır
karşı libstdc ++. Eğer libstdc ++ paylaşılan bir kitaplık olarak kullanılabilir ve -statik
seçeneği kullanılmaz, o zaman bu, paylaşılan sürümüne bağlanır libstdc ++. Yani
normalde iyi. Ancak, bazen sürümünü dondurmak yararlıdır. libstdc ++
tamamen statik bir bağlantıya kadar gitmeden program tarafından kullanılır. NS
-statik-libstdc++ seçeneği yönlendirir g ++ bağlantı için sürücü libstdc ++ statik olarak, olmadan
mutlaka diğer kütüphaneleri statik olarak bağlama.
-simgesel
Paylaşılan bir nesne oluştururken referansları global sembollere bağlayın. Herhangi biri hakkında uyar
çözülmemiş referanslar (bağlantı düzenleyici seçeneği tarafından geçersiz kılınmadıkça -Xlinker -z
-Xlinker tanımlar). Bu seçeneği yalnızca birkaç sistem destekler.
-T senaryo
kullanım senaryo bağlayıcı komut dosyası olarak. Bu seçenek, aşağıdakileri kullanan çoğu sistem tarafından desteklenir.
GNU bağlayıcı. İşletim sistemi olmayan çıplak tahta hedefler gibi bazı hedeflerde,
the -T seçenek, tanımlanmamış sembollere referanslardan kaçınmak için bağlanırken gerekli olabilir.
-Xlinker seçenek
Geçiş seçenek bağlayıcıya bir seçenek olarak. Bunu sisteme özel tedarik etmek için kullanabilirsiniz.
GCC'nin tanımadığı bağlayıcı seçenekleri.
Ayrı bir argüman alan bir seçenek iletmek istiyorsanız, kullanmanız gerekir. -Xlinker
iki kez, bir kez seçenek için ve bir kez de argüman için. Örneğin, geçmek -iddia etmek
tanımları, yazmalısın -Xlinker -iddia etmek -Xlinker tanımları. İşe yaramıyor
yazmak için -Xlinker "-iddia tanımlar", çünkü bu, tüm dizeyi bir
Bağlayıcının beklediği gibi olmayan tek bir argüman.
GNU linker'ı kullanırken, argümanları linker'a iletmek genellikle daha uygundur.
seçenekleri kullanarak seçenek=değer sözdizimi ayrı bağımsız değişkenler olarak değil. örneğin, sen
belirtebilir -Xlinker -Harita=çıktı.harita ziyade -Xlinker -Harita -Xlinker çıktı.harita.
Diğer bağlayıcılar, komut satırı seçenekleri için bu sözdizimini desteklemeyebilir.
-WI,seçenek
Geçiş seçenek bağlayıcıya bir seçenek olarak. Eğer seçenek virgül içerir, bölünür
virgüllerde birden fazla seçenek. Bir argüman iletmek için bu sözdizimini kullanabilirsiniz.
seçenek. Örneğin, -Wl,-Harita,çıktı.harita geçer -Harita çıktı.harita bağlayıcıya. Ne zaman
GNU linker'ı kullanarak aynı etkiyi aşağıdakilerle de elde edebilirsiniz: -Wl,-Harita=çıktı.harita.
NOT: Ubuntu 8.10 ve sonraki sürümlerde, LDFLAGS için seçenek -Wl,-z, tekrar kullanıldı.
Devre dışı bırakmak için şunu kullanın: -Wl,-z,norelro.
-u sembol
Sembolü taklit et sembol tanımsız, kütüphane modüllerinin bağlanmasını tanımlamaya zorlamak için
o. Kullanabilirsiniz -u yüklemeyi zorlamak için farklı sembollerle birden çok kez
ek kütüphane modülleri.
Opsiyonlar için rehber Ara
Bu seçenekler, başlık dosyalarının, kitaplıkların ve parçaların aranacağı dizinleri belirtir.
derleyicinin:
-Idir
dizini ekle dir başlık aranacak dizin listesinin başına
Dosyalar. Bu, bir sistem başlık dosyasını geçersiz kılmak için kullanılabilir, kendinizinkini değiştirerek
sürüm, bu dizinler sistem başlık dosyasından önce arandığından
dizinler. Ancak, içeren dizinleri eklemek için bu seçeneği kullanmamalısınız.
satıcı tarafından sağlanan sistem başlık dosyaları (kullanın -isistem bunun için). Birden fazla kullanırsanız
-I seçeneği, dizinler soldan sağa sırayla taranır; standart sistem
dizinler sonra gelir.
Standart bir sistem dizini veya ile belirtilen bir dizini içeriyorsa -isistem, Bir
ile de belirtilmiş -I, -I seçeneği yoksayılır. Dizin hala aranıyor ama
Sistemdeki normal konumunda bir sistem dizini olarak zincir içerir. Bu
GCC'nin buggy sistem başlıklarını düzeltme prosedürünün ve
"include_next" yönergesi yanlışlıkla değiştirilmez. gerçekten değişmen gerekiyorsa
sistem dizinleri için arama sırasını kullanın, -nostdinc ve / veya -isistem seçenekleri.
-iplugindir=dir
Tarafından geçirilen eklentileri aramak için dizini ayarlayın -feklenti=isim yerine
-feklenti=yol/isim.yani. Bu seçeneğin kullanıcı tarafından kullanılması amaçlanmamıştır, yalnızca
sürücü tarafından geçti.
-Alıntı yaparımdir
dizini ekle dir başlık aranacak dizin listesinin başına
dosyalar sadece durum için #Dahil etmek "dosya"; onlar aranmaz #Dahil etmek <dosya>,
aksi halde tıpkı -I.
-Ldir
Dizin ekle dir aranacak dizinler listesine -l.
-Bönek
Bu seçenek, yürütülebilir dosyaların, kitaplıkların, dahil edilen dosyaların ve
derleyicinin kendisinin veri dosyaları.
Derleyici sürücü programı, bir veya daha fazla alt programı çalıştırır. cpp, cc1, as ve ld.
deniyor önek çalıştırmaya çalıştığı her program için bir önek olarak, hem birlikte hem de onsuz
makine/versiyon/.
Çalıştırılacak her bir alt program için, derleyici sürücüsü önce aşağıdakileri dener: -B varsa ön ek.
Bu isim bulunamazsa veya -B belirtilmemişse, sürücü iki standart dener
önekler, /usr/lib/gcc/ ve /usr/yerel/lib/gcc/. Bunlardan hiçbiri bir sonuçla sonuçlanmıyorsa
bulunan dosya adı, değiştirilmemiş program adı,
içinde belirtilen dizinler PATH Çevre değişkeni.
Derleyici, tarafından sağlanan yolun olup olmadığını kontrol eder. -B bir dizine atıfta bulunur ve
gerekirse yolun sonuna bir dizin ayırıcı karakteri ekler.
-B Dizin adlarını etkin bir şekilde belirten önekler, dizinlerdeki kitaplıklar için de geçerlidir.
linker, çünkü derleyici bu seçenekleri -L bağlayıcı için seçenekler.
Derleyici çeviri yaptığı için önişlemcideki dosyaları dahil etmek için de geçerlidirler.
bu seçenekler -isistem önişlemci seçenekleri. Bu durumda derleyici
ekler dahil ön eke.
Çalışma zamanı destek dosyası libgcc.a kullanılarak da aranabilir. -B ön ek, eğer
gerekli. Orada bulunamazsa, yukarıdaki iki standart önek denenir ve
hepsi. Dosya bu yollarla bulunamazsa bağlantı dışında bırakılır.
gibi bir önek belirtmenin başka bir yolu -B önek çevreyi kullanmaktır
değişken GCC_EXEC_PREFIX.
Özel bir çamur olarak, tarafından sağlanan yol -B is [dir/]sahneN/, Burada N bir sayı
0 ila 9 aralığında, daha sonra ile değiştirilir [dir/]dahil. Bu, önyüklemeye yardımcı olmak içindir-
derleyiciyi bağlama.
-özellikler=dosya
Süreç dosya derleyici standartta okuduktan sonra gözlük dosya, geçersiz kılmak için
varsayılanlar gcc hangi anahtarların geçeceğini belirlerken sürücü programı kullanır
için cc1, cc1plus, as, ld, vb. Birden fazla -özellikler=dosya üzerinde belirtilebilir
komut satırı ve soldan sağa sırayla işlenirler.
--sysroot=dir
kullanım dir başlıklar ve kitaplıklar için mantıksal kök dizin olarak. Örneğin, eğer
derleyici normalde üstbilgileri arar / usr / include ve kütüphanelerde / USR / libBu
bunun yerine aramalar dir/usr/dahil ve dizin/usr/lib.
Hem bu seçeneği hem de -isysroot seçeneği, ardından --sistem kökü seçenek
kütüphaneler için geçerlidir, ancak -isysroot seçenek başlık dosyaları için geçerlidir.
GNU linker (sürüm 2.16'dan başlayarak) bunun için gerekli desteğe sahiptir.
seçenek. Bağlayıcınız bu seçeneği desteklemiyorsa, başlık dosyası yönü
--sistem kökü hala çalışıyor, ancak kütüphane yönü çalışmıyor.
--no-sysroot-soneki
Bazı hedefler için, ile belirtilen kök dizine bir sonek eklenir. --sistem kökü,
kullanılan diğer seçeneklere bağlı olarak, örneğin başlıklar şurada bulunabilir:
dizin/sonek/usr/include yerine dir/usr/dahil. Bu seçenek, eklemeyi devre dışı bırakır
böyle bir son ekin.
-BEN- Bu seçenek kullanımdan kaldırıldı. Lütfen kullan -Alıntı yaparım bunun yerine -I önce dizinler
the -BEN- ve kaldır -BEN-. Belirttiğiniz herhangi bir dizin -I önce seçenekler
-BEN- seçeneği yalnızca şu durumlarda aranır: #Dahil etmek "dosya"; aranmazlar
için #Dahil etmek <dosya>.
Ek dizinler ile belirtilirse -I seçeneklerinden sonra -BEN-, bunlar
dizinler herkes için aranır #Dahil etmek direktifler. (Normalde herşey -I dizinleri
Bu şekilde kullanılır.)
Buna ek olarak, -BEN- seçeneği, geçerli dizinin kullanımını engeller (burada
için ilk arama dizini olarak geçerli giriş dosyası geldi) #Dahil etmek "dosya".
Bu etkiyi geçersiz kılmanın bir yolu yoktur. -BEN-. Ile -BEN. arama belirtebilirsiniz
derleyici çağrıldığında geçerli olan dizin. tam olarak bu değil
önişlemcinin varsayılan olarak yaptığıyla aynıdır, ancak genellikle tatmin edicidir.
-BEN- başlık dosyaları için standart sistem dizinlerinin kullanımını engellemez.
Böylece, -BEN- ve -nostdinc bağımsızdır.
Belirtme Hedef makine ve derleyici Sürümü
GCC'yi çalıştırmanın genel yolu, adı verilen yürütülebilir dosyayı çalıştırmaktır. gccya da makine-gcc çapraz olduğunda
derleme veya makine-gcc-versiyon kurulu olandan farklı bir sürümü çalıştırmak için
son.
donanım Modeller ve Konfigürasyonlar
Her hedef makine tipinin kendi özel seçenekleri olabilir. -m, seçmek
çeşitli donanım modelleri veya konfigürasyonları arasında --- örneğin, 68010 - 68020, yüzer
yardımcı işlemci veya hiçbiri. Derleyicinin tek bir kurulu sürümü herhangi bir model için derlenebilir
veya belirtilen seçeneklere göre yapılandırma.
Derleyicinin bazı yapılandırmaları, genellikle aşağıdakiler için ek özel seçenekleri de destekler:
aynı platformdaki diğer derleyicilerle uyumluluk.
AAAArch64 Opsiyonlar
Bu seçenekler AArch64 uygulamaları için tanımlanmıştır:
-big-endian
Big-endian kodu oluşturun. Bu, GCC bir için yapılandırıldığında varsayılandır.
aarch64_be-*-* hedef.
-mgeneral-regs-yalnızca
Yalnızca genel kayıtları kullanan kod oluşturun.
-küçük endian
Küçük endian kodu oluşturun. Bu, GCC bir için yapılandırıldığında varsayılandır.
aarch64-*-* ama değil aarch64_be-*-* hedef.
-mcmodel=küçük
Küçük kod modeli için kod oluşturun. Program ve statik olarak tanımlanmış sembolleri
birbirinden 1 GB uzaklıkta olmalıdır. İşaretçiler 64 bittir. Programlar statik olabilir
veya dinamik olarak bağlantılıdır. Bu model tam olarak uygulanmamıştır ve çoğunlukla
küçük.
-mcmodel=küçük
Küçük kod modeli için kod oluşturun. Program ve statik olarak tanımlanmış
semboller birbirinin 4 GB'ı içinde olmalıdır. İşaretçiler 64 bittir. programlar olabilir
statik veya dinamik olarak bağlantılı. Bu, varsayılan kod modelidir.
-mcmodel=büyük
Büyük kod modeli için kod oluşturun. Bu, adresler hakkında herhangi bir varsayımda bulunmaz ve
bölümlerin boyutları. İşaretçiler 64 bittir. Programlar yalnızca statik olarak bağlanabilir.
-mstrict-hizalama
Hizalanmamış bellek referanslarının sistem tarafından ele alınacağını varsaymayın.
-momit-yaprak-çerçeve-işaretçi
-mno-omit-yaprak-çerçeve-işaretçi
Yaprak işlevlerinde çerçeve işaretçisini atlayın veya saklayın. Önceki davranış,
Varsayılan.
-mtls-lehçesi=az
TLS'nin dinamik erişimleri için iş parçacığı yerel depolama mekanizması olarak TLS tanımlayıcılarını kullanın
değişkenler. Bu varsayılandır.
-mtls-lehçesi=geleneksel
TLS'nin dinamik erişimleri için iş parçacığı yerel depolama mekanizması olarak geleneksel TLS'yi kullanın
değişkenler.
-mfix-korteks-a53-835769
-mno-fix-korteks-a53-835769
ARM Cortex-A53 hata numarası 835769 için geçici çözümü etkinleştirin veya devre dışı bırakın.
bellek talimatları ile 64-bit arasına bir NOP talimatı eklemeyi içerecektir
tamsayı çarpma-biriktirme talimatları.
-mart=isim
İsteğe bağlı olarak bir veya daha fazla eklenmiş hedef mimarinin adını belirtin
özellik değiştiriciler Bu seçenek forma sahiptir -mart=kemer{+[yok hayır]özellik}*, nerede
için sadece değer kemer is kolv8-a. için olası değerler özellik içinde belgelenmiştir
alt bölüm aşağıdadır.
Çakışan özellik değiştiricileri belirtildiğinde, en sağdaki özellik kullanılır.
GCC, oluştururken ne tür talimatlar yayınlayabileceğini belirlemek için bu adı kullanır.
montaj kodu. Bu seçenek, ile birlikte veya onun yerine kullanılabilir. -mcpu=
seçeneği.
-mcpu=isim
İsteğe bağlı olarak bir veya daha fazla özelliğin eklendiği hedef işlemcinin adını belirtin
değiştiriciler. Bu seçenek forma sahiptir -mcpu=cpu{+[yok hayır]özellik}*, mümkünse
değerleri cpu vardır genel, büyük. için olası değerler özellik belgelenmiştir
aşağıdaki alt bölüm.
Çakışan özellik değiştiricileri belirtildiğinde, en sağdaki özellik kullanılır.
GCC, oluştururken ne tür talimatlar yayınlayabileceğini belirlemek için bu adı kullanır.
montaj kodu.
-mtune=isim
Performansını ayarlamak için işlemcinin adını belirtin. Kod ayarlanacak
sanki hedef işlemci bu seçenekte belirtilen tipte ama yine de
tarafından belirtilen hedef işlemciyle uyumlu talimatlar -mcpu= seçeneği. Bu
Seçenek, özellik değiştiriciler tarafından eklenemez.
-Mart ve -mcpu özellik değiştiriciler
Birlikte kullanılan özellik değiştiriciler -Mart ve -mcpu aşağıdakilerden biri olabilir:
crc CRC uzantısını etkinleştirin.
kripto
Crypto uzantısını etkinleştirin. Bu, Gelişmiş SIMD'nin etkinleştirildiği anlamına gelir.
fp Kayan nokta yönergelerini etkinleştirin.
simd
Gelişmiş SIMD talimatlarını etkinleştirin. Bu, kayan nokta talimatlarının
etkinleştirilmiş. Bu, seçenekler için tüm mevcut olası değerler için varsayılandır. -Mart ve
-mcpu=.
Adapteva Epifani Opsiyonlar
Bunlar -m Adapteva Epiphany için seçenekler tanımlanmıştır:
-mhalf-reg-dosyası
"r32"..."r63" aralığında herhangi bir kayıt ayırma. Bu, kodun çalışmasına izin verir
bu kayıtlardan yoksun donanım varyantları.
-mprefer-kısa-insn-regs
Tercihli olarak, kısa talimat üretimine izin veren kayıtları tahsis edin. Bu
artan talimat sayısı ile sonuçlanır, bu nedenle bu, genel olarak azaltabilir veya artırabilir
kod boyutu.
-mbranch-maliyet=num
Şubelerin maliyetini kabaca ayarlayın num "basit" talimatlar. Bu maliyet sadece bir
buluşsaldır ve sürümler arasında tutarlı sonuçlar üretmesi garanti edilmez.
-mcmove
Koşullu hareketlerin oluşturulmasını etkinleştirin.
-mnops=num
Yaymak num NOP'lar, oluşturulan her talimattan önce.
-mno-yumuşak-cmpsf
Tek duyarlıklı kayan nokta karşılaştırmaları için bir "fsub" talimatı yayınlayın ve test edin
bayraklar. Bu, bir yazılım karşılaştırmasından daha hızlıdır, ancak yanlış sonuçlar alabilir
NaN'lerin varlığında veya iki farklı küçük sayı karşılaştırıldığında,
aralarındaki fark sıfır olarak hesaplanır. Varsayılan -msoft-cmpsf, Burada kullanım
daha yavaş, ancak IEEE uyumlu yazılım karşılaştırmaları.
-mstack-offset=num
Yığının üstü ile yığın işaretçisi arasındaki uzaklığı ayarlayın. Örneğin, 8 değeri
"sp+0...sp+7" aralığındaki sekiz baytın yaprak işlevleri tarafından kullanılabileceği anlamına gelir
yığın tahsisi olmadan. dışındaki değerler 8 or 16 denenmemiş ve olası değildir
İş. Bu seçeneğin ABI'yi değiştirdiğini de unutmayın; ile bir program derlemek
kitaplıkların derlendiğinden farklı yığın ofseti genellikle
İş. Farklı bir yığın kayması olup olmadığını değerlendirmek istiyorsanız bu seçenek yararlı olabilir.
size daha iyi kod verir, ancak aslında oluşturmak için farklı bir yığın ofseti kullanmak
çalışan programlar için alet zincirinin uygun şekilde yapılandırılması önerilir.
--with-stack-offset=num seçeneği.
-mno-yuvarlak-en yakın
Zamanlayıcının, yuvarlama modunun kesmeye ayarlandığını varsaymasını sağlayın. NS
varsayılan -mround-en yakın.
-mlong-çağrıları
Bir öznitelik tarafından aksi belirtilmemişse, tüm çağrıların belirtilen sınırın ötesinde olabileceğini varsayalım.
"b" / "bl" talimatlarının ofset aralığı ve bu nedenle işlev adresini yükleyin
(aksi halde doğrudan) bir arama yapmadan önce bir kayıt defterine. Bu varsayılandır.
-mshort-çağrıları
Bir öznitelik tarafından aksi belirtilmediyse, tüm doğrudan aramaların aralıkta olduğunu varsayın.
"b" / "bl" talimatlarından, doğrudan aramalar için bu talimatları kullanın. NS
varsayılan -mlong-çağrıları.
-msmall16
Adreslerin 16 bitlik işaretsiz değerler olarak yüklenebileceğini varsayın. Bu geçerli değil
işlev adresleri -mlong-çağrıları anlambilim geçerlidir.
-mfp-modu=kip
Kayan nokta biriminin geçerli modunu ayarlayın. Bu, yüzen-
işlev çağrısı ve dönüş zamanında sağlanan ve beklenen nokta modu. Yapımı
Bu mod, işlev başlangıcında ağırlıklı olarak ihtiyaç duyduğunuz modla eşleşir.
gereksiz mod geçişlerinden kaçınarak daha küçük ve daha hızlı programlar.
kip aşağıdaki değerlerden birine ayarlanabilir:
arayan
İşlev girişindeki herhangi bir mod geçerlidir ve işlev etkinleştirildiğinde korunur veya geri yüklenir.
döner ve diğer işlevleri çağırdığında. Bu mod derleme için kullanışlıdır.
kitaplıklar veya farklı derleme birimlerine dahil etmek isteyebileceğiniz diğer derleme birimleri
farklı hakim FPU modlarına sahip programlar ve bunları yapabilmenin rahatlığı
herhangi bir ekstra mod için boyut ve hız yükünden daha ağır basan tek bir nesne dosyası kullanın
daha fazlası ile ihtiyaç duyulana kıyasla, ihtiyaç duyulabilecek anahtarlama
geçerli FPU modunun özel seçimi.
kesmek
Bu, kesme ile kayan nokta hesaplamaları için kullanılan moddur (yani yuvarlak
sıfıra doğru) yuvarlama modu. Bu, kayan noktadan dönüştürmeyi içerir
tamsayı.
en yakın
Bu, yuvarlamadan en yakına veya- ile kayan noktalı hesaplamalar için kullanılan moddur.
hatta yuvarlama modu.
int Bu, FPU'da tamsayı hesaplamaları yapmak için kullanılan moddur, örneğin tamsayı
çarpma veya tamsayı çarpma ve biriktirme.
Varsayılan -mfp modu=arayan
-mnosplit-lohi
-mno-postinc
-mno-postmodify
Sırasıyla 32 bit yüklerin bölünmesini devre dışı bırakan kod oluşturma ince ayarları,
artış sonrası adreslerin oluşturulması ve değişiklik sonrası adreslerin oluşturulması. NS
varsayılanlar msplit-lohi, -mpost-inc, ve -mpost-değiştir.
-mnovect-çift
Tercih edilen SIMD modunu SIMode olarak değiştirin. Varsayılan -mvect-çift, Burada kullanım
Tercih edilen SIMD modu olarak DImode.
-max-vect-hizalama=num
SIMD vektör modu türleri için maksimum hizalama. num 4 veya 8 olabilir. Varsayılan
8. Pek çok kitaplık işlev arabirimi kullanılsa da, bunun bir ABI değişikliği olduğunu unutmayın.
boyutu ve/veya etkileyen yerlerde SIMD vektör modlarını kullanmazlarsa etkilenmezler.
ilgili türlerin hizalanması.
-msplit-vecmove-erken
Bölünmüş vektör, yeniden yüklemeden önce tek kelime hareketlerine taşınır. Teoride bu verebilir
daha iyi kayıt tahsisi, ancak şimdiye kadar genel olarak durum tam tersi gibi görünüyor.
-m1reg-reg
Yüklemeyi küçük negatif yapan -1 sabitini tutacak bir kayıt belirtin
sabitler ve belirli bit maskeleri daha hızlı. için izin verilen değerler reg vardır r43 ve r63,
bu kaydın sabit bir kayıt olarak kullanımını belirten ve Yok, yani hayır
register bu amaçla kullanılır. Varsayılan -m1reg-yok.
ARM Opsiyonlar
Bunlar -m Gelişmiş RISC Makineleri (ARM) mimarileri için seçenekler tanımlanmıştır:
-mabi=isim
Belirtilen ABI için kod oluşturun. İzin verilen değerler: apcs-gnu, at adet, aapcs,
aapcs-linux ve iwmmxt.
-mapcs-çerçevesi
Herkes için ARM Prosedür Çağrı Standardı ile uyumlu bir yığın çerçevesi oluşturun
kodun doğru yürütülmesi için kesinlikle gerekli olmasa bile.
Belirtme -fomit-frame-işaretçi bu seçenekle yığın çerçevelerinin olmamasına neden olur
yaprak fonksiyonları için üretilmiştir. Varsayılan -mno-apcs-çerçevesi.
-haritalar
Bu eş anlamlısı -mapcs-çerçevesi.
-mthumb-interwork
ARM ve Thumb komut setleri arasında aramayı destekleyen kod oluşturun.
Bu seçenek olmadan v5 öncesi mimarilerde iki komut seti kullanılamaz.
tek bir program içinde güvenilir bir şekilde kullanılır. Varsayılan -mno-başparmak-interwork, biraz beri
daha büyük kod oluşturulduğunda -mthumb-interwork belirtilir. AAPCS yapılandırmalarında
bu seçenek anlamsızdır.
-mno-schedule-prolog
İşlev önsözünde talimatların yeniden sıralanmasını veya
işlevin gövdesindeki talimatlarla birlikte bu talimatlar. Bunun anlamı, tüm
işlevler, tanınabilir bir dizi talimatla (ya da aslında bir seçimden biriyle) başlar.
küçük bir dizi farklı işlev girişinden) ve bu bilgi için kullanılabilir
yürütülebilir bir kod parçasının içindeki işlevlerin başlangıcını bulun. Varsayılan
-msched-prolog.
-mfloat-abi=isim
Hangi kayan noktalı ABI'nin kullanılacağını belirtir. İzin verilen değerler: yumuşak, yazılım ve
zor.
Belirtme yumuşak GCC'nin kayan- için kitaplık çağrıları içeren çıktı üretmesine neden olur.
nokta işlemleri. yazılım donanım kayan nokta kullanarak kod üretilmesine izin verir
yönergeler, ancak yine de yumuşak geçişli çağrı kurallarını kullanır. zor veriyor
kayan noktalı komutların oluşturulması ve FPU'ya özgü çağrı kurallarının kullanılması.
Varsayılan, belirli hedef yapılandırmaya bağlıdır. Sert şamandıranın
ve soft-float ABI'ler bağlantı uyumlu değildir; tüm programınızı ile derlemeniz gerekir
aynı ABI ve uyumlu bir kitaplık kümesiyle bağlantı.
-küçük endian
Little-endian modunda çalışan bir işlemci için kod oluşturun. Bu, varsayılan
tüm standart konfigürasyonlar.
-big-endian
Big-endian modunda çalışan bir işlemci için kod oluşturun; varsayılan derlemektir
küçük bir endian işlemci için kod.
-mwords-küçük-endian
Bu seçenek yalnızca büyük endian işlemciler için kod oluştururken geçerlidir. üret
bir küçük endian kelime sırası, ancak bir büyük endian bayt sırası için kod. Yani, bir bayt
formun sırası 32107654. Not: Bu seçenek yalnızca ihtiyacınız varsa kullanılmalıdır.
sürümleri tarafından oluşturulan big-endian ARM işlemcileri için kodla uyumluluk
2.8'den önceki derleyici. Bu seçenek artık kullanımdan kaldırılmıştır.
-mart=isim
Bu, hedef ARM mimarisinin adını belirtir. GCC bu adı
montaj kodu oluştururken ne tür talimatlar yayınlayabileceğini belirleyin. Bu
seçeneği ile birlikte veya onun yerine kullanılabilir. -mcpu= seçenek. İzin verilebilir
isimler şunlardır: armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, kolv7-a, armv7-r,
armv7-m, armv7e-m kolv8-a, armv8-a+crc, iwmmxt, IWMMXT2, ep9312.
-mart=armv8-a+crc ile birlikte ARMv8-A mimarisi için kod üretimi sağlar
isteğe bağlı CRC32 uzantıları.
-mart=yerli derleyicinin yapının mimarisini otomatik olarak algılamasına neden olur
bilgisayar. Şu anda, bu özellik yalnızca GNU/Linux'ta desteklenmektedir ve tümü desteklenmemektedir.
mimariler tanınır. Otomatik algılama başarısız olursa, seçeneğin
etkisi.
-mtune=isim
Bu seçenek, GCC'nin ayarlaması gereken hedef ARM işlemcisinin adını belirtir.
kodun performansı. Bazı ARM uygulamaları için daha iyi performans
Bu seçenek kullanılarak elde edilir. İzin verilen isimler şunlardır: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, kol7m, arm7d, arm7dm, arm7di, arm7dmi, arm70,
arm700, arm700i, arm710, arm710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, arm710t, arm720t, arm740t, güçlü kol, güçlü kol110, güçlü kol1100,
güçlü kol1110, 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, korteks-a5, korteks-a7, korteks-a8, korteks-a9,
korteks-a15, korteks-a53, korteks-r4, korteks-r4f, korteks-r5, korteks-r7, korteks-m4,
korteks-m3, korteks-m1, korteks-m0, korteks-m0plus, Marvell-pj4, x ölçekli, iwmmxt, IWMMXT2,
ep9312, fa526, fa626, fa606te, fa626te, fmp626, fa726te.
-mtune=genel-kemer GCC'nin aşağıdakilerin bir karışımı için performansı ayarlaması gerektiğini belirtir.
mimarideki işlemciler kemer. Amaç, bilgisayarda iyi çalışan kod oluşturmaktır.
bazılarına fayda sağlayan optimizasyonlar arasında denge sağlayan mevcut en popüler işlemciler
Aralıktaki CPU'lar ve diğer CPU'ların performans tuzaklarından kaçınma. Etkileri
CPU modelleri gelip giderken bu seçenek gelecekteki GCC sürümlerinde değişebilir.
-mtune=yerel derleyicinin yapı bilgisayarının CPU'sunu otomatik olarak algılamasına neden olur. NS
mevcutsa, bu özellik yalnızca GNU/Linux'ta desteklenir ve tüm mimariler desteklenmez.
tanındı. Otomatik algılama başarısız olursa seçeneğin hiçbir etkisi olmaz.
-mcpu=isim
Bu, hedef ARM işlemcisinin adını belirtir. GCC, bu adı türetmek için kullanır.
hedef ARM mimarisinin adı (belirtilmiş gibi -Mart) ve ARM işlemci
performans için ayarlanacak tür (belirtilmiş gibi) -mtune). Bu seçenek nerede
ile birlikte kullanılır -Mart or -mtune, bu seçenekler aşağıdakilere göre önceliklidir:
Bu seçeneğin uygun kısmı.
Bu seçenek için izin verilen adlar, -mtune.
-mcpu=genel-kemer ayrıca izin verilebilir ve eşdeğerdir -mart=kemer
-mtune=genel-kemer. Görmek -mtune daha fazla bilgi için.
-mcpu=yerel derleyicinin yapı bilgisayarının CPU'sunu otomatik olarak algılamasına neden olur. NS
mevcutsa, bu özellik yalnızca GNU/Linux'ta desteklenir ve tüm mimariler desteklenmez.
tanındı. Otomatik algılama başarısız olursa seçeneğin hiçbir etkisi olmaz.
-mfpu=isim
Bu, hangi kayan nokta donanımının (veya donanım öykünmesinin) kullanılabilir olduğunu belirtir.
hedef. İzin verilen isimler şunlardır: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, neon, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4,
fp-armv8, neon-fp-armv8, ve kripto-neon-fp-armv8.
If -msoft-float belirtilir, bu, kayan nokta değerlerinin biçimini belirtir.
Seçilen kayan nokta donanımı NEON uzantısını içeriyorsa (örn. -mfpu=neon),
kayan nokta işlemlerinin GCC'nin otomatik vektörleştirme geçişi tarafından oluşturulmadığını unutmayın
olmadıkça -funsafe-matematik-optimizasyonları da belirtilir. Bunun nedeni NEON donanımının
kayan nokta aritmetiği için IEEE 754 standardını tam olarak uygulamaz (içinde
belirli denormal değerler sıfır olarak kabul edilir), bu nedenle NEON talimatlarının kullanımı
hassasiyet kaybına neden olur.
-mfp16-formatı=isim
"__fp16" yarı duyarlıklı kayan nokta türünün biçimini belirtin. İzin verilebilir
isimler Yok, iEEE, ve alternatif; varsayılan Yok, bu durumda "__fp16"
tipi tanımlı değil.
-myapı-boyut-sınır=n
Tüm yapıların ve birleşimlerin boyutları, sayının katlarına yuvarlanır.
Bu seçenek tarafından ayarlanan bitler. İzin verilen değerler 8, 32 ve 64'tür. Varsayılan değer
farklı alet zincirleri için değişir. COFF hedefli takım zinciri için varsayılan değer
8. 64 değerine yalnızca temel alınan ABI destekliyorsa izin verilir.
Daha büyük bir sayı belirtmek daha hızlı, daha verimli kod üretebilir, ancak aynı zamanda
programın boyutunu artırın. Farklı değerler potansiyel olarak uyumsuzdur.
Tek bir değerle derlenen kod, kod veya kitaplıklarla çalışmayı bekleyemez
yapıları veya birleşimleri kullanarak bilgi alışverişinde bulunurlarsa, başka bir değerle derlenir.
-dönüşte çalışma
Bir "noreturn" işlevinin sonunda "iptal" işlevine bir çağrı oluşturun. Bu
işlev geri dönmeye çalışırsa yürütülür.
-mlong-çağrıları
-çok uzun aramalar
Derleyiciye, önce adresini yükleyerek işlev çağrıları yapmasını söyler.
bir kayıtta işlev görür ve ardından bu kayıt üzerinde bir alt program çağrısı gerçekleştirir. Bu
hedef işlev 64 megabaytlık adreslemenin dışındaysa anahtar gerekir
alt rutin çağrı talimatının ofset tabanlı versiyonunun aralığı.
Bu anahtar etkinleştirilse bile, tüm işlev çağrıları uzun çağrılara dönüşmez.
Sezgisel, statik işlevlerin, kısa arama nitelik,
kapsamı içinde olan işlevler #pragma no_long_calls direktif ve
tanımları halihazırda mevcut derleme içinde derlenmiş olan işlevler
birim uzun aramalara dönüştürülmez. Bu kuralın istisnaları, zayıf
fonksiyon tanımları, fonksiyonlar uzun arama nitelik veya Bölüm nitelik,
ve kapsamına giren işlevler #pragma uzun aramalar direktif her zaman
uzun aramalara dönüştü.
Bu özellik varsayılan olarak etkin değildir. belirtme -çok uzun aramalar geri yükler
varsayılan davranış, işlev çağrılarını bir #pragma
uzun_calls_off direktif. Bu anahtarların derleyicinin nasıl çalıştığı üzerinde hiçbir etkisi olmadığını unutmayın.
işlev işaretçileri aracılığıyla işlev çağrılarını işlemek için kod üretir.
-msingle-pic-base
PIC adreslemesi için kullanılan register'ı, onu bir dosyaya yüklemek yerine salt okunur olarak kabul edin.
Her işlev için önsöz. Çalışma zamanı sistemi bunu başlatmaktan sorumludur.
yürütme başlamadan önce uygun bir değerle kaydolun.
-mpic-kayıt=reg
PIC adreslemesi için kullanılacak kaydı belirtin. Standart PIC temel durumu için,
varsayılan, derleyici tarafından belirlenen herhangi bir uygun kayıt olacaktır. Tek PIC tabanı için
durumda, varsayılan R9 hedef EABI tabanlıysa veya yığın denetimi etkinse,
aksi takdirde varsayılan R10.
-mpoke-işlev-adı
Her işlevin adını, işlevden hemen önce gelen metin bölümüne yazın
önsöz. Oluşturulan kod şuna benzer:
t0
.ascii "arm_poke_function_name", 0
.hizala
t1
.word 0xFF000000 + (t1 - t0)
arm_poke_function_name
hareket ip, sp
stmfd sp!, {fp, ip, lr, pc}
alt FP, ip, #4
Bir yığın geri izleme gerçekleştirirken, kod, "fp + 'da depolanan "pc"nin değerini inceleyebilir.
0". İzleme işlevi "pc - 12" konumuna bakarsa ve en üstteki 8 bit
ayarlayın, o zaman bundan hemen önce gömülü bir fonksiyon adı olduğunu biliyoruz.
konumu ve uzunluğu "((pc[-3]) & 0xff000000)".
-mparmak
-marm
ARM ve Thumb durumlarında yürütülen kod oluşturma arasında seçim yapın. için varsayılan
çoğu yapılandırma, ARM durumunda yürütülen kod oluşturmaktır, ancak varsayılan
ile GCC yapılandırılarak değiştirilebilir. --ile-modu=belirtmek, bildirmek seçeneğini yapılandırın.
-mtpcs-çerçevesi
için Thumb Prosedür Çağrı Standardı ile uyumlu bir yığın çerçevesi oluşturun.
tüm yaprak olmayan işlevler. (Yaprak işlevi, başka hiçbir işlevi çağırmayan işlevdir.
işlevler.) Varsayılan -mno-tpcs-çerçevesi.
-mtpcs-yaprak-çerçeve
için Thumb Prosedür Çağrı Standardı ile uyumlu bir yığın çerçevesi oluşturun.
tüm yaprak fonksiyonları. (Yaprak işlevi, başka hiçbir işlevi çağırmayan işlevdir.)
Varsayılan -mno-apcs-yaprak çerçeve.
-mcallee-süper-birlikte çalışma
Bir ARM talimatı derlenen dosyadaki tüm harici olarak görünür işlevleri verir
işlevin geri kalanını yürütmeden önce Başparmak moduna geçen başlığı ayarlayın.
Bu, bu işlevlerin birlikte çalışmayan koddan çağrılmasına izin verir. Bu seçenek
AAPCS yapılandırmalarında geçerli değildir çünkü birlikte çalışma varsayılan olarak etkinleştirilmiştir.
-mcaller-süper-birlikte çalışma
İşlev işaretçileri (sanal işlevler dahil) aracılığıyla yapılan çağrıların doğru şekilde yürütülmesine izin verir
hedef kodun birlikte çalışma için derlenip derlenmediğine bakılmaksızın.
Bu seçenek varsa, bir işlev işaretçisini yürütme maliyetinde küçük bir ek yük vardır.
etkin. Bu seçenek, birlikte çalışma olduğundan AAPCS yapılandırmalarında geçerli değildir.
varsayılan olarak etkindir.
-mtp=isim
İş parçacığı yerel depolama işaretçisi için erişim modelini belirtin. Geçerli modeller
yumuşak"__aeabi_read_tp" için çağrılar oluşturan , cp15, hangi iş parçacığını getirir
doğrudan "cp15" ten işaretçi (arm6k mimarisinde desteklenir) ve Oto, Hangi
seçilen işlemci için mevcut en iyi yöntemi kullanır. Varsayılan ayar
Oto.
-mtls-lehçesi=diyalekt
İş parçacığı yerel depolamasına erişmek için kullanılacak lehçeyi belirtin. XNUMX diyalekts
desteklenen---gnu ve gnu2. gnu diyalekt için orijinal GNU şemasını seçer
yerel ve küresel dinamik TLS modellerini destekler. NS gnu2 lehçe GNU'yu seçer
paylaşılan kitaplıklar için daha iyi performans sağlayan tanımlayıcı şeması. GNU
tanımlayıcı şema, orijinal şema ile uyumludur, ancak yeni
assembler, linker ve kütüphane desteği. İlk ve yerel yürütme TLS modelleri
bu seçenekten etkilenmez ve her zaman orijinal şemayı kullanır.
-mword-yer değiştirmeler
Yalnızca sözcük boyutundaki değerlerde (yani R_ARM_ABS32) mutlak yer değiştirmeler oluşturun. Bu
çalışma zamanı yükleyicisinin yüklediği hedeflerde (uClinux, SymbianOS) varsayılan olarak etkindir
Bu kısıtlama ve ne zaman -fpic or -fPIC belirtilir.
-mfix-korteks-m3-ldrd
Bazı Cortex-M3 çekirdekleri, "ldrd" komutları ile veri bozulmasına neden olabilir.
örtüşen hedef ve temel kayıtlar kullanılır. Bu seçenek oluşturmayı önler
bu talimatlar. Bu seçenek şu durumlarda varsayılan olarak etkindir: -mcpu=korteks-m3 is
belirtildi.
-unaligned-erişim
-mno-hizasız-erişim
Adreslerden 16 ve 32 bit değerlerin okunmasını ve yazılmasını etkinleştirir (veya devre dışı bırakır)
16 veya 32 bit hizalı değil. Varsayılan olarak hizalanmamış erişim herkes için devre dışıdır
ARMv6 öncesi ve tüm ARMv6-M mimarileri ve diğer tüm mimariler için etkinleştirildi. Eğer
hizalanmamış erişim etkinleştirilmezse paketlenmiş veri yapılarındaki kelimelere erişilir
bir seferde bir bayt.
ARM özniteliği "Tag_CPU_unaligned_access" oluşturulan nesne dosyasında ayarlanacak
bu seçeneğin ayarına bağlı olarak doğru veya yanlış olarak. hizalanmamışsa
erişim etkinleştirilirse, "__ARM_FEATURE_UNALIGNED" önişlemci sembolü de olur
tanımladı.
-64 bit için-mneon
Skaler 64 bitlik işlemleri işlemek için Neon kullanılmasını sağlar. Bu varsayılan olarak devre dışıdır
çünkü verileri çekirdek kayıtlardan Neon'a taşımanın maliyeti yüksektir.
-mrestrict-it
ARMv8 kurallarına uymak için BT bloklarının oluşturulmasını kısıtlar. BT blokları
yalnızca belirli bir dizi talimattan tek bir 16 bitlik talimat içerir. Bu
seçeneği, ARMv8 Thumb modu için varsayılan olarak açıktır.
AVR Opsiyonlar
Bu seçenekler AVR uygulamaları için tanımlanmıştır:
-mmcu=mcu
Atmel AVR komut seti mimarilerini (ISA) veya MCU tipini belirtin.
Bu seçenek için varsayılan değer @tie{}"avr2"dir.
GCC, aşağıdaki AVR cihazlarını ve ISA'ları destekler:
"avr2"
8@tie{}KiB'ye kadar program belleğine sahip "klasik" cihazlar. mcu@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".
"avr25"
8@tie{}KiB program belleğine ve "MOVW" özelliğine sahip "klasik" cihazlar
talimat. mcu@tie{}= "ata5272", "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"
16@tie{}KiB'ye kadar 64@tie{}KiB program belleğine sahip "klasik" cihazlar.
mcu@tie{}= "at43usb355", "at76c711".
"avr31"
128@tie{}KiB program belleğine sahip "klasik" cihazlar. mcu@tie{}= "atmega103",
"at43usb320".
"avr35"
16@tie{}KiB'ye kadar 64@tie{}KiB program belleğine sahip "klasik" cihazlar ve
"MOVW" talimatı. mcu@tie{}= "ata5505", "atmega16u2", "atmega32u2",
"atmega8u2", "attiny1634", "attiny167", "at90usb162", "at90usb82".
"avr4"
8@tie{}KiB'ye kadar program belleğine sahip "gelişmiş" cihazlar. mcu@tie{}= "ata6285",
"ata6286", "atmega48", "atmega48a", "atmega48p", "atmega48pa", "atmega8",
"atmega8a", "atmega8hva", "atmega8515", "atmega8535", "atmega88", "atmega88a",
"atmega88p", "atmega88pa", "at90pwm1", "at90pwm2", "at90pwm2b", "at90pwm3",
"at90pwm3b", "at90pwm81".
"avr5"
16@tie{}KiB'ye kadar 64@tie{}KiB program belleğine sahip "gelişmiş" cihazlar.
mcu@tie{}= "ata5790", "ata5790n", "ata5795", "atmega16", "atmega16a",
"atmega16hva", "atmega16hva2", "atmega16hvb", "atmega16hvbrevb", "atmega16m1",
"atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a", "atmega164p",
"atmega164pa", "atmega165", "atmega165a", "atmega165p", "atmega165pa",
"atmega168", "atmega168a", "atmega168p", "atmega168pa", "atmega169", "atmega169a",
"atmega169p", "atmega169pa", "atmega26hvg", "atmega32", "atmega32a", "atmega32c1",
"atmega32hvb", "atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega3250pa",
"atmega328", "atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega3290pa", "atmega406",
"atmega48hvf", "atmega64", "atmega64a", "atmega64c1", "atmega64hve", "atmega64m1",
"atmega64rfa2", "atmega64rfr2", "atmega640", "atmega644", "atmega644a",
"atmega644p", "atmega644pa", "atmega645", "atmega645a", "atmega645p",
"atmega6450", "atmega6450a", "atmega6450p", "atmega649", "atmega649a",
"atmega649p", "atmega6490", "atmega6490a", "atmega6490p", "at90can32",
"at90can64", "at90pwm161", "at90pwm216", "at90pwm316", "at90scr100", "at90usb646",
"at90usb647", "at94k", "m3000".
"avr51"
128@tie{}KiB program belleğine sahip "gelişmiş" cihazlar. mcu@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega1280", "atmega1281", "atmega1284",
"atmega1284p", "at90can128", "at90usb1286", "at90usb1287".
"avr6"
3 bayt PC'ye sahip "gelişmiş" cihazlar, yani 128@tie{}KiB'den fazla programa sahip
bellek. mcu@tie{}= "atmega2560", "atmega2561".
"avrxmega2"
8@tie{}KiB'den fazla ve 64@tie{}KiB'ye kadar program belleğine sahip "XMEGA" cihazları.
mcu@tie{}= "atmxt112sl", "atmxt224", "atmxt224e", "atmxt336s", "atxmega16a4",
"atxmega16a4u", "atxmega16c4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32a4u", "atxmega32c4", "atxmega32d4", "atxmega32e5", "atxmega32x1".
"avrxmega4"
64@tie{}KiB'den fazla ve 128@tie{}KiB'ye kadar programa sahip "XMEGA" cihazları
bellek. mcu@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".
"avrxmega5"
64@tie{}KiB'den fazla ve 128@tie{}KiB'ye kadar programa sahip "XMEGA" cihazları
bellek ve 64@tie{}KiB'den fazla RAM. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".
"avrxmega6"
128@tie{}KiB'den fazla program belleğine sahip "XMEGA" cihazları. mcu@kravat{}=
"atmxt540s", "atmxt540sreva", "atxmega128a3", "atxmega128a3u", "atxmega128b1",
"atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4", "atxmega192a3",
"atxmega192a3u", "atxmega192c3", "atxmega192d3", "atxmega256a3", "atxmega256a3b",
"atxmega256a3bu", "atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3",
"atxmega384d3".
"avrxmega7"
128@tie{}KiB'den fazla program belleğine ve şundan daha fazlasına sahip "XMEGA" cihazları
64@tie{}KiB RAM. mcu@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".
"avr1"
Bu ISA, minimum AVR çekirdeği tarafından uygulanır ve yalnızca montajcı için desteklenir.
mcu@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".
-maccumulate-arg'lar
Giden işlev bağımsız değişkenlerini biriktirin ve aşağıdakiler için gerekli yığın alanını elde edin/bırakın
giden işlev bağımsız değişkenleri, işlev girişinde/sonsözünde bir kez. Bu seçenek olmadan,
giden argümanlar, bir işlev çağrılmadan önce gönderilir ve daha sonra açılır.
İşlev çağrısından sonra argümanları açmak AVR'de pahalı olabilir, bu nedenle
yığın alanını biriktirmek daha küçük yürütülebilir dosyalara yol açabilir çünkü argümanlar
böyle bir işlev çağrısından sonra yığından kaldırılmamalıdır.
Bu seçenek, birkaç arama gerçekleştiren işlevler için kod boyutunun küçülmesine neden olabilir.
printf benzeri işlevlere yapılan çağrılar gibi argümanlarını yığında alan işlevler.
-mbranch-maliyet=maliyet
Koşullu şube talimatları için şube maliyetlerini şu şekilde ayarlayın: maliyet. makul değerler
için maliyet küçük, negatif olmayan tam sayılardır. Varsayılan şube maliyeti 0'dır.
-mcall-prologları
Fonksiyonların girişleri/sonsözleri, uygun alt programlara yapılan çağrılar olarak genişletilir. kod
boyut daha küçüktür.
-nane8
"int" in 8 bit tam sayı olduğunu varsayın. Bu, her türün boyutunu etkiler: "char", 1'dir.
bayt, "int" 1 bayt, "uzun" 2 bayt ve "uzun uzun" 4 bayttır. Lütfen
bu seçeneğin C standartlarına uymadığını, ancak daha küçük sonuçlarla sonuçlandığını unutmayın.
kod boyutu.
-mno-kesmeler
Oluşturulan kod, donanım kesintileriyle uyumlu değil. Kod boyutu daha küçüktür.
-mrelax
"ÇAĞRI" yanıtını değiştirmeyi deneyin. Daha kısa olan "RCALL" ile "JMP" talimatı. "RJMP"
varsa talimat. "-mrelax" ayarı, yalnızca "--relax" seçeneğini ekler.
linker çağrıldığında linker komut satırı.
Sıçrama gevşemesi, atlama ofsetleri daha önce bilinmediği için bağlayıcı tarafından gerçekleştirilir.
kodu yer almaktadır. Bu nedenle, derleyici tarafından oluşturulan montajcı kodu aynıdır,
ancak yürütülebilir dosyadaki talimatlar, montajcıdaki talimatlardan farklı olabilir
kodu.
Bağlayıcı taslaklarına ihtiyaç duyulursa gevşetme açılmalıdır, "EIND" bölümüne bakın ve
aşağıdaki linker taslakları.
-msp8
Yığın işaretçi kaydına 8 bitlik bir kayıt gibi davranın, yani
yığın işaretçisi sıfırdır. Genel olarak, bu seçeneği elle ayarlamanız gerekmez.
Bu seçenek, derleyici tarafından dahili olarak multilib'leri seçmek ve oluşturmak için kullanılır.
"avr2" ve "avr25" mimarileri. Bu mimariler, cihazları olan ve olmayan cihazları karıştırır.
"SPH". "-mmcu=avr2" veya "-mmcu=avr25" dışındaki herhangi bir ayar için derleyici sürücüsü
bu seçeneği uygun derleyicinin komut satırından ekler veya kaldırır, çünkü
derleyici daha sonra cihazın veya mimarinin 8 bitlik bir yığın işaretçisine sahip olup olmadığını bilir ve böylece
"SPH" kaydı yok veya yok.
-mstrict-X
Donanım tarafından önerilen şekilde adres kaydı "X" kullanın. Bu, "X"in
yalnızca dolaylı, artımlı veya eksiltme öncesi adreslemede kullanılır.
Bu seçenek olmadan, "X" kaydı, "Y" veya "Z" ile aynı şekilde kullanılabilir.
daha sonra ek talimatlarla taklit edilir. Örneğin, bir değerin yüklenmesi
"X+const", negatif olmayan küçük bir "const < 64" ile bir kayıt defterine adresleme Rn is
olarak gerçekleştirildi
adiw r26, const ; X += sabit
ld , X ; = *X
sbiw r26, sabit ; X -= sabit
-mtiny-yığın
Yığın işaretçisinin yalnızca alt 8@tie{}bitlerini değiştirin.
-Waddr-boşluk-dönüştürme
Ortaya çıkan adresin ortaya çıkması durumunda, adres alanları arasındaki dönüşümler hakkında uyarın.
alan, gelen adres alanında bulunmaz.
"EIND" ve 128 Ki Bayt'tan fazla Flash'a sahip Cihazlar
Uygulamadaki işaretçiler 16@tie{}bit genişliğindedir. Bir işlevin veya etiketin adresi
dolaylı atlamaların ve çağrıların herhangi bir kodu hedefleyebilmesi için kelime adresi olarak temsil edilir
64@tie{}Ki kelime aralığında adres.
128@tie{}Ki bayttan fazla olan cihazlarda dolaylı atlamayı kolaylaştırmak için
program hafıza alanı, "EIND" olarak adlandırılan özel bir fonksiyon kaydı vardır.
"EICALL" veya "EIJMP" talimatları verildiğinde hedef adresin en önemli kısmı
Kullanılmış.
Bu cihazlardaki dolaylı atlamalar ve çağrılar derleyici tarafından aşağıdaki gibi işlenir ve
bazı sınırlamalara tabidir:
· Derleyici asla "EIND" ayarlamaz.
· Derleyici, "EICALL"/"EIJMP" yönergelerinde örtük olarak "EIND" kullanır veya şunları okuyabilir:
Bir "RET" aracılığıyla dolaylı bir çağrıyı/atlamayı taklit etmek için doğrudan "EIND"
talimat.
· Derleyici, "EIND"nin başlatma kodu sırasında veya işlem sırasında asla değişmediğini varsayar.
başvuru. Özellikle "EIND", fonksiyonda veya kesintide kaydedilmez/geri yüklenmez
hizmet rutini prolog/sonsöz.
· Fonksiyonlara ve hesaplanan goto'ya dolaylı çağrılar için, linker koçanları. taslaklar
atlama pedleri bazen denir trambolinler. Böylece, dolaylı çağrı/atlama şuraya atlar:
böyle bir saplama. Saplama, istenen adrese doğrudan bir atlamayı içerir.
· Bağlayıcının taslakları oluşturması için Bağlayıcı gevşemesi açık olmalıdır
doğru bir tüm durum. "-mrelax" derleyici seçeneğine ve liner seçeneğine bakın
"--rahatlamak". Bağlayıcının saplamalar oluşturması gereken ancak
gevşemeden ve yardımcı bir hata mesajı olmadan iptal eder.
· Varsayılan bağlayıcı komut dosyası "EIND = 0" olan kod için düzenlenmiştir. kod varsa
"EIND != 0" ile bir kurulum için çalışmak için, sırayla özel bir bağlayıcı komut dosyası kullanılmalıdır.
adı ".trambolines" ile başlayan bölümlerin bulunduğu bölüme yerleştirmek için
"EIND" işaret eder.
· libgcc'den gelen başlatma kodu asla "EIND"yi ayarlamaz. Başlangıç kodunun bir karışım olduğuna dikkat edin
libgcc ve AVR-LibC'den kod. AVR-LibC'nin "EIND" üzerindeki etkisi için bkz. AVR-
LibC kullanım kılavuzu ("http://nongnu.org/avr-libc/user-manual/").
· Kullanıcıya özel başlatma kodunun "EIND"yi erken kurması meşrudur, örneğin
".init3" bölümünde bulunan başlatma kodu aracı. Bu tür kod önce çalışır
RAM'i başlatan ve yapıcıları çağıran genel başlatma kodu, ancak biraz sonra
AVR-LibC'den vektör tablosunun bulunduğu segmente "EIND" ayarlayan başlangıç kodu
bulunmaktadır.
#Dahil etmek
Statik boşluk
__attribute__((section(".init3"),çıplak,kullanılmış,no_instrument_function))
init3_set_eind (geçersiz)
{
__asm uçucu ("ldi r24,pm_hh8(__trambolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND) : "r24","bellek");
}
"__trambolines_start" sembolü, bağlayıcı komut dosyasında tanımlanmıştır.
· Saplamalar, aşağıdaki iki koşul yerine getirildiğinde, bağlayıcı tarafından otomatik olarak oluşturulur.
ile:
-
(için kısa oluşturmak koçanları) şöyle:
LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))
-
dışında saplamaların bulunduğu bölüm.
· Derleyici, aşağıdaki durumlarda kod etiketleri için bu tür "gs" değiştiricileri yayar:
-
-
- -mcall-prologları>
komut satırı seçeneği.
-
tabloları belirtebilirsiniz -fno-atlama-tabloları komut satırı seçeneği.
-
-
· Bunun gibi sembolik olmayan adreslere atlamak değil desteklenen:
int main (void)
{
/* 0x2 word adresinde çağrı fonksiyonu */
dönüş ((int(*)(void)) 0x2)();
}
Bunun yerine, bir saplama ayarlanmalıdır, yani fonksiyon bir sembol aracılığıyla çağrılmalıdır.
(örnekte "func_4"):
int main (void)
{
harici int func_4 (geçersiz);
/* 0x4 bayt adresinde çağrı fonksiyonu */
dönüş func_4();
}
ve uygulama "-Wl,--defsym,func_4=0x4" ile bağlanmalıdır. Alternatif olarak, "func_4"
bağlayıcı komut dosyasında tanımlanabilir.
"RAMPD", "RAMPX", "RAMPY" ve "RAMPZ" Özel Fonksiyon Kayıtlarının Kullanımı
Bazı AVR cihazları, erişilebilen 64@tie{}KiB aralığından daha büyük bellekleri destekler
16 bit işaretçiler ile. Bu 64@tie{}KiB aralığının dışındaki bellek konumlarına erişmek için,
"RAMP" kaydının içeriği adresin yüksek kısmı olarak kullanılır: "X", "Y", "Z"
adres kaydı "RAMPX", "RAMPY", "RAMPZ" özel işleviyle birleştirilir
geniş bir adres almak için sırasıyla kaydolun. Benzer şekilde, "RAMPD" ile birlikte kullanılır
doğrudan adresleme
· Başlangıç kodu, "RAMP" özel fonksiyon kayıtlarını sıfır ile başlatır.
· Eğer bir AVR adlı Adres Adlandırılmış boşluklar adres uzay genel veya "__flash" dışında
kullanılır, ardından "RAMPZ" işlemden önce gerektiği gibi ayarlanır.
· Cihaz 64@tie{KiB}'den büyük RAM'i destekliyorsa ve derleyicinin değişmesi gerekiyorsa
Bir işlemi gerçekleştirmek için "RAMPZ", işlemden sonra "RAMPZ" sıfırlanır.
· Cihaz belirli bir "RAMP" kaydı ile birlikte geliyorsa, ISR prologue/epilogue
bu SFR'yi kaydeder/geri yükler ve ISR kodunun olası olması durumunda sıfırla başlatır.
(dolaylı olarak) kullanın.
· 64@tie{KiB}'den büyük RAM, AVR hedefleri için GCC tarafından desteklenmez. Eğer kullanırsan
16 bitlik adres aralığı dışındaki konumlardan okumak ve değiştirmek için satır içi montajcı
"RAMP" kayıtlarından biri, erişimden sonra sıfıra sıfırlamanız gerekir.
AVR Yerleşik Makrolar
GCC, kullanıcı kodunun varlığı veya
özelliklerin olmaması. Aşağıdaki yerleşik makrolardan hemen hemen herhangi biri cihazdan çıkarılmıştır.
yetenekleri ve dolayısıyla "-mmcu=" komut satırı seçeneği tarafından tetiklenir.
Daha da fazla AVR'ye özgü yerleşik makro için bkz. AVR adlı Adres Uzayları ve AVR Gömme
fonksiyonlar.
"__AVR_ARCH__"
Mimariyi tanımlayan bir ondalık sayıya çözümlenen yerleşik makro ve
"-mmcu='ya bağlıdırmcu" seçenek. Olası değerler şunlardır:
2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107
için mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
sırasıyla "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7". Eğer mcu
bir aygıtı belirtir, bu yerleşik makro buna göre ayarlanır. örneğin, ile
"-mmcu=atmega8" makrosu 4 olarak tanımlanacaktır.
"__AVR_cihaz__"
"-mmcu=" ayarıcihaz" cihazın adını yansıtan bu yerleşik makroyu tanımlar.
Örneğin, "-mmcu=atmega8" yerleşik makroyu "__AVR_ATmega8__" tanımlar,
"-mmcu=attiny261a", "__AVR_ATtiny261A__" vb. tanımlar.
Yerleşik makroların adları "__AVR_cihaz__" nerede cihaz olduğunu
AVR kullanım kılavuzundaki cihaz adı. Arasındaki fark cihaz yerleşik olarak
makro ve cihaz "-mmcu=cihaz" ikincisi her zaman küçük harftir.
If cihaz bir cihaz değil, yalnızca "avr51" gibi bir çekirdek mimaridir, bu makro
tanımlanamaz.
"__AVR_XMEGA__"
Cihaz / mimari, XMEGA cihaz ailesine aittir.
"__AVR_HAVE_ELPM__"
Cihaz "ELPM" talimatına sahiptir.
"__AVR_HAVE_ELPMX__"
Cihazda "ELPM Rn,Z" ve "ELPM Rn,Z+" talimatları.
"__AVR_HAVE_MOVW__"
Cihaz, 16 bitlik kayıt-kayıt hareketlerini gerçekleştirmek için "MOVW" talimatına sahiptir.
"__AVR_HAVE_LPMX__"
Cihaz, "LPM Rn,Z" ve "LPM Rn,Z+" talimatları.
"__AVR_HAVE_MUL__"
Cihazın bir donanım çarpanı vardır.
"__AVR_HAVE_JMP_CALL__"
Cihaz "JMP" ve "CALL" talimatlarına sahiptir. Bu, cihazlar için geçerlidir.
en az 16@tie{}KiB program belleği.
"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
Cihaz "EIJMP" ve "EICALL" talimatlarına sahiptir. Cihazlar için durum bu
128@tie{}KiB'den fazla program belleği ile. Bu aynı zamanda programın
sayaç (PC) 3@tie{}bayt genişliğindedir.
"__AVR_2_BYTE_PC__"
Program sayacı (PC) 2@tie{}bayt genişliğindedir. Bu, en fazla olan cihazlar için geçerlidir.
128@tie{}KiB program belleği.
"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Yığın işaretçisi (SP) kaydı, 8 bitlik sırasıyla 16 bitlik kayıt olarak kabul edilir.
derleyici. Bu makroların tanımı "-mtiny-stack" tarafından etkilenir.
"__AVR_HAVE_SPH__"
"__AVR_SP8__"
Cihaz, SPH (yığın işaretçisinin yüksek kısmı) özel fonksiyon kaydına sahiptir veya
sırasıyla 8 bitlik bir yığın işaretçisi. Bu makroların tanımı şunlardan etkilenir:
"-mmcu=" ve "-mmcu=avr2" ve "-mmcu=avr25" durumlarında ayrıca "-msp8" ile.
"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Cihaz "RAMPD", "RAMPX", "RAMPY", "RAMPZ" özel fonksiyon kaydına sahiptir,
respectivamente.
"__NO_KESİNTİLER__"
Bu makro, "-mno-interrupts" komut satırı seçeneğini yansıtır.
"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Bazı AVR cihazları (AT90S8515, ATmega103) 32 bitlik talimatları atlamamalıdır.
donanım hatası. Atlama talimatları "SBRS", "SBRC", "SBIS", "SBIC" ve "CPSE"dir.
İkinci makro yalnızca "__AVR_HAVE_JMP_CALL__" da ayarlanmışsa tanımlanır.
"__AVR_SFR_OFFSET__=telafi etmek"
I/O özel fonksiyon kayıtlarını doğrudan "IN" gibi adresleyebilen komutlar,
"OUT", "SBI" vb., bir talimatla adreslenmiş gibi farklı bir adres kullanabilir.
"LD" veya "STS" gibi RAM'e erişin. Bu ofset, cihaz mimarisine bağlıdır ve
ilgili I/O@tie{}adresini almak için RAM adresinden çıkarılacaktır.
"__WITH_AVRLIBC__"
Derleyici, AVR-Libc ile birlikte kullanılmak üzere yapılandırılmıştır. Bkz.
"--with-avrlibc" yapılandırma seçeneği.
Blackfin Opsiyonlar
-mcpu=cpu[-sirevizyon]
Hedef Blackfin işlemcisinin adını belirtir. Şu anda, cpu biri olabilir
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.
İsteğe bağlı sirevizyon Blackfin hedefinin silikon revizyonunu belirtir
işlemci. Hedeflenen silikon revizyonu için mevcut tüm geçici çözümler etkinleştirildi.
If sirevizyon is Yok, hiçbir geçici çözüm etkinleştirilmemiştir. Eğer sirevizyon is herhangi, herşey
hedeflenen işlemci için geçici çözümler etkinleştirildi. "__SILICON_REVISION__" makrosu
içindeki büyük ve küçük sayıları temsil eden iki onaltılık basamakla tanımlanır.
silikon revizyonu. Eğer sirevizyon is Yok, "__SILICON_REVISION__" tanımlı değil.
If sirevizyon is herhangi, "__SILICON_REVISION__" 0xffff olarak tanımlanır. Eğer bu
isteğe bağlı sirevizyon kullanılmaz, GCC, ürünün bilinen en son silikon revizyonunu varsayar.
hedeflenen Blackfin işlemci.
GCC, belirtilen için bir önişlemci makrosu tanımlar. cpu. Için bfin-elf alet zinciri,
bu seçenek, libgloss tarafından sağlanan donanım BSP'sinin aşağıdaki durumlarda bağlanmasına neden olur. -msim is
verilmedi.
Bu seçenek olmadan, bf532 varsayılan olarak işlemci olarak kullanılır.
için destek olduğunu unutmayın bf561 eksik. İçin bf561, yalnızca önişlemci makrosu
tanımladı.
-msim
Programın simülatörde çalıştırılacağını belirtir. Bu, simülatöre neden olur
Bağlantı kurulacak libgloss tarafından sağlanan BSP. Bu seçenek yalnızca bfin-elf
alet zinciri. gibi bazı diğer seçenekler -orta-paylaşılan-kütüphane ve -mfdpic, ima etmek
-msim.
-momit-yaprak-çerçeve-işaretçi
Çerçeve işaretçisini yaprak işlevleri için bir kayıtta tutmayın. Bu,
çerçeve işaretçilerini kaydetme, ayarlama ve geri yükleme talimatları ve ekstra bir kayıt yapar
yaprak fonksiyonlarında mevcuttur. Seçenek -fomit-frame-işaretçi çerçeveyi kaldırır
hata ayıklamayı zorlaştırabilecek tüm işlevler için işaretçi.
-mspecld-anomali
Etkinleştirildiğinde, derleyici oluşturulan kodun
atlama talimatlarından sonra spekülatif yükler. Bu seçenek kullanılırsa,
"__WORKAROUND_SPECULATIVE_LOADS" tanımlandı.
-mno-specld-anomali
Spekülatif yüklerin oluşmasını önlemek için fazladan kod üretmeyin.
-mcsync-anomali
Etkinleştirildiğinde, derleyici oluşturulan kodun CSYNC veya
SSYNC komutları, koşullu dallardan hemen sonra. Bu seçenek kullanılırsa,
"__WORKAROUND_SPECULATIVE_SYNCS" tanımlandı.
-mno-csync-anomali
CSYNC veya SSYNC komutlarının da oluşmasını önlemek için fazladan kod oluşturmayın
koşullu bir daldan hemen sonra.
-mlow-64k
Etkinleştirildiğinde, derleyici, tüm
program düşük 64k belleğe sığar.
-düşük-64k
Programın keyfi olarak büyük olduğunu varsayın. Bu varsayılandır.
-mstack-kontrol-l1
uClinux tarafından L1 karalama defteri belleğine yerleştirilen bilgileri kullanarak yığın denetimi yapın
çekirdek.
-orta-paylaşılan-kütüphane
Kitaplık kimliği yöntemi aracılığıyla paylaşılan kitaplıkları destekleyen kod oluşturun. Bu izin verir
sanal belleği olmayan bir ortamda yerinde ve paylaşılan kitaplıkları yürütmek için
yönetmek. Bu seçenek şu anlama gelir: -fPIC. Birlikte bfin-elf hedef, bu seçenek ima eder
-msim.
-mno-id-paylaşılan-kütüphane
Kimlik tabanlı paylaşılan kitaplıkların kullanıldığını varsaymayan kod oluşturun. Bu
varsayılan.
-mleaf-id-paylaşılan-kütüphane
Kitaplık kimliği yöntemi aracılığıyla paylaşılan kitaplıkları destekleyen, ancak
bu kitaplığın veya yürütülebilir dosyanın, diğer kimlik paylaşımlı kitaplıklara bağlanmayacağını.
Bu, derleyicinin atlamalar ve çağrılar için daha hızlı kod kullanmasını sağlar.
-mno-leaf-id-paylaşılan-kütüphane
Derlenmekte olan kodun, herhangi bir ID paylaşımlı kitaplığa bağlanmayacağını varsaymayın.
Atlama ve çağrı insn'leri için daha yavaş kod oluşturulur.
-mshared-library-id=n
Derlenmekte olan kimlik tabanlı paylaşılan kitaplığın kimlik numarasını belirtir.
0 değeri belirtmek daha kompakt kod üretir; diğer değerlerin belirtilmesi kuvvetleri
bu sayının mevcut kütüphaneye tahsisi, ancak artık yer veya zaman değil
bu seçeneği atlamaktan daha etkilidir.
-msep-veri
Veri segmentinin farklı bir bellek alanına yerleştirilmesine izin veren kod oluşturun
metin bölümünden. Bu, olmayan bir ortamda yerinde yürütmeye izin verir.
metin bölümüne karşı yer değiştirmeleri ortadan kaldırarak sanal bellek yönetimi.
-mno-eylül-veri
Veri segmentinin metin segmentini takip ettiğini varsayan kod oluşturun. Bu
varsayılan.
-mlong-çağrıları
-çok uzun aramalar
Derleyiciye, önce adresini yükleyerek işlev çağrıları yapmasını söyler.
bir kayıtta işlev görür ve ardından bu kayıt üzerinde bir alt program çağrısı gerçekleştirir. Bu
hedef işlev 24 bitlik adresleme aralığının dışındaysa anahtar gereklidir.
alt rutin çağrı talimatının ofset tabanlı versiyonu.
Bu özellik varsayılan olarak etkin değildir. belirtme -çok uzun aramalar geri yükler
Varsayılan davranış. Bu anahtarların derleyicinin nasıl oluşturduğu üzerinde hiçbir etkisi olmadığını unutmayın.
işlev çağrılarını işlev işaretçileri aracılığıyla işlemek için kod.
-mfast-fp
Hızlı kayan nokta kitaplığıyla bağlantı kurun. Bu kitaplık bazı IEEE'leri rahatlatır
girdileri Sayı Değil'e (NAN) karşı kontrol etmek için kayan nokta standardı kuralları,
performans ilgisi.
-minline-plt
Bilinmeyen işlevlere yapılan işlev çağrılarında PLT girişlerinin satır içine alınmasını etkinleştirin.
yerel olarak bağlayın. Olmadan etkisi yok -mfdpic.
-multicore
Çok çekirdekli Blackfin işlemciler için bağımsız bir uygulama oluşturun. Bu seçenek neden olur
uygun başlangıç dosyaları ve kullanılacak çok çekirdeği destekleyen bağlantı komut dosyaları ve
makro "__BFIN_MULTICORE". Sadece ile kullanılabilir -mcpu=bf561[-sirevizyon].
Bu seçenek ile kullanılabilir -mcorea or -mcoreb, tek uygulamayı seçen-
çekirdek başına programlama modeli. Olmadan -mcorea or -mcoreb,
tek uygulama/çift çekirdekli programlama modeli kullanılır. Bu modelde ana
Core B'nin işlevi "coreb_main" olarak adlandırılmalıdır.
Bu seçenek kullanılmazsa, tek çekirdekli uygulama programlama modeli kullanılır.
-mcorea
Başına bir uygulama kullanırken BF561'in Core A'sı için bağımsız bir uygulama oluşturun.
çekirdek programlama modeli. Core'u desteklemek için uygun başlangıç dosyaları ve bağlantı komut dosyaları kullanılır
A ve "__BFIN_COREA" makrosu tanımlanır. Bu seçenek yalnızca
ile bağlantılı -multicore.
-mcoreb
Başına bir uygulama kullanırken BF561'in Core B'si için bağımsız bir uygulama oluşturun.
çekirdek programlama modeli. Core'u desteklemek için uygun başlangıç dosyaları ve bağlantı komut dosyaları kullanılır
B ve "__BFIN_COREB" makrosu tanımlanır. Bu seçenek kullanıldığında "coreb_main"
"ana" yerine kullanılmalıdır. Bu seçenek yalnızca aşağıdakilerle birlikte kullanılabilir:
-multicore.
-msdram
SDRAM için bağımsız bir uygulama oluşturun. Uygun başlangıç dosyaları ve bağlantı komut dosyaları kullanılır
Uygulamayı SDRAM'e yerleştirmek için "__BFIN_SDRAM" makrosu tanımlanır. NS
yükleyici, uygulamayı yüklemeden önce SDRAM'i başlatmalıdır.
-micplb
ICPLB'lerin çalışma zamanında etkinleştirildiğini varsayın. Bunun belirli bir anomali üzerinde etkisi vardır.
geçici çözümler. Linux hedefleri için varsayılan, ICPLB'lerin etkinleştirildiğini varsaymaktır; için
bağımsız uygulamalar varsayılan kapalıdır.
C6X Opsiyonlar
-mart=isim
Bu, hedef mimarinin adını belirtir. GCC, belirlemek için bu adı kullanır
montaj kodu oluştururken ne tür talimatlar verebilir. İzin verilebilir
isimler şunlardır: c62x, c64x, c64x+, c67x, c67x+, c674x.
-big-endian
Büyük endian hedefi için kod oluşturun.
-küçük endian
Küçük bir endian hedefi için kod oluşturun. Bu varsayılandır.
-msim
Simülatöre uygun başlangıç dosyalarını ve bağlayıcı komut dosyasını seçin.
-msdata=varsayılan
Küçük global ve statik verileri .neardata tarafından işaret edilen bölüm,
"B14" kaydedin. Küçük başlatılmamış genel ve statik verileri .bss Bölüm,
bitişik olan .neardata Bölüm. Küçük salt okunur verileri .rodata
Bölüm. Büyük veri parçaları için kullanılan ilgili bölümler şunlardır: .fardata, .uzak
ve .const.
-msdata=tümü
Sadece küçük nesneleri değil tüm verileri küçük veriler için ayrılmış bölümlere koyun ve
bunlara erişmek için "B14" kaydına göre adreslemeyi kullanın.
-msdata=yok
Küçük veriler için ayrılmış bölümleri kullanmayın ve mutlak adresleri kullanın.
tüm verilere erişin. Başlatılan tüm global ve statik verileri .fardata Bölüm,
ve içindeki tüm başlatılmamış veriler .uzak Bölüm. Tüm sabit verileri .const
Bölüm.
CRIS Opsiyonlar
Bu seçenekler, özellikle CRIS portları için tanımlanmıştır.
-mart=mimari tipi
-mcpu=mimari tipi
Belirtilen mimari için kod oluşturun. için seçimler mimari tipi vardır
v3, v8 ve v10 sırasıyla ETRAX 4, ETRAX 100 ve ETRAX 100 LX için. Varsayılan v0
varsayılanın olduğu cris-axis-linux-gnu dışında v10.
-mtune=mimari tipi
Ayarla mimari tipi hariç, oluşturulan kod hakkında geçerli olan her şey
ABI ve mevcut talimatlar seti. için seçimler mimari tipi vardır
ile aynı -mart=mimari tipi.
-mmax-yığın-çerçevesi=n
Bir işlevin yığın çerçevesi aşıldığında uyar n bayt.
-metrax4
-metrax100
Seçenekler -metrax4 ve -metrax100 için eşanlamlıdır -mart=v3 ve -mart=v8
respectivamente.
-mmul-hata-geçici çözüm
-mno-mul-bug-geçici çözüm
CPU modelleri için "muls" ve "mulu" talimatlarındaki bir hatayı giderin.
geçerlidir. Bu seçenek varsayılan olarak etkindir.
-mpdebug
Derleme kodunda CRIS'e özgü ayrıntılı hata ayıklamayla ilgili bilgileri etkinleştirin. Bu
seçeneği de kapatma etkisine sahiptir. #UYGULAMA YOK biçimlendirilmiş kod göstergesi
Montaj dosyasının başında assembler.
-mcc-init
Önceki talimattan koşul kodu sonuçlarını kullanmayın; her zaman karşılaştırmak yayar ve
koşul kodlarını kullanmadan önce talimatları test edin.
-mno-yan etkiler
Sonradan farklı adresleme modlarında yan etkileri olan komutları yayınlamayın.
artış.
-mstack-hizalama
-mno-yığın hizalama
-mdata hizalama
-mno-veri hizalama
-mconst-hizalama
-mno-const-hizalama
Bu seçenekler (yok hayır- seçenekler) yığın çerçevesi için düzenleme (düzenlemeleri ortadan kaldırma),
maksimum tek veri erişim boyutu için hizalanacak bireysel veriler ve sabitler
seçilen CPU modeli için. Varsayılan, 32 bit hizalamayı düzenlemektir. ABI
yapı düzeni gibi ayrıntılar bu seçeneklerden etkilenmez.
-m32-bit
-m16-bit
-m8-bit
Yukarıdaki yığın verileri ve sabit hizalama seçeneklerine benzer şekilde, bu seçenekler aşağıdakileri düzenler:
yığın çerçevesi, yazılabilir veriler ve sabitlerin tümü 32-bit, 16-bit veya 8-bit hizalı olacak şekilde.
Varsayılan, 32 bit hizalamadır.
-mno-prolog-sonsöz
-mprologue-sonsöz
İle -mno-prolog-sonsöz, kurulan normal fonksiyon prologu ve epilog
yığın çerçevesi atlanır ve geri dönüş talimatı veya dönüş dizisi yoktur
kodda oluşturulur. Bu seçeneği yalnızca görsel inceleme ile birlikte kullanın.
derlenmiş kod: çağrı kaydedilen kayıtların olması gerektiğinde hiçbir uyarı veya hata oluşturulmaz
kaydedilir veya yerel değişkenler için depolama ayrılması gerekir.
-mno-gotplt
-mgotplt
İle -fpic ve -fPIC, yüklenen talimat dizileri oluşturmayın (oluşturmayın)
yerine GOT'un PLT bölümündeki işlevler için adresler (diğerlerinde geleneksel
mimariler) PLT'ye çağrı yapar. Varsayılan -mgotplt.
-melf
Eski operasyonsuz seçenek yalnızca cris-axis-elf ve cris-axis-linux-gnu ile tanınır
hedefler.
-mlinux
Eski operasyonsuz seçeneği yalnızca cris-axis-linux-gnu hedefiyle tanınır.
-sim
cris-axis-elf için tanınan bu seçenek, giriş-çıkış ile bağlantı kurmayı düzenler.
bir simülatör kitaplığından işlevler. Kod, başlatılmış veriler ve sıfır başlatılmış veriler
ardışık olarak tahsis edilir.
-sim2
Facebok sayfasını beğenin : -sim, ancak 0x40000000 ve sıfırda başlatılan verileri bulmak için bağlayıcı seçeneklerini iletin.
0x80000000'de başlatılmış veriler.
CR16 Opsiyonlar
Bu seçenekler, özellikle CR16 bağlantı noktaları için tanımlanmıştır.
-mmac
Çoklu biriktirme talimatlarının kullanımını etkinleştirin. Varsayılan olarak devre dışıdır.
-mcr16cplus
-mcr16c
CR16C veya CR16C+ mimarisi için kod oluşturun. CR16C+ mimarisi varsayılandır.
-msim
Simülatör ile uyumlu olan libsim.a kütüphanesine link verir. ELF için geçerlidir
sadece derleyici.
-nane32
Tamsayı türünü 32 bit genişliğinde seçin.
-mbit-op'lar
Bit işlemleri için "sbit"/"cbit" komutları üretir.
-mdata-modeli=model
Bir veri modeli seçin. için seçimler model vardır yakın, uzak or orta. orta varsayılandır.
Bununla birlikte, uzak ile geçerli değil -mcr16cCR16C mimarisi desteklemediğinden
uzak veri modeli
Darwin Opsiyonlar
Bu seçenekler, Darwin işletim sistemini çalıştıran tüm mimariler için tanımlanmıştır.
Darwin'deki FSF GCC, "şişman" nesne dosyaları oluşturmaz; için bir nesne dosyası oluşturur.
GCC'nin hedeflemek için inşa edildiği tek mimari. Apple'ın Darwin'deki GCC'si "şişman" yaratıyor
birden fazla ise dosyalar -ARCH seçenekler kullanılır; bunu derleyiciyi veya bağlayıcıyı çalıştırarak yapar
birden çok kez ve sonuçların birlikte birleştirilmesi lipo.
Oluşturulan dosyanın alt türü (gibi ppc7400 or ppc970 or i686) tarafından belirlenir.
GCC'nin hedeflediği ISA'yı belirten bayraklar, örneğin -mcpu or -Mart.
-force_cpusubtype_ALL seçeneği bunu geçersiz kılmak için kullanılabilir.
Darwin araçları, bir ISA uyumsuzluğu ile sunulduğunda davranışlarında değişiklik gösterir. NS
montajcı, as, yalnızca alt türü için geçerli olan talimatların kullanılmasına izin verir.
oluşturduğu dosyadır, bu nedenle 64-bit talimatları bir dosyaya koyamazsınız. ppc750 nesne dosyası. NS
paylaşılan kütüphaneler için bağlayıcı, /usr/bin/libtool, başarısız olur ve istenirse bir hata yazdırır
girdi dosyalarından daha az kısıtlayıcı bir alt türe sahip paylaşılan bir kitaplık oluşturun (için
örneğin, bir koymaya çalışıyorum ppc970 nesne dosyasında bir ppc7400 kütüphane). bağlayıcı
yürütülebilir dosyalar, ld, sessizce yürütülebilir dosyaya herhangi birinin en kısıtlayıcı alt türünü verir.
giriş dosyaları
-Fdir
Çerçeve dizini ekleyin dir aranacak dizinler listesinin başına
başlık dosyaları için. Bu dizinler, tarafından belirtilenlerle karıştırılır. -I
seçenekler ve soldan sağa sırayla taranır.
Çerçeve dizini, içinde çerçeveler bulunan bir dizindir. Bir çerçeve bir
ile dizin Başlıkları ve / veya Özel Başlıklar doğrudan içinde bulunan dizin
biter .çerçeve. Bir çerçevenin adı, bu dizinin adıdır.
the .çerçeve. Çerçeveyle ilişkili başlıklar bu ikisinden birinde bulunur.
ile dizinler Başlıkları önce aranıyor. Bir alt çerçeve bir çerçevedir
bir çerçevenin içindeki dizin çerçeveler dizin. Alt çerçeve içerir
başlıklar yalnızca alt çerçeveyi içeren bir çerçevenin başlığında görünebilir veya
bir kardeş alt çerçeve başlığında. İki alt çerçeve, eğer ortaya çıkarlarsa kardeştir.
aynı çerçeve. Bir alt çerçeve, çerçeve ile aynı ada sahip olmamalıdır; a
ihlal edilirse uyarı verilir. Şu anda bir alt çerçeve olamaz
alt çerçeveler; gelecekte, mekanizma bunu destekleyecek şekilde genişletilebilir. NS
standart çerçeveler bulunabilir / System / Library / Altyapıları ve
/ Library / Altyapıları. Dahil etme örneği, "#include ",
nerede iskelet çerçevenin adını belirtir ve başlık.h içinde bulunur
Özel Başlıklar or Başlıkları dizin.
-iframeworkdir
Facebok sayfasını beğenin : -F dizinin bir sistem dizini olarak değerlendirilmesi dışında. Ana fark
bunun arasında -iframework ve -F bununla mı -iframework derleyici uyarmıyor
aracılığıyla bulunan başlık dosyalarında bulunan yapılar hakkında dir. Bu seçenek geçerlidir
sadece C dil ailesi için.
-kusmuş
Kullanılan semboller için hata ayıklama bilgilerini yayınlayın. Stabs hata ayıklama formatı için,
bu sağlar -feliminate-kullanılmayan-hata ayıklama-sembolleri. Bu, varsayılan olarak AÇIK'tır.
-gfull
Tüm semboller ve türler için hata ayıklama bilgilerini yayınlayın.
-mmacosx-sürüm-min=versiyon
Bu yürütülebilir dosyanın üzerinde çalışacağı en eski MacOS X sürümü versiyon. Tipik
değerleri versiyon 10.1, 10.2 ve 10.3.9'u içerir.
Derleyici varsayılan olarak sistemin başlıklarını kullanmak üzere oluşturulmuşsa, varsayılan olarak
bu seçenek, derleyicinin üzerinde çalıştığı sistem sürümüdür, aksi takdirde
varsayılan, olabildiğince çok sistem ve kod tabanıyla uyumlu seçimler yapmaktır.
mümkün.
-mçekirdek
Çekirdek geliştirme modunu etkinleştirin. NS -mçekirdek seçenek kümeleri -statik, -fno-ortak,
-fno-use-cxa-atexit, -fno-istisnalar, -fno-arama dışı-istisnalar, -fapple-kext,
-fno-zayıf ve -fno-rtti uygulanabilir olduğunda. Bu mod ayrıca ayarlar -mno-altivec,
-msoft-float, -fno-yerleşik ve -mlong-dal PowerPC hedefleri için.
-mon-byte-bool
için varsayılanları geçersiz kıl bool ki sizeof(bool)==1. Varsayılan olarak sizeof(bool) is 4
Darwin/PowerPC için derlerken ve 1 Darwin/x86 için derlerken, bu seçenek
x86 üzerinde hiçbir etkisi yoktur.
Uyarı: The -mon-byte-bool anahtar, GCC'nin ikili olmayan kod oluşturmasına neden olur
bu anahtar olmadan oluşturulan kodla uyumludur. Bu anahtarın kullanılması gerektirebilir
sistem kitaplıkları da dahil olmak üzere bir programdaki diğer tüm modülleri yeniden derlemek. Bunu kullan
varsayılan olmayan bir veri modeline uymak için geçiş yapın.
-mfix-ve-devam et
-düzelt-ve-devam et
-findirect-veri
GDB'ye izin vermek gibi hızlı geri dönüş geliştirme için uygun kod oluşturun
".o" dosyalarını zaten çalışan programlara dinamik olarak yükleyin. -findirect-veri ve
-düzelt-ve-devam et geriye dönük uyumluluk için sağlanmıştır.
-tüm_yükler
Statik arşiv kitaplıklarının tüm üyelerini yükler. adamı görmek ld(1) daha fazla bilgi için.
-arch_errors_fatal
Yanlış mimariye sahip dosyalarla ilgili hataların ölümcül olmasına neden olun.
-bind_at_load
Çıktı dosyasının dinamik bağlayıcının tümünü bağlayacağı şekilde işaretlenmesine neden olur.
dosya yüklendiğinde veya başlatıldığında tanımsız referanslar.
Bundle
Bir Mach-o paket formatı dosyası üretin. adamı görmek ld(1) daha fazla bilgi için.
-paket_yükleyici çalıştırılabilir
Bu seçenek, çalıştırılabilir bu, derleme çıktı dosyasını yükleyecektir.
bağlantılı. adamı görmek ld(1) daha fazla bilgi için.
-dinamik kitaplık
Bu seçenek geçtiğinde, GCC yürütülebilir dosya yerine dinamik bir kitaplık üretir.
bağlama, Darwin'i kullanarak kütüphane aracı Komut.
-force_cpusubtype_ALL
Bu, GCC'nin çıktı dosyasının HEPSİ tarafından kontrol edilen bir alt tip yerine
the -mcpu or -Mart seçeneği.
-izin verilebilir_istemci Müşteri Adı
-Müşteri Adı
-uyumluluk_versiyonu
-şimdiki versiyonu
-dead_strip
-bağımlılık-dosyası
-dylib_dosyası
-dylinker_install_name
-dinamik
-dışa aktarılan_symbols_list
-dosya listesi
-flat_ad alanı
-force_flat_namespace
-headerpad_max_install_names
-image_base
-içinde
-kurulum_adı
-keep_private_externs
-çoklu_modül
-çarpma_tanımlı
-multiply_Definition_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofix ön bağlama
-nomultidef'ler
-bağlanma yok
-noseglinkedit
-pagezero_size
-önceden bağlamak
-prebind_all_twolevel_modules
-özel_paket
-read_only_relocs
-sektalign
-sekt nesne sembolleri
-neden yük
-seg1addr
-mezhep oluşturmak
-sekt nesne sembolleri
-sektör
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_tablosu
-seg_addr_tablo_dosyaadı
-seglinkedit
-segprot
-segs_read_only_addr
-segs_read_write_addr
-tek_modül
-statik
-alt_kütüphane
-alt_umbrella
-iki düzeyli_ad alanı
-şemsiye
-Tanımsız
-exported_symbols_list
-weak_reference_mismatches
-neler yüklendi
Bu seçenekler Darwin bağlayıcısına iletilir. Darwin linker man sayfası açıklar
onları ayrıntılı olarak.
Aralık Alfa Opsiyonlar
Bunlar -m DEC Alpha uygulamaları için seçenekler tanımlanmıştır:
-mno-yumuşak-şamandıra
-msoft-float
Kayan nokta için donanım kayan nokta yönergelerini kullanın (kullanmayın)
operasyonlar. Ne zaman -msoft-float belirtilir, işlevler libgcc.a gerçekleştirmek için kullanılır
kayan nokta işlemleri. taklit eden rutinlerle değiştirilmediği sürece
kayan nokta işlemleri veya bu tür öykünmeleri çağıracak şekilde derlenmiş
rutinler, bu rutinler kayan nokta işlemleri yayınlar. için derleme yapıyorsanız
kayan nokta işlemleri olmayan bir Alfa, kitaplığın oluşturulduğundan emin olmalısınız
onları aramamak için.
Kayan nokta işlemleri olmayan Alfa uygulamalarının sahip olması gerektiğini unutmayın.
kayan nokta kayıtları.
-mfp-reg
-mno-fp-reg'ler
Kayan nokta kayıt kümesini kullanan (kullanmayan) kod oluşturun. -mno-fp-reg'ler
ima -msoft-float. Kayan nokta kayıt seti kullanılmazsa, kayan nokta
işlenenler tamsayı kayıtlarında tamsayılar ve kayan noktaymış gibi iletilir
sonuçlar $f0 yerine $0 olarak iletilir. Bu standart olmayan bir arama dizisidir, bu nedenle
derlenmiş kod tarafından çağrılan kayan nokta bağımsız değişkeni veya dönüş değeri olan herhangi bir işlev
ile -mno-fp-reg'ler ayrıca bu seçenekle derlenmelidir.
Bu seçeneğin tipik bir kullanımı, kullanılmayan ve dolayısıyla ihtiyaç duyulan bir çekirdek oluşturmaktır.
herhangi bir kayan nokta kaydı kaydetmeyin ve geri yüklemeyin.
-mieee
Alpha mimarisi, maksimum için optimize edilmiş kayan nokta donanımı uygular
verim. Çoğunlukla IEEE kayan nokta standardı ile uyumludur. Yine de,
tam uyumluluk için yazılım yardımı gereklidir. Bu seçenek kod üretir
tamamen IEEE uyumlu kod dışında ki kesin olmayan bayrak korunmaz (aşağıya bakın).
Bu seçenek etkinleştirilirse, önişlemci makrosu "_IEEE_FP" sırasında tanımlanır.
derleme. Ortaya çıkan kod daha az verimlidir ancak doğru şekilde destekleyebilir
normalleştirilmemiş sayılar ve sayı olmayan ve artı/eksi gibi istisnai IEEE değerleri
sonsuzluk. Diğer Alpha derleyicileri bu seçeneği çağırır -ieee_with_no_inexact.
-mieee-ile-kesin olmayan
bu gibi -mieee oluşturulan kod dışında IEEE'yi de korur kesin olmayan bayrak.
Bu seçeneğin açılması, oluşturulan kodun tam uyumlu IEEE uygulamasına neden olur.
matematik. "_IEEE_FP"ye ek olarak, "_IEEE_FP_EXACT" bir önişlemci makrosu olarak tanımlanır.
Bazı Alpha uygulamalarında, elde edilen kod, şundan önemli ölçüde daha yavaş yürütülebilir:
varsayılan olarak oluşturulan kod. bağlı olan çok az kod olduğundan
kesin olmayan bayrak, normalde bu seçeneği belirtmemelisiniz. Diğer Alfa derleyicileri çağırır
bu seçenek -ieee_with_inexact.
-mfp-trap-modu=tuzak modu
Bu seçenek, kayan noktayla ilgili hangi tuzakların etkinleştirildiğini kontrol eder. Diğer Alfa
derleyiciler bu seçeneği çağırır -fptm tuzak modu. Tuzak modu dört moddan birine ayarlanabilir.
değerler:
n Bu, varsayılan (normal) ayardır. Etkinleştirilen tek tuzaklar,
yazılımda devre dışı bırakılamayanlar (örneğin, sıfır tuzağına bölme).
u Tarafından etkinleştirilen tuzaklara ek olarak n, alttan akış tuzakları da etkinleştirilir.
su Facebok sayfasını beğenin : u, ancak talimatlar yazılımın tamamlanması için güvenli olacak şekilde işaretlenmiştir (bkz.
Ayrıntılar için alfa mimarisi kılavuzu).
üzerinde Facebok sayfasını beğenin : su, ancak kesin olmayan tuzaklar da etkinleştirilir.
-mfp-yuvarlama-modu=yuvarlama modu
IEEE yuvarlama modunu seçer. Diğer Alpha derleyicileri bu seçeneği çağırır -fpm
yuvarlama modu. yuvarlama modu şunlardan biri olabilir:
n Normal IEEE yuvarlama modu. Kayan nokta sayıları en yakına doğru yuvarlanır
makine numarası veya beraberlik durumunda çift makine numarasına doğru.
m Eksi sonsuza doğru yuvarlayın.
c Kıyılmış yuvarlama modu. Kayan noktalı sayılar sıfıra doğru yuvarlanır.
d Dinamik yuvarlama modu. Kayan nokta kontrol kaydındaki bir alan (fpcrBakın
Alfa mimarisi referans kılavuzu), geçerli yuvarlama modunu kontrol eder. C
kütüphane, artı sonsuza doğru yuvarlamak için bu kaydı başlatır. Böylece,
programınız değiştirmedikçe fpcr, d artıya doğru yuvarlamaya karşılık gelir
sonsuzluk.
-mtrap-hassasiyet=tuzak hassasiyeti
Alfa mimarisinde kayan nokta tuzakları kesin değildir. Bu olmadan anlamına gelir
yazılım yardımı, kayan bir tuzaktan ve programdan kurtarılamaz
yürütmenin normal olarak sonlandırılması gerekir. GCC, yardımcı olabilecek kodlar oluşturabilir
işletim sistemi tuzak işleyicileri, bir soruna neden olan tam konumu belirlemede
kayan nokta tuzağı. Bir uygulamanın gereksinimlerine bağlı olarak, farklı
hassasiyet seviyeleri seçilebilir:
p Program hassasiyeti. Bu seçenek varsayılandır ve bir tuzak işleyicisinin yalnızca
kayan nokta özel durumuna hangi programın neden olduğunu belirleyin.
f İşlev hassasiyeti. Tuzak işleyici, bir hataya neden olan işlevi belirleyebilir.
kayan nokta istisnası.
i Talimat hassasiyeti. Tuzak işleyici, tam olarak hangi talimatın uygulanacağını belirleyebilir.
kayan nokta istisnasına neden oldu.
Diğer Alpha derleyicileri, adı verilen eşdeğer seçenekleri sağlar. -scope_safe ve
-devam_güvenli.
-mieee-uyumlu
Bu seçenek, oluşturulan kodu IEEE uyumlu olarak işaretler. Bu seçeneği kullanmamalısınız
sen de belirtmedikçe -mtrap-hassasiyet=i ve ya -mfp-trap-modu=su or
-mfp-trap-modu=sui. Tek etkisi çizgiyi yaymaktır .bayrak 48 fonksiyonda
oluşturulan derleme dosyasının önsözü.
-mbuild-sabitleri
Normalde GCC, onu oluşturup oluşturamayacağını görmek için 32 veya 64 bitlik bir tamsayı sabitini inceler.
iki veya üç talimatta daha küçük sabitlerden. Yapamıyorsa, çıktısını verir
değişmez olarak sabittir ve çalışma zamanında veri bölümünden yüklemek için kod üretir.
GCC'nin oluşturmasını zorunlu kılmak için bu seçeneği kullanın herşey kod kullanan tamsayı sabitleri,
daha fazla talimat alır (maksimum altıdır).
Bu seçeneği genellikle paylaşılan bir kitaplık dinamik yükleyicisi oluşturmak için kullanırsınız. kendisi bir
paylaşılan kitaplık, değişkenleri bulmadan önce kendini bellekte yeniden konumlandırmalı ve
kendi veri segmentindeki sabitler.
-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-düzeltme
-mmaks
-mno-maks
GCC'nin isteğe bağlı BWX, CIX, FIX ve MAX'ı kullanmak için kod oluşturması gerekip gerekmediğini belirtin
talimat setleri. Varsayılan, CPU tarafından desteklenen komut setlerini kullanmaktır.
aracılığıyla belirtilen tür -mcpu= seçeneği veya hiçbiri yoksa GCC'nin kurulduğu CPU'nun seçeneği
belirtildi.
-mfloat-vax
-mfloat-ieee
Bunun yerine VAX F ve G kayan nokta aritmetiğini kullanan (kullanmayan) kod oluşturun
IEEE tek ve çift kesinlik.
-meexplicit-relocs
-mno-açık-yer değiştirmeler
Daha eski Alpha derleyicileri, sembol yer değiştirmeleri oluşturmanın yolu dışında hiçbir yol sağlamadı.
montajcı makroları. Bu makroların kullanımı, optimal talimat planlamasına izin vermez.
2.12 sürümünden itibaren GNU binutils, derleyicinin
Hangi yer değiştirmelerin hangi talimatlara uygulanacağını açıkça işaretleyin. Bu seçenek
GCC, montajcının yeteneklerini
oluşturulur ve varsayılanı buna göre ayarlar.
-msmall-veri
-mlarge-veri
Ne zaman -meexplicit-relocs yürürlüktedir, statik verilere şu şekilde erişilir: gp göreli
yer değiştirmeler. Ne zaman -msmall-veri kullanıldığında, 8 bayt uzunluğunda veya daha küçük nesneler
a küçük veri alan (".sdata" ve ".sbss" bölümleri) ve 16 bit üzerinden erişilir
$gp kaydının dışına taşınmalar. Bu, küçük veri alanının boyutunu şu şekilde sınırlar:
64KB, ancak değişkenlere tek bir komutla doğrudan erişilmesine izin verir.
Varsayılan -mlarge-veri. Bu seçenekle veri alanı hemen aşağıdakiyle sınırlıdır
2 GB. 2 GB'den fazla veri gerektiren programlar, "malloc" veya "mmap" kullanmalıdır.
verileri programın veri segmenti yerine yığında tahsis edin.
Paylaşılan kitaplıklar için kod oluştururken, -fpic ima -msmall-veri ve -fPIC
ima -mlarge-veri.
-msmall-metin
-mlarge-metin
Ne zaman -msmall-metin kullanıldığında, derleyici tüm programın kodunun
(veya paylaşılan kitaplık) 4 MB'a sığar ve bu nedenle bir şube talimatıyla erişilebilir.
Ne zaman -msmall-veri kullanıldığında, derleyici tüm yerel sembollerin
aynı $gp değeri ve böylece bir işlev için gereken talimat sayısını azaltır
4'ten 1'e kadar arayın.
Varsayılan -mlarge-metin.
-mcpu=cpu_type
Makine tipi için talimat setini ve talimat programlama parametrelerini ayarlayın
cpu_type. ya belirtebilirsiniz EV stil adı veya ilgili çip numarası.
GCC, EV4, EV5 ve EV6 işlemci ailesi için zamanlama parametrelerini destekler ve
belirttiğiniz işlemciden komut seti için varsayılan değerleri seçer. Eğer
bir işlemci türü belirtmezseniz, GCC varsayılan olarak üzerinde bulunduğu işlemciye
derleyici yapılmıştır.
için desteklenen değerler cpu_type vardır
ev4
ev45
21064
EV4 olarak programlanır ve talimat seti uzantısına sahip değildir.
ev5
21164
EV5 olarak programlanır ve talimat seti uzantısına sahip değildir.
ev56
21164a
EV5 olarak programlar ve BWX uzantısını destekler.
pca56
21164pc
21164PC
Bir EV5 olarak programlar ve BWX ve MAX uzantılarını destekler.
ev6
21264
EV6 olarak programlar ve BWX, FIX ve MAX uzantılarını destekler.
ev67
21264a
EV6 olarak programlar ve BWX, CIX, FIX ve MAX uzantılarını destekler.
Yerel araç zincirleri de değeri destekler yerli, en iyi mimariyi seçen
ana işlemci için seçenek. -mcpu=yerel GCC'nin tanımaması durumunda hiçbir etkisi yoktur
işlemci
-mtune=cpu_type
Yalnızca makine tipi için talimat programlama parametrelerini ayarlayın cpu_type.
komut seti değiştirilmez.
Yerel araç zincirleri de değeri destekler yerli, en iyi mimariyi seçen
ana işlemci için seçenek. -mtune=yerel GCC'nin tanımaması durumunda hiçbir etkisi yoktur
işlemci
-mbellek gecikmesi=zaman
Tarafından görüldüğü gibi, zamanlayıcının tipik bellek referansları için varsayması gereken gecikmeyi ayarlar.
uygulama. Bu sayı, kullanılan bellek erişim modellerine büyük ölçüde bağlıdır.
uygulama ve makinedeki harici önbelleğin boyutuna göre.
için geçerli seçenekler zaman vardır
numara
Saat döngülerini temsil eden bir ondalık sayı.
L1
L2
L3
ana
Derleyici, "tipik" EV4 & için saat döngüsü sayısı tahminlerini içerir.
Düzey 5, 1 ve 2 önbellekler için EV3 donanımı (Dcache, Scache ve
Bcache) ve ayrıca ana belleğe. L3'ün yalnızca EV5 için geçerli olduğunu unutmayın.
FR30 Opsiyonlar
Bu seçenekler, özellikle FR30 bağlantı noktası için tanımlanmıştır.
-msmall-modeli
Küçük adres alanı modelini kullanın. Bu, daha küçük kod üretebilir, ancak varsayar
tüm sembolik değerlerin ve adreslerin 20 bitlik bir aralığa sığması.
-mno-lsim
Çalışma zamanı desteğinin sağlandığını ve bu nedenle şunları eklemeye gerek olmadığını varsayalım.
simülatör kitaplığı (libsim.a) bağlayıcı komut satırında.
FRV Opsiyonlar
-mgpr-32
Yalnızca ilk 32 genel amaçlı kaydı kullanın.
-mgpr-64
64 genel amaçlı kaydın tümünü kullanın.
-mfpr-32
Yalnızca ilk 32 kayan nokta kaydını kullanın.
-mfpr-64
64 kayan nokta kaydının tümünü kullanın.
-mhard-şamandıra
Kayan nokta işlemleri için donanım yönergelerini kullanın.
-msoft-float
Kayan nokta işlemleri için kitaplık rutinlerini kullanın.
-malloc-cc
Koşul kodu kayıtlarını dinamik olarak tahsis edin.
-mfixed-cc
Koşul kodu kayıtlarını dinamik olarak ayırmaya çalışmayın, yalnızca "icc0" kullanın ve
"fcc0".
-mdword
ABI'yi double word insns kullanacak şekilde değiştirin.
-mno-dword
Çift kelimeli talimatlar kullanmayın.
-mçift
Kayan noktalı çift yönergeleri kullanın.
-mno-double
Kayan noktalı çift yönergeleri kullanmayın.
-mmedya
Medya talimatlarını kullanın.
-mno-medya
Medya talimatlarını kullanmayın.
-mmuladd
Çarpma ve toplama/çıkarma talimatlarını kullanın.
-mno-muladd
Çarpma ve toplama/çıkarma talimatlarını kullanmayın.
-mfdpic
İşaretçileri temsil etmek için işlev tanımlayıcılarını kullanan FDPIC ABI'yi seçin.
fonksiyonlar. PIC/PIE ile ilgili seçenekler olmadan, -fPIE. Ile -fpic or
-fpie, GOT girişlerinin ve küçük verilerin GOT'tan 12 bitlik bir aralık içinde olduğunu varsayar.
temel adres; ile birlikte -fPIC or -fPIE, GOT ofsetleri 32 bit ile hesaplanır. Birlikte
bfin-elf hedef, bu seçenek ima eder -msim.
-minline-plt
Bilinmeyen işlevlere yapılan işlev çağrılarında PLT girişlerinin satır içine alınmasını etkinleştirin.
yerel olarak bağlayın. Olmadan etkisi yok -mfdpic. Varsayılan olarak etkindir, eğer
hız optimizasyonu ve paylaşılan kitaplıklar için derleme (örn. -fPIC or -fpic) veya
gibi bir optimizasyon seçeneği olduğunda -O3 veya üstü komut satırında bulunur.
-mTLS
İş parçacığı yerel kodu oluştururken büyük bir TLS segmenti varsayın.
-mtls
İş parçacığı yerel kodu oluştururken büyük bir TLS segmenti varsaymayın.
-mgprel-ro
İçinde olduğu bilinen veriler için FDPIC ABI'de "GPREL" yer değiştirmelerinin kullanımını etkinleştirin.
salt okunur bölümler Şunlar dışında varsayılan olarak etkindir: -fpic or -fpie: rağmen
global ofset tablosunu küçültmeye yardımcı olabilir, 1 için 4 talimatla işlem yapar.
-fPIC or -fPIE, biri birden fazla kişi tarafından paylaşılabilen 3 için 4 talimat takas eder.
semboller ve başvurulan sembol için bir GOT girişi ihtiyacını ortadan kaldırır, bu nedenle
kazanma olasılığı daha yüksektir. Ya değilse, -mno-gprel-ro devre dışı bırakmak için kullanılabilir.
-multilib-kütüphane-pic
(FD değil, kitaplık) resim kitaplıklarıyla bağlantı kurun. tarafından ima edildi -kütüphane-resimyanı
Tarafından -fPIC ve -fpic olmadan -mfdpic. Asla açıkça kullanmak zorunda kalmamalısınız.
-mlinked-fp
Bir yığın çerçevesi olduğunda her zaman bir çerçeve işaretçisi oluşturmaya yönelik EABI gereksinimini izleyin
tahsis edilir. Bu seçenek varsayılan olarak etkindir ve şu şekilde devre dışı bırakılabilir:
-mno-bağlı-fp.
-mlong-çağrıları
Geçerli derleme biriminin dışındaki işlevleri çağırmak için dolaylı adreslemeyi kullanın. Bu
işlevlerin 32 bit adres alanı içinde herhangi bir yere yerleştirilmesine izin verir.
-malign-etiketler
NOP'leri önceki pakete ekleyerek etiketleri 8 baytlık bir sınıra hizalamaya çalışın.
Bu seçenek yalnızca VLIW paketleme etkinleştirildiğinde etkilidir. Yeni oluşturmuyor
paketler; sadece mevcut olanlara NOP'lar ekler.
-kütüphane-resim
Konumdan bağımsız EABI kodu oluşturun.
-macc-4
Yalnızca ilk dört ortam akümülatör kaydını kullanın.
-macc-8
Sekiz medya akümülatör kaydının tümünü kullanın.
-mpack
VLIW talimatlarını paketleyin.
-mno paketi
VLIW talimatlarını paketlemeyin.
-mno-bayraklar
ABI anahtarlarını e_flags içinde işaretlemeyin.
-mcond-hareket
Koşullu taşıma talimatlarının kullanımını etkinleştirin (varsayılan).
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mno-koşul-hareket
Koşullu taşıma talimatlarının kullanımını devre dışı bırakın.
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mscc
Koşullu küme talimatlarının kullanımını etkinleştirin (varsayılan).
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mno-scc
Koşullu küme talimatlarının kullanımını devre dışı bırakın.
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mcond-exec
Koşullu yürütmenin kullanımını etkinleştirin (varsayılan).
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mno-cond-exec
Koşullu yürütme kullanımını devre dışı bırakın.
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mvliw-şube
Dalları VLIW talimatlarına paketlemek için bir geçiş çalıştırın (varsayılan).
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mno-vliw-şube
Dalları VLIW talimatlarına paketlemek için bir geçiş çalıştırmayın.
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mmulti-cond-yürütme
"&&" ve "||" optimizasyonunu etkinleştir koşullu yürütmede (varsayılan).
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mno-çoklu-koşul-exec
"&&" ve "||" optimizasyonunu devre dışı bırakın koşullu yürütmede.
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mnested-cond-yürütme
İç içe koşullu yürütme iyileştirmelerini etkinleştir (varsayılan).
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-mno-iç içe-koşul-yürütme
İç içe koşullu yürütme optimizasyonlarını devre dışı bırakın.
Bu anahtar esas olarak derleyicide hata ayıklamak içindir ve muhtemelen bir süre sonra kaldırılacaktır.
gelecek sürüm.
-moptimize-üye çubuğu
Bu anahtar, derleyici tarafından oluşturulan koddan gereksiz "membar" yönergelerini kaldırır.
Varsayılan olarak etkindir.
-mno-optimize-üye çubuğu
Bu anahtar, gereksiz "membar" talimatlarının otomatik olarak kaldırılmasını devre dışı bırakır.
oluşturulan kod.
-mtomcat istatistikleri
Gazın Tomcat istatistiklerini yazdırmasına neden olun.
-mcpu=cpu
Kod oluşturulacak işlemci türünü seçin. Olası değerler frv, fr550,
erkek kedi, fr500, fr450, fr405, fr400, fr300 ve basit.
GNU / Linux Opsiyonlar
Bunlar -m GNU/Linux hedefleri için seçenekler tanımlanmıştır:
-mglibc
GNU C kitaplığını kullanın. Bu, dışında varsayılandır *-*-linux-*uclibc* ve
*-*-linux-*android* hedefler.
-muclibc
uClibc C kitaplığını kullanın. Bu, varsayılan *-*-linux-*uclibc* hedefler.
-mbiyonik
Bionic C kitaplığını kullanın. Bu, varsayılan *-*-linux-*android* hedefler.
-mandroid
Android platformuyla uyumlu kod derleyin. Bu, varsayılan
*-*-linux-*android* hedefler.
Derlerken, bu seçenek etkinleştirir -mbiyonik, -fPIC, -fno-istisnalar ve -fno-rtti by
varsayılan. Bağlanırken bu seçenek, GCC sürücüsünün Android'e özgü seçenekleri geçmesini sağlar
bağlayıcıya. Son olarak, bu seçenek "__ANDROID__" önişlemci makrosunun
tanımladı.
-tno-android-cc
Derleme efektlerini devre dışı bırak -mandroid, yani etkinleştirme -mbiyonik, -fPIC,
-fno-istisnalar ve -fno-rtti varsayılan olarak.
-tno-android-ld
Şunun bağlama efektlerini devre dışı bırak: -mandroid, yani standart Linux bağlama seçeneklerini
bağlayıcı.
H8 / 300 Opsiyonlar
Bunlar -m H8/300 uygulamaları için seçenekler tanımlanmıştır:
-mrelax
Mümkün olduğunda, bağlantı zamanında bazı adres referanslarını kısaltın; bağlayıcı seçeneğini kullanır
-Rahatlayın.
-mh H8/300H için kod oluşturun.
-MS H8S için kod oluşturun.
-dk Normal modda H8S ve H8/300H için kod oluşturun. Bu anahtar kullanılmalıdır
ya da -mh or -MS.
-ms2600
H8S/2600 için kod oluşturun. Bu anahtar ile kullanılmalıdır -MS.
-mexr
Genişletilmiş kayıtlar, monitörle işlevin yürütülmesinden önce yığında saklanır
bağlanmak. Varsayılan seçenek -mexr. Bu seçenek yalnızca H8S hedefleri için geçerlidir.
-mno-exr
Genişletilmiş kayıtlar, monitörle işlevin yürütülmesinden önce yığında saklanmaz
bağlanmak. Varsayılan seçenek -mno-exr. Bu seçenek yalnızca H8S hedefleri için geçerlidir.
-nane32
Varsayılan olarak "int" verisini 32 bit yapın.
-malign-300
H8/300H ve H8S'de, H8/300 ile aynı hizalama kurallarını kullanın. Varsayılan
H8/300H ve H8S için, 4 baytlık sınırlarda uzun ve kayan noktaları hizalamaktır.
-malign-300 2 baytlık sınırlarda hizalanmalarına neden olur. Bu seçeneğin etkisi yoktur
H8/300'de.
HPPA Opsiyonlar
Bunlar -m HPPA bilgisayar ailesi için seçenekler tanımlanmıştır:
-mart=mimari tipi
Belirtilen mimari için kod oluşturun. için seçimler mimari tipi vardır
1.0 PA 1.0 için, 1.1 PA 1.1 için ve 2.0 PA 2.0 işlemciler için. bkz.
/usr/lib/sched.models uygun mimari seçeneğini belirlemek için bir HP-UX sisteminde
makineniz için. Daha düşük numaralı mimariler için derlenen kod, daha yüksek sürümlerde çalışır
numaralı mimariler, ancak tam tersi değil.
-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
İçin eşanlamlılar -mart=1.0, -mart=1.1, ve -mart=2.0 respectivamente.
-big-anahtar
Büyük anahtar tabloları için uygun kod oluşturun. Bu seçeneği yalnızca,
montajcı/bağlayıcı, bir anahtar tablosundaki aralık dışı dallardan şikayet eder.
-mjump-in-gecikme
Değiştirerek koşulsuz atlama talimatlarıyla işlev çağrılarının gecikme yuvalarını doldurun
koşullu atlamanın hedefi olacak işlev çağrısının dönüş işaretçisi.
-mdisable-fpreg'ler
Kayan nokta kayıtlarının herhangi bir şekilde kullanılmasını önleyin. Bunun için gerekli
kayan nokta kayıtlarının tembel bağlam geçişini gerçekleştiren çekirdeklerin derlenmesi. Eğer
bu seçeneği kullanır ve kayan nokta işlemlerini gerçekleştirmeye çalışırsanız, derleyici
iptal eder.
-mdisable-indeksleme
Derleyicinin dizin oluşturma adres modlarını kullanmasını önleyin. Bu, bazılarını oldukça önler
MACH altında MIG tarafından oluşturulan kodu derlerken belirsiz sorunlar.
-mno-boşluk-regs
Hedefin alan kaydı olmadığını varsayan kod oluşturun. Bu, GCC'nin
daha hızlı dolaylı aramalar oluşturun ve ölçeklenmemiş dizin adresi modlarını kullanın.
Bu kod, seviye 0 PA sistemleri ve çekirdekler için uygundur.
-mfast-dolaylı-çağrılar
Çağrıların alan sınırlarını asla aşmadığını varsayan kod oluşturun. Bu, GCC'nin
daha hızlı dolaylı aramalar gerçekleştiren kod yayar.
Bu seçenek, paylaşılan kitaplıkların veya iç içe işlevlerin varlığında çalışmaz.
-mfixed-aralık=kayıt aralığı
Verilen kayıt aralığını sabit kayıtlar olarak ele alan kod oluşturun. Sabit bir kayıt
kayıt ayırıcının kullanamayacağı bir tanesidir. Bu, çekirdeği derlerken kullanışlıdır.
kod. Bir kayıt aralığı, bir tire ile ayrılmış iki kayıt olarak belirtilir. çoklu
kayıt aralıkları virgülle ayrılarak belirtilebilir.
-mlong-yük deposu
HP-UX 3'un bazen gerektirdiği şekilde 10 komutlu yükleme oluşturun ve dizileri depolayın
bağlayıcı. Bu eşdeğerdir +k HP derleyicileri için seçenek.
-taşınabilir-çalışma zamanı
HP tarafından ELF sistemleri için önerilen taşınabilir arama kurallarını kullanın.
-mgaz
Yalnızca GAS'ın anladığı montajcı yönergelerinin kullanımını etkinleştirin.
-mprogram=işlemci tipi
Makine tipinin kısıtlamalarına göre kodu programlayın işlemci tipi. Seçimler
için işlemci tipi vardır 700 7100, 7100LC, 7200, 7300 ve 8000. Bakın
/usr/lib/sched.models için uygun zamanlama seçeneğini belirlemek için bir HP-UX sisteminde
senin makinen. Varsayılan zamanlama 8000.
-mlinker-opt
HP-UX bağlayıcısında optimizasyon geçişini etkinleştirin. Bunun sembolik hata ayıklama yaptığını unutmayın
imkansız. Ayrıca, içinde bulundukları HP-UX 8 ve HP-UX 9 bağlayıcılarında bir hatayı tetikler.
bazı programları bağlarken sahte hata mesajları veriyor.
-msoft-float
Kayan nokta için kitaplık çağrılarını içeren çıktı oluşturun. Uyarı: gerekli
kitaplıklar tüm HPPA hedefleri için mevcut değildir. Normalde tesislerin
makinenin olağan C derleyicisi kullanılır, ancak bu doğrudan çapraz olarak yapılamaz.
derleme. Uygun kütüphane sağlamak için kendi düzenlemelerinizi yapmalısınız.
çapraz derleme için işlevler.
-msoft-float çıktı dosyasındaki çağrı kuralını değiştirir; bu nedenle, sadece
derlerseniz faydalı herşey Bu seçeneğe sahip bir programın Özellikle, yapmanız gereken
derlemek libgcc.a, GCC ile birlikte gelen kitaplık, -msoft-float bunun için
çalışmak.
-msio
Sunucu GÇ için ön tanımlı "_SIO" oluşturun. Varsayılan -mwsio. Bu üretir
iş istasyonu GÇ için "__hp9000s700", "__hp9000s700__" ve "_WSIO" ön tanımları.
Bu seçenekler HP-UX ve HI-UX altında mevcuttur.
-mgnu-ld
GNU'ya özel seçenekleri kullanın ld. Bu geçer -paylaşılan için ld paylaşılan bir bina oluştururken
kütüphane. GCC, açıkça veya örtülü olarak şu şekilde yapılandırıldığında varsayılandır:
GNU bağlayıcı. Bu seçenek hangisini etkilemez? ld denir; sadece neyi değiştirir
parametreler buna iletilir ld. ld denilen şey tarafından belirlenir
--ile-ld yapılandırma seçeneği, GCC'nin program arama yolu ve son olarak kullanıcının PATH.
GCC tarafından kullanılan bağlayıcı kullanılarak yazdırılabilir hangi gcc -print-prog-name=ld`. Bu
seçenek yalnızca 64-bit HP-UX GCC'de mevcuttur, yani şu şekilde yapılandırılmıştır:
hppa*64*-*-hpux*.
-mhp-ld
HP'ye özel seçenekleri kullanın ld. Bu geçer -b için ld paylaşılan bir kitaplık oluştururken
ve geçer +Kabul et Tür uyumsuzluğu için ld tüm bağlantılarda. GCC olduğunda varsayılandır
HP linker ile açıkça veya örtülü olarak yapılandırılır. Bu seçenek etkilemez
hangi ld denir; sadece buna hangi parametrelerin iletildiğini değiştirir ld. ld
denilen şey tarafından belirlenir --ile-ld yapılandırma seçeneği, GCC'nin program araması
yol ve son olarak kullanıcının PATH. GCC tarafından kullanılan bağlayıcı kullanılarak yazdırılabilir
hangi gcc -print-prog-name=ld`. Bu seçenek yalnızca 64 bit HP-UX'te mevcuttur
GCC, yani yapılandırılmış hppa*64*-*-hpux*.
-mlong-çağrıları
Uzun arama dizileri kullanan kod oluşturun. Bu, bir aramanın her zaman
bağlayıcı tarafından oluşturulan taslaklara ulaşmak için. Varsayılan, yalnızca uzun aramalar oluşturmaktır.
çağrı sitesinden işlevin veya çeviri biriminin başlangıcına kadar olan mesafe,
durum, kullanılan dal türü tarafından belirlenen önceden tanımlanmış bir sınırı aşabilir. NS
normal aramalar için limitler, PA 7,600,000 için sırasıyla 240,000 ve 2.0 bayttır
ve PA 1.X mimarileri. Sibcalls her zaman 240,000 bayt ile sınırlıdır.
Mesafeler, fonksiyonların başlangıcından itibaren ölçülür.
-fonksiyon-bölümler seçeneğini kullanırken veya -mgaz ve -mno-taşınabilir-çalışma zamanı seçenekleri
SOM bağlayıcı ile HP-UX altında birlikte.
Performansı düşürdüğü için normalde bu seçeneğin kullanılması istenmez. Yine de,
büyük uygulamalarda, özellikle de kısmi bağlama kullanıldığında yararlı olabilir.
uygulamayı oluşturun.
Kullanılan uzun çağrı türleri, birleştirici ve bağlayıcının yeteneklerine bağlıdır,
ve oluşturulan kodun türü. Uzun süre destekleyen sistemler üzerindeki etkisi
mutlak çağrılar ve uzun pic sembol farkı veya bilgisayara bağlı çağrılar
nispeten küçük. Ancak, pic kodunda 32 bit ELF sistemlerinde dolaylı bir çağrı kullanılır.
ve oldukça uzundur.
-munix=unix-std
Derleyici ön tanımları oluşturun ve belirtilen UNIX standardı için bir başlangıç dosyası seçin.
için seçimler unix-std vardır 93, 95 ve 98. 93 tüm HP-UX sürümlerinde desteklenir.
95 HP-UX 10.10 ve sonraki sürümlerde mevcuttur. 98 HP-UX 11.11 ve sonraki sürümlerde mevcuttur.
Varsayılan değerler 93 HP-UX 10.00 için, 95 HP-UX 10.10 için 11.00'e kadar ve 98
HP-UX 11.11 ve sonrası için.
-munix=93 GCC 3.3 ve 3.4 ile aynı ön tanımları sağlar. -munix=95 sağlar
"XOPEN_UNIX" ve "_XOPEN_SOURCE_EXTENDED" için ek ön tanımlar ve başlangıç dosyası
unix95.o. -munix=98 "_XOPEN_UNIX" için ek ön tanımlar sağlar,
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" ve "_INCLUDE_XOPEN_SOURCE_500",
ve başlangıç dosyası unix98.o.
Öyle önemli bu seçeneğin çeşitli kitaplıkların arayüzlerini değiştirdiğini belirtmek için
rutinler. Ayrıca C kitaplığının operasyonel davranışını da etkiler. Böylece, aşırı
Bu seçeneği kullanırken dikkatli olunması gerekir.
Birden fazla UNIX standardı ile çalışması amaçlanan kitaplık kodunun test edilmesi,
değişkeni ayarla ve geri yükle __xpg4_extulated_mask uygun. Çoğu GNU yazılımı
bu yeteneği sağlamaz.
-nolibdld
libdld.sl'de arama yapmak için bağlantı seçeneklerinin oluşturulmasını engelleyin. -statik seçenektir
HP-UX 10 ve sonraki sürümlerde belirtilmiştir.
-statik
libc'de setlocale'in HP-UX uygulaması, libdld.sl'ye bağımlıdır. Orası
libdld.sl'nin arşiv versiyonu değil. Böylece, ne zaman -statik seçenek belirtilir,
bu bağımlılığı çözmek için özel bağlantı seçeneklerine ihtiyaç vardır.
HP-UX 10 ve sonraki sürümlerde, GCC sürücüsü, bağlantı kurmak için gerekli seçenekleri ekler.
libdld.sl ne zaman -statik seçeneği belirtilir. Bu, elde edilen ikili dosyanın
dinamik ol. 64 bit bağlantı noktasında, bağlayıcılar varsayılan olarak dinamik ikili dosyalar oluşturur.
her durumda. NS -nolibdld seçeneği, GCC sürücüsünün eklemesini önlemek için kullanılabilir.
bu bağlantı seçenekleri.
-İş Parçacığı
ile çoklu kullanım için destek ekleyin. dce iplik HP-UX altında kitaplık. Bu seçenek
hem önişlemci hem de bağlayıcı için bayraklar ayarlar.
Intel 386 ve AMD x86-64 Opsiyonlar
Bunlar -m i386 ve x86-64 bilgisayar ailesi için seçenekler tanımlanmıştır:
-mart=işlemci tipi
Makine türü için talimatlar oluşturun işlemci tipi. Kıyasla -mtune=işlemci tipi,
bu, yalnızca belirtilen kod için oluşturulan kodu ayarlar işlemci tipi, -mart=işlemci tipi
GCC'nin, biri dışındaki işlemcilerde hiç çalışmayabilecek kod oluşturmasına izin verir.
belirtilen. belirtme -mart=işlemci tipi ima -mtune=işlemci tipi.
için seçimler işlemci tipi şunlardır:
yerli
Bu, aşağıdakileri belirleyerek derleme zamanında kod üretilecek CPU'yu seçer.
derleme makinesinin işlemci türü. kullanma -mart=yerli hepsini etkinleştirir
yerel makine tarafından desteklenen komut alt kümeleri (dolayısıyla sonuç çalışmayabilir
farklı makinelerde). kullanma -mtune=yerel yerel için optimize edilmiş kod üretir
makine, seçilen komut setinin kısıtlamaları altında.
i386
Orijinal Intel i386 işlemci.
i486
Intel i486 işlemci. (Bu çip için herhangi bir zamanlama uygulanmaz.)
i586
pentium
MMX desteği olmayan Intel Pentium CPU.
pentium-mmx
MMX komut seti desteğine sahip Pentium çekirdeğine dayalı Intel Pentium MMX CPU.
pentium pro
Intel Pentium Pro İşlemci.
i686
Ile kullanıldığında -Mart, Pentium Pro komut seti kullanılır, bu nedenle kod çalışır
tüm i686 ailesi yongalarında. ile kullanıldığında -mtune, ile aynı anlama sahiptir
genel.
pentium2
MMX komut seti desteğine sahip Pentium Pro çekirdeğine dayalı Intel Pentium II CPU.
pentium3
pentium3m
MMX ve SSE komut seti ile Pentium Pro çekirdeğine dayalı Intel Pentium III CPU
destekler.
pentium-m
Intel Pentium M; MMX, SSE ve SSE2 ile Intel Pentium III CPU'nun düşük güçlü versiyonu
komut seti desteği. Centrino dizüstü bilgisayarlar tarafından kullanılır.
pentium4
pentium4m
MMX, SSE ve SSE4 komut seti desteğine sahip Intel Pentium 2 CPU.
prescott
MMX, SSE, SSE4 ve SSE2 talimatı ile Intel Pentium 3 CPU'nun geliştirilmiş versiyonu
desteği ayarlayın.
nokona
4 bit uzantılı Intel Pentium 64 CPU'nun geliştirilmiş sürümü, MMX, SSE, SSE2 ve
SSE3 komut seti desteği.
core2
2 bit uzantılı Intel Core 64 CPU, MMX, SSE, SSE2, SSE3 ve SSSE3
komut seti desteği.
çekirdek7
7 bit uzantılı Intel Core i64 CPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 ve
SSE4.2 komut seti desteği.
corei7-avx
7 bit uzantılı Intel Core i64 CPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AES ve PCLMUL komut seti desteği.
çekirdek-avx-i
64 bit uzantılı Intel Core CPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND ve F16C komut seti desteği.
çekirdek-avx2
64 bit uzantılı Intel Core CPU, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 ve F16C
komut seti desteği.
atom
64 bit uzantılı Intel Atom CPU, MOVBE, MMX, SSE, SSE2, SSE3 ve SSSE3
komut seti desteği.
k6 MMX komut seti desteğine sahip AMD K6 CPU.
k6-2
k6-3
AMD K6 CPU'nun MMX ve 3DNow ile geliştirilmiş sürümleri! komut seti desteği.
athlon
atlon-tbird
MMX, 3dNOW!, geliştirilmiş 3DNow! özellikli AMD Athlon CPU! ve SSE ön getirme talimatları
destekler.
atlon-4
atlon-xp
atlon-mp
MMX, 3DNow!, geliştirilmiş 3DNow ile geliştirilmiş AMD Athlon CPU! ve tam SSE talimatı
desteği ayarlayın.
k8
opteron
athlon64
atlon-fx
Dahil olmak üzere x8-86 komut seti desteğine sahip AMD K64 çekirdeğine dayalı işlemciler
AMD Opteron, Athlon 64 ve Athlon 64 FX işlemciler. (Bu, MMX'in yerini alır,
SSE, SSE2, 3DNow!, geliştirilmiş 3DNow! ve 64 bit komut seti uzantıları.)
k8-sse3
opteron-sse3
atlon64-sse3
SSE8 komut seti desteği ile AMD K3 çekirdeklerinin geliştirilmiş sürümleri.
amdfam10
Barcelona
x10-86 komut seti desteğine sahip AMD Ailesi 64h çekirdeklerine dayalı CPU'lar. (Bu
üst kümeler MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, geliştirilmiş 3DNow!, ABM ve 64-bit
komut seti uzantıları.)
bdver1
x15-86 komut seti desteğine sahip AMD Ailesi 64h çekirdeklerine dayalı CPU'lar. (Bu
üst kümeler FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM ve 64 bit komut seti uzantıları.)
bdver2
x15-86 komut seti desteğine sahip AMD Ailesi 64h çekirdek tabanlı CPU'lar. (Bu
üst kümeler BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM ve 64 bit komut seti uzantıları.)
bdver3
x15-86 komut seti desteğine sahip AMD Ailesi 64h çekirdek tabanlı CPU'lar. (Bu
üst kümeler BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM ve 64 bit komut seti uzantıları.
btver1
x14-86 komut seti desteğine sahip AMD Ailesi 64h çekirdeklerine dayalı CPU'lar. (Bu
üst kümeler MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM ve 64-bit komut seti
uzantıları.)
btver2
x16-86 komut seti desteğine sahip AMD Ailesi 64h çekirdeklerine dayalı CPU'lar. Bu
MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX ve 64-bit komut seti uzantıları.
vinç-c6
IDT WinChip C6 CPU, ek MMX komut seti ile i486 ile aynı şekilde ele alındı
destekler.
vinç2
IDT WinChip 2 CPU, ek MMX ve 486DNow ile i3 ile aynı şekilde ele alındı!
komut seti desteği.
c3 MMX ve 3DNow ile VIA C3 CPU! komut seti desteği. (Zamanlama yok
bu çip için uygulandı.)
c3-2
MMX ve SSE komut seti desteği ile VIA C3-2 (Nehemiah/C5XL) CPU. (Numara
zamanlama bu çip için uygulanır.)
jeot
MMX ve 3DNow ile AMD Geode yerleşik işlemci! komut seti desteği.
-mtune=işlemci tipi
Ayarla işlemci tipi ABI hariç, oluşturulan kodla ilgili geçerli olan her şey
ve kullanılabilir yönergeler kümesi. Belirli birini seçerken işlemci tipi programları
belirli bir çip için uygun şeyler, derleyici herhangi bir kod oluşturmaz
kullanmadığınız sürece varsayılan makine türünde çalışamaz. -mart=işlemci tipi seçeneği.
Örneğin, GCC i686-pc-linux-gnu için yapılandırılmışsa -mtune=pentium4 üretir
Pentium 4 için ayarlanmış ancak yine de i686 makinelerinde çalışan kod.
için seçimler işlemci tipi ile aynı -Mart. Ek olarak, -mtune destekler
için ekstra seçim işlemci tipi:
genel
En yaygın IA32/AMD64/EM64T işlemciler için optimize edilmiş kod üretin. Eğer sen
kodunuzun çalışacağı CPU'yu biliyorsanız, ilgili
-mtune or -Mart yerine seçeneği -mtune=genel. Ama eğer bilmiyorsan
uygulamanızın tam olarak hangi CPU kullanıcılarının sahip olacağı, o zaman bunu kullanmalısınız
seçeneği.
Piyasaya yeni işlemciler yerleştirildikçe, bu seçeneğin davranışı
değişecek. Bu nedenle, GCC'nin daha yeni bir sürümüne yükseltirseniz kod oluşturma
bu seçenek tarafından kontrol edilen en çok işlemcileri yansıtacak şekilde değişecektir.
GCC'nin bu sürümünün yayınlandığı tarihte yaygın olan.
Yok -mart=genel seçenek çünkü -Mart komut setini gösterir
derleyici kullanabilir ve tümü için geçerli genel bir talimat seti yoktur.
işlemciler Tersine, -mtune işlemciyi gösterir (veya bu durumda,
kodun optimize edildiği işlemci koleksiyonu).
-mcpu=işlemci tipi
Kullanımdan kaldırılmış bir eş anlamlısı -mtune.
-mfpmath=birim
Seçili birim için kayan nokta aritmetiği oluştur birim. için seçimler birim şunlardır:
387 Çiplerin çoğunda bulunan standart 387 kayan noktalı yardımcı işlemciyi kullanın
ve başka türlü taklit edildi. Bu seçenekle derlenen kod hemen hemen her yerde çalışır.
Geçici sonuçlar, kesinlik yerine 80 bitlik hassasiyetle hesaplanır.
türüne göre belirtilir ve çoğuyla karşılaştırıldığında biraz farklı sonuçlar verir.
diğer cipsler. Görmek -float-mağaza daha detaylı açıklama için.
Bu, i386 derleyicisi için varsayılan seçimdir.
sse SSE komut setinde bulunan skaler kayan nokta komutlarını kullanın. Bu
komut seti, Pentium III ve daha yeni yongalar tarafından ve AMD hattında desteklenir
Athlon-4, Athlon XP ve Athlon MP çipleri ile. SSE'nin önceki sürümü
komut seti yalnızca tek duyarlıklı aritmetiği destekler, bu nedenle çift ve
genişletilmiş kesinlikli aritmetik hala 387 kullanılarak yapılır. Daha sonraki bir sürüm, mevcut
yalnızca Pentium 4 ve AMD x86-64 yongalarında çift duyarlıklı aritmetiği de destekler.
i386 derleyicisi için kullanmanız gerekir -mart=işlemci tipi, -msse or -msse2 geçiş yapar
SSE uzantılarını etkinleştirin ve bu seçeneği etkili hale getirin. x86-64 derleyicisi için,
bu uzantılar varsayılan olarak etkindir.
Ortaya çıkan kod, çoğu durumda önemli ölçüde daha hızlı olmalıdır ve
387 kodunun sayısal kararsızlık problemlerinden kaçının, ancak mevcut bazılarını bozabilir
geçicilerin 80 bit olmasını bekleyen kod.
Bu, x86-64 derleyicisi için varsayılan seçimdir.
sse,387
se+387
her ikisi de
Her iki komut setini de aynı anda kullanmaya çalışın. Bu, verimliliği iki katına çıkarır.
kullanılabilir kayıt sayısı ve 387 için ayrı yürütme birimlerine sahip çiplerde
ve yürütme kaynaklarını da SSE. Bu seçeneği dikkatli kullanın, çünkü hala
deneysel, çünkü GCC kayıt ayırıcısı ayrı modellemez
işlevsel birimleri iyi, kararsız performansa neden olur.
-masm=diyalekt
Seçilenleri kullanarak montaj talimatlarının çıktısını alın diyalekt. Desteklenen seçenekler intel or
için (varsayılan). Darwin desteklemiyor intel.
-mieee-fp
-mno-ieee-fp
Derleyicinin IEEE kayan nokta karşılaştırmalarını kullanıp kullanmadığını kontrol edin. Bunlar
karşılaştırma sonucunun sırasız olduğu durumu doğru şekilde ele alın.
-msoft-float
Kayan nokta için kitaplık çağrılarını içeren çıktı oluşturun.
Uyarı: gerekli kitaplıklar GCC'nin parçası değildir. Normalde tesislerin
makinenin olağan C derleyicisi kullanılır, ancak bu doğrudan çapraz olarak yapılamaz.
derleme. Uygun kütüphane sağlamak için kendi düzenlemelerinizi yapmalısınız.
çapraz derleme için işlevler.
Bir işlevin 80387 kaydında kayan nokta sonuçları döndürdüğü makinelerde
yığın, bazı kayan noktalı işlem kodları, -msoft-float kullanıldı.
-mno-fp-ret-in-387
Fonksiyonların dönüş değerleri için FPU kayıtlarını kullanmayın.
Her zamanki çağırma kuralı, "float" ve "double" türlerinin işlev döndürme değerlerine sahiptir.
FPU olmasa bile bir FPU kaydında. Fikir şu ki, işletim sistemi
bir FPU'yu taklit etmelidir.
Seçenek -mno-fp-ret-in-387 bu tür değerlerin sıradan CPU'da döndürülmesine neden olur
yerine kaydeder.
-mno-fantezi-matematik-387
Bazı 387 öykünücü, "sin", "cos" ve "sqrt" komutlarını desteklemez.
387. Bu talimatları oluşturmaktan kaçınmak için bu seçeneği belirleyin. Bu seçenek,
FreeBSD, OpenBSD ve NetBSD'de varsayılan. Bu seçenek şu durumlarda geçersiz kılınır: -Mart
hedef CPU'nun her zaman bir FPU'ya sahip olduğunu ve bu nedenle talimatın gerekmediğini gösterir.
öykünme. Siz de kullanmadığınız sürece bu talimatlar oluşturulmaz.
-funsafe-matematik-optimizasyonları geçiş.
-malign-çift
-mno-align-double
GCC'nin "double", "long double" ve "long long" değişkenlerini bir
iki kelimelik sınır veya tek kelimelik sınır. İki kelime üzerinde "çift" değişkenleri hizalama
sınır, bir Pentium'da biraz daha hızlı çalışan kod üretir ve daha fazlası pahasına
bellek.
x86-64'te, -malign-çift varsayılan olarak etkindir.
Uyarı: eğer kullanırsan -malign-çift anahtarı, yukarıdaki türleri içeren yapılar
yayınlanan uygulama ikili arabirim belirtimlerinden farklı şekilde hizalanır
386 için ve derlenmiş koddaki yapılarla ikili uyumlu değildir.
o anahtar.
-m96bit-uzun-çift
-m128bit-uzun-çift
Bu anahtarlar "uzun çift" tipin boyutunu kontrol eder. i386 uygulama ikili dosyası
arabirim, boyutun 96 bit olduğunu belirtir, bu nedenle -m96bit-uzun-çift varsayılan
32 bit modu.
Modern mimariler (Pentium ve daha yenileri), 8- ile hizalanmak için "uzun çift" tercih eder.
veya 16 baytlık sınır. ABI'ye uygun dizilerde veya yapılarda bu,
mümkün. yani belirterek -m128bit-uzun-çift "uzun çifti" 16 bayta hizalar
"uzun çifti" ek bir 32-bit sıfır ile doldurarak sınır.
x86-64 derleyicisinde, -m128bit-uzun-çift ABI olarak varsayılan seçimdir
"uzun çift"in 16 baytlık sınırda hizalandığını belirtir.
Bu seçeneklerin hiçbirinin x87 standardına göre herhangi bir ekstra hassasiyet sağlamadığına dikkat edin.
"uzun çift" için 80 bit.
Uyarı: hedef ABI'niz için varsayılan değeri geçersiz kılarsanız, bu, boyutu değiştirir
"long double" değişkenleri içeren yapıların ve dizilerin yanı sıra
"uzun çift" alan işlevler için işlev çağırma kuralı. bu yüzden değiller
bu anahtar olmadan derlenen kodla ikili uyumlu.
-mlong-çift-64
-mlong-çift-80
Bu anahtarlar "uzun çift" tipin boyutunu kontrol eder. 64 bitlik bir boyut,
"double" tipine eşdeğer "long double" tipi. Bu Bionic C için varsayılandır
kütüphane.
Uyarı: hedef ABI'niz için varsayılan değeri geçersiz kılarsanız, bu, boyutu değiştirir
"long double" değişkenleri içeren yapıların ve dizilerin yanı sıra
"uzun çift" alan işlevler için işlev çağırma kuralı. bu yüzden değiller
bu anahtar olmadan derlenen kodla ikili uyumlu.
-mlarge-veri eşiği=eşik
Ne zaman -mcmodel=orta belirtilenden daha büyük veri nesneleri eşik yerleştirildi
büyük veri bölümü. Bu değer, bağlantılı tüm nesnelerde aynı olmalıdır.
ikili dosyadır ve varsayılan olarak 65535'tir.
-mrtd
Sabit bir değer alan işlevlerin olduğu farklı bir işlev çağırma kuralı kullanın.
"ret" ile dönen argüman sayısı numara" argümanlarını ortaya çıkaran talimat
dönerken. Bu, arayana bir talimat kaydeder çünkü aramaya gerek yoktur.
argümanları oraya yerleştirin.
Bu çağrı dizisiyle tek bir işlevin çağrılmasını şu şekilde belirtebilirsiniz:
işlev özelliği standart çağrı. Ayrıca geçersiz kılabilirsiniz -mrtd seçeneğini kullanarak
işlev niteliği cdecl.
Uyarı: bu çağrı kuralı, normalde Unix'te kullanılanla uyumsuzdur,
bu yüzden Unix derleyicisi ile derlenen kitaplıkları çağırmanız gerekiyorsa onu kullanamazsınız.
Ayrıca, değişken alan tüm fonksiyonlar için fonksiyon prototipleri sağlamalısınız.
argüman sayısı ("printf" dahil); aksi takdirde yanlış kod oluşturulur
bu işlevlere çağrı yapar.
Ayrıca, çok fazla işleve sahip bir işlevi çağırırsanız ciddi şekilde yanlış kod sonuçları ortaya çıkar.
argümanlar. (Normalde, fazladan argümanlar zararsız bir şekilde göz ardı edilir.)
-mregparm=num
Tamsayı argümanlarını iletmek için kaç kayıt kullanıldığını kontrol edin. Varsayılan olarak, hayır
kayıtlar argümanları iletmek için kullanılır ve en fazla 3 kayıt kullanılabilir. Yapabilirsiniz
function niteliğini kullanarak belirli bir işlev için bu davranışı kontrol edin regparm.
Uyarı: bu anahtarı kullanırsanız ve num sıfır değilse, tüm modülleri oluşturmalısınız
herhangi bir kitaplık da dahil olmak üzere aynı değere sahip. Bu, sistem kitaplıklarını ve
başlangıç modülleri
-msseregparm
Kayan nokta ve çift bağımsız değişkenler ve dönüş değerleri için SSE kaydı geçen kuralları kullanın.
function niteliğini kullanarak belirli bir işlev için bu davranışı kontrol edebilirsiniz.
sseregparm.
Uyarı: bu anahtarı kullanırsanız, tüm modülleri aynı değerde oluşturmalısınız,
herhangi bir kitaplık dahil. Bu, sistem kitaplıklarını ve başlangıç modüllerini içerir.
-mvect8-ret-in-meminde
MMX kayıtları yerine bellekte 8 baytlık vektörler döndürün. Bu, varsayılan
Solaris@tie{}8 ve 9 ve VxWorks, şu ana kadar Sun Studio derleyicilerinin ABI'si ile eşleşecek
sürüm 12. Daha sonraki derleyici sürümleri (Studio 12 Update@tie{}1 ile başlayan) aşağıdaki gibidir
Solaris@tie{}86 ve sonraki sürümlerde varsayılan olan diğer x10 hedefleri tarafından kullanılan ABI.
Bir tek tarafından üretilen mevcut kodla uyumlu kalmanız gerekiyorsa bu seçeneği kullanın.
GCC'nin önceki derleyici sürümleri veya eski sürümleri.
-mpc32
-mpc64
-mpc80
80387 kayan nokta hassasiyetini 32, 64 veya 80 bit olarak ayarlayın. Ne zaman -mpc32 belirtilir,
kayan nokta işlemlerinin sonuçlarının önemi 24 bite yuvarlanır
(Tek hassasiyet); -mpc64 kayan nokta sonuçlarının anlamlarını yuvarlar
53 bite kadar işlemler (çift hassasiyet) ve -mpc80 sonuçların anlamlarını yuvarlar
kayan nokta işlemlerinin 64 bite (genişletilmiş çift kesinlik)
varsayılan. Bu seçenek kullanıldığında, daha yüksek hassasiyette kayan nokta işlemleri
FPU kontrol sözcüğü açıkça ayarlanmadan programcı tarafından kullanılamaz.
Kayan nokta işlemlerinin yuvarlanmasını varsayılan 80 bitin altına ayarlamak,
bazı programları %2 veya daha fazla hızlandırır. Bazı matematiksel kitaplıkların şunu varsaydığına dikkat edin.
genişletilmiş kesinlik (80 bit) kayan nokta işlemleri varsayılan olarak etkindir; rutinler
bu tür kitaplıklarda, tipik olarak,
hassasiyeti ayarlamak için bu seçenek kullanıldığında "felaket iptali" olarak adlandırılır.
genişletilmiş hassasiyetten daha az.
-mstackrealign
Girişte yığını yeniden hizalayın. Intel x86'da, -mstackrealign seçenek üretir
gerekirse çalışma zamanı yığınını yeniden hizalayan alternatif giriş ve sonsöz. Bu
4 baytlık yığın hizalamasını koruyan eski kodların, modern kodlarla karıştırılmasını destekler.
SSE uyumluluğu için 16 baytlık yığın hizalamasını koruyun. Ayrıca özniteliğe bakın
"force_align_arg_pointer", bireysel işlevlere uygulanabilir.
-mpreferred-yığın sınırı=num
Yığın sınırını 2 ile aynı hizada tutmaya çalışın. num bayt sınırı. Eğer
-mpreferred-stack-sınır belirtilmemişse, varsayılan 4'tür (16 bayt veya 128 bit).
Uyarı: SSE uzantılı x86-64 mimarisi için kod oluştururken
engelli, -mpreferred-yığın sınırı=3 yığın sınırını hizalı tutmak için kullanılabilir
8 bayt sınırına kadar. x86-64 ABI, 16 bayt yığın hizalaması gerektirdiğinden, bu ABI'dir
uyumsuz ve yığın alanının olduğu kontrollü ortamda kullanılması amaçlanan
önemli sınırlama Bu seçenek, işlevler derlendiğinde yanlış koda yol açacaktır.
16 baytlık yığın hizalamalı (standart bir kitaplıktan gelen işlevler gibi) çağrılır
yanlış hizalanmış yığın ile. Bu durumda, SSE talimatları yanlış hizalanmış belleğe yol açabilir.
erişim tuzakları. Ayrıca, 16 bayt için değişken argümanları yanlış işlenecektir.
hizalanmış nesneler (x87 long double ve __int128) dahil, yanlış sonuçlara yol açıyor.
Tüm modülleri şu şekilde oluşturmalısınız: -mpreferred-yığın sınırı=3, herhangi bir kitaplık dahil.
Bu, sistem kitaplıklarını ve başlangıç modüllerini içerir.
-mincoming-yığın-sınır=num
Gelen yığının yükseltilmiş bir 2 ile hizalandığını varsayalım. num bayt sınırı. Eğer
-gelen-yığın-sınır belirtilmemiş, tarafından belirtilen
-mpreferred-stack-sınır kullanıldı.
Pentium ve Pentium Pro'da "double" ve "long double" değerleri bir
8 baytlık sınır (bkz. -malign-çift) veya önemli çalışma süresi performansından muzdarip
cezalar. Pentium III'te, "__m128" Akış SIMD Uzantısı (SSE) veri türü
16 bayt hizalı değilse düzgün çalışmaz.
Bu değerlerin yığın üzerinde uygun şekilde hizalanmasını sağlamak için yığın sınırı şu şekilde olmalıdır:
yığında depolanan herhangi bir değerin gerektirdiği şekilde hizalanır. Ayrıca, her fonksiyon
yığını hizalı tutacak şekilde oluşturulmalıdır. Böylece bir fonksiyon çağırmak
daha düşük bir ile derlenmiş bir işlevden daha yüksek bir tercih edilen yığın sınırı ile derlenmiş
tercih edilen yığın sınırı büyük olasılıkla yığını yanlış hizalar. tavsiye edilir
geri aramaları kullanan kitaplıklar her zaman varsayılan ayarı kullanır.
Bu ekstra hizalama, fazladan yığın alanı tüketir ve genellikle kodu artırır
boy. Gömülü sistemler gibi yığın alanı kullanımına duyarlı kodlar ve
işletim sistemi çekirdekleri, tercih edilen hizalamayı azaltmak isteyebilir
-mpreferred-yığın sınırı=2.
-mmmx
-mno-mmx
-msse
-mno-sse
-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-aes
-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
-mrtm
-mtbm
-mno-tbm
Bu anahtarlar, MMX, SSE, SSE2, SSE3'teki talimatların kullanımını etkinleştirir veya devre dışı bırakır.
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT, RTM veya 3DNow! genişletilmiş komut setleri Bunlar
uzantılar ayrıca yerleşik işlevler olarak da mevcuttur: bkz. X86 Gömme fonksiyonlar, Için
bu anahtarlar tarafından etkinleştirilen ve devre dışı bırakılan işlevlerin ayrıntıları.
Kayan nokta kodundan otomatik olarak SSE/SSE2 komutları oluşturmak için (tersine
387 talimata kadar), bkz. -mfpmath=sse.
GCC, şu durumlarda SSEx talimatlarını bastırır: -mavx kullanıldı. Bunun yerine, yeni AVX üretir
gerektiğinde tüm SSEx talimatları için talimatlar veya AVX eşdeğerliği.
Bu seçenekler, GCC'nin bu genişletilmiş talimatları oluşturulan kodda kullanmasını sağlar.
olmadan -mfpmath=sse. Çalışma zamanı CPU algılaması gerçekleştiren uygulamalar derlenmelidir
uygun bayrakları kullanarak desteklenen her mimari için ayrı dosyalar. İçinde
özellikle, CPU algılama kodunu içeren dosya,
bu seçenekler.
-mcld
Bu seçenek, GCC'ye fonksiyonların girişinde bir "cld" talimatı vermesini söyler.
dize talimatlarını kullanan. Dize talimatları, seçilecek DF bayrağına bağlıdır
Otomatik artırma veya otomatik azaltma modu arasında. ABI, DF bayrağını belirtirken
işlev girişinde temizlenebilir, bazı işletim sistemleri bu belirtimi ihlal etmeyerek
istisna göndericilerinde DF bayrağını temizleme. İstisna işleyici olabilir
DF bayrak seti ile çağrılır, bu da dize olduğunda yanlış yön moduna yol açar.
yönergeler kullanılır. Bu seçenek, 32-bit x86 hedeflerinde varsayılan olarak şu şekilde etkinleştirilebilir:
ile GCC'yi yapılandırma --enable-cld seçeneğini yapılandırın. "cld" üretimi
komutları ile bastırılabilir -mno-cld bu durumda derleyici seçeneği.
-mvzerupper
Bu seçenek, GCC'ye bir aktarımdan önce bir "vzeroupper" talimatı vermesini söyler.
AVX'ten SSE'ye geçiş cezasını da en aza indirmek için işlevden akışı kontrol edin
gereksiz "sıfırlayıcı" iç öğelerini kaldırın.
-mprefer-avx128
Bu seçenek, GCC'ye 128-bit AVX yerine 256-bit AVX talimatlarını kullanma talimatı verir.
otomatik vektörleştiricideki talimatlar.
-mcx16
Bu seçenek, GCC'nin "CMPXCHG16B" talimatları oluşturmasını sağlar. "CMPXCHG16B" izin verir
128-bit çift dörtlü (veya oword) veri türlerinde atomik işlemler için. Bu
birden çok işlemci tarafından güncellenebilen yüksek çözünürlüklü sayaçlar için kullanışlıdır (veya
çekirdekler). Bu talimat, atomik yerleşik işlevlerin bir parçası olarak oluşturulur: bkz.
__senkronize yerleşikler or __atomik yerleşikler Ayrıntılar için.
-msahf
Bu seçenek, 64 bit kodda "SAHF" komutlarının oluşturulmasını sağlar. Erken Intel
Pentium 4 G64 adımının tanıtılmasından önce Intel 4 destekli Pentium 1 CPU'lar
Aralık 2005'te, tarafından desteklenen "LAHF" ve "SAHF" talimatlarından yoksundu.
AMD64. Bunlar, belirli durum bayrakları için sırasıyla yükleme ve depolama talimatlarıdır.
64 bit modunda, "SAHF" komutu "fmod", "drem" ve
"kalan" yerleşik işlevler; görmek Diğer: belirtin yerleşikler Ayrıntılar için.
-mmovbe
Bu seçenek, "__builtin_bswap32"yi uygulamak için "movbe" komutunun kullanılmasını sağlar.
ve "__builtin_bswap64".
-mcrc32
Bu seçenek, "__builtin_ia32_crc32qi" yerleşik işlevlerini etkinleştirir,
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" ve "__builtin_ia32_crc32di"
"crc32" makine talimatını oluşturun.
-mrecip
Bu seçenek, "RCPSS" ve "RSQRTSS" komutlarının (ve vektörleştirilmiş
"RCPPS" ve "RSQRTPS") varyantları, artırmak için ek bir Newton-Raphson adımı ile
tekli için "DIVSS" ve "SQRTSS" (ve vektörleştirilmiş varyantları) yerine kesinlik
hassas kayan nokta argümanları. Bu talimatlar yalnızca şu durumlarda oluşturulur:
-funsafe-matematik-optimizasyonları ile birlikte etkinleştirilir -sonlu-matematik-sadece ve
-fno-trapping-matematiği. Dizinin verimi,
karşılıklı olmayan talimatın verimi, dizinin kesinliği olabilir
2 ulp'ye kadar azaltılır (yani 1.0'ın tersi 0.99999994'e eşittir).
GCC'nin "1.0f/sqrtf(x)" zaten "RSQRTSS" (veya "RSQRTPS") açısından
ile -fffast-matematik (veya yukarıdaki seçenek kombinasyonu) ve gerek yok -mrecip.
Ayrıca, GCC'nin yukarıdaki diziyi, aşağıdakiler için ek Newton-Raphson adımıyla yayınladığını unutmayın.
vektörleştirilmiş tek kayan noktalı bölme ve vektörleştirilmiş "sqrtf(x)" zaten ile -fffast-matematik
(veya yukarıdaki seçenek kombinasyonu) ve gerek yok -mrecip.
-mrecip=yeğlemek
Bu seçenek, hangi karşılıklı tahmin talimatlarının kullanılabileceğini kontrol eder. yeğlemek bir
virgülle ayrılmış seçenekler listesi, önünde bir ! seçeneği tersine çevirmek için:
herşey Tüm tahmin talimatlarını etkinleştirin.
varsayılan
Şuna eşdeğer varsayılan talimatları etkinleştirin: -mrecip.
Yok
Tüm tahmin talimatlarını devre dışı bırakın, eşdeğer -mno-reçete.
div Skaler bölme için yaklaşımı etkinleştirin.
vec-div
Vectorized bölme için yaklaşımı etkinleştirin.
sqrt
Skaler karekök için yaklaşımı etkinleştirin.
vec-sqrt
Vektörleştirilmiş karekök için yaklaşımı etkinleştirin.
Yani, örneğin, -mrecip=tümü,!sqrt tüm karşılıklı yaklaşımları sağlar,
karekök hariç.
-mveclibabi=tip
Harici bir kitaplık kullanarak içselleri vektörleştirmek için kullanılacak ABI türünü belirtir.
için desteklenen değerler tip vardır svml Intel kısa vektör matematik kitaplığı için ve AML
AMD matematik çekirdek kitaplığı için. Bu seçeneği kullanmak için hem -ftree-vektörize ve
-funsafe-matematik-optimizasyonları etkinleştirilmelidir ve bir SVML veya ACML ABI uyumlu
kütüphane bağlantı zamanında belirtilmelidir.
GCC şu anda "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",
ilgili işlev türü için "vmlsAcosh4" ve "vmlsAcos4" -mveclibabi=svml is
kullanılmış ve "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
İlgili işlev türü için "__vrs4_log2f", "__vrs4_log10f" ve "__vrs4_powf"
ne zaman -mveclibabi=acml kullanıldı.
-mabi=isim
Belirtilen arama kuralı için kod oluşturun. İzin verilen değerler sistem için
GNU/Linux ve diğer sistemlerde kullanılan ABI ve ms Microsoft ABI için. NS
varsayılan, Microsoft Windows ve SysV ABI'yi hedeflerken Microsoft ABI'yi kullanmaktır.
diğer tüm sistemlerde. kullanarak belirli bir işlev için bu davranışı kontrol edebilirsiniz.
işlev özelliği ms_abi/sysv_abi.
-mtls-lehçesi=tip
kullanarak iş parçacığı yerel depolamasına erişmek için kod oluşturun. gnu or gnu2 sözleşmeler. gnu
muhafazakar varsayılandır; gnu2 daha verimlidir, ancak derleme ve çalıştırma ekleyebilir
tüm sistemlerde karşılanamayan zaman gereksinimleri.
-push-arg'lar
-mno-push-arg'lar
Giden parametreleri depolamak için PUSH işlemlerini kullanın. Bu yöntem daha kısadır ve genellikle
SUB/MOV işlemlerini kullanan yöntem kadar hızlıdır ve varsayılan olarak etkindir. bazılarında
devre dışı bırakan durumlar, geliştirilmiş zamanlama ve azaltılmış performans nedeniyle performansı artırabilir
bağımlılıklar.
-maccumulate-giden-arglar
Etkinleştirilirse, giden bağımsız değişkenler için gereken maksimum alan miktarı şu şekilde hesaplanır:
fonksiyon prologu. Bu, azaltılmış olması nedeniyle çoğu modern CPU'da daha hızlıdır.
tercih edilen yığın olduğunda bağımlılıklar, iyileştirilmiş zamanlama ve azaltılmış yığın kullanımı
sınır 2'ye eşit değildir. Dezavantajı, kod boyutunda dikkate değer bir artıştır. Bu
anahtarı ima eder -mno-push-arg'lar.
-mthreads
MinGW'de iş parçacığı güvenli istisna işlemeyi destekleyin. İş parçacığı güvenliğine güvenen programlar
istisna işleme, tüm kodu derlemeli ve -mthreads seçenek. Ne zaman
derleme, -mthreads "-D_MT"yi tanımlar; bağlanırken, özel bir iş parçacığına bağlanır
yardımcı kitaplık -lmingwthrd hangi iş parçacığı başına özel durum işleme verilerini temizler.
-mno-hizalama-stringops
Satır içi dize işlemlerinin hedefini hizalamayın. Bu anahtar kodu azaltır
hedefin zaten hizalanmış olması durumunda boyutu ve performansı artırır, ancak GCC
bundan haberi yok.
-minline-all-stringops
Varsayılan olarak GCC satır içi dize işlemlerini yalnızca hedefin
en az 4 baytlık bir sınıra hizalanır. Bu, daha fazla satır içi kullanıma olanak tanır ve kodu artırır
ancak hızlı "memcpy", "strlen" ve
kısa uzunluklar için "memset".
-minline-stringops-dinamik olarak
Bilinmeyen boyuttaki dize işlemleri için, küçük için satır içi kodlu çalışma zamanı kontrollerini kullanın.
bloklar ve büyük bloklar için bir kütüphane çağrısı.
-mstringop-strateji=alg
Belirli bir algoritma için kullanılacak dahili karar buluşsal yöntemini geçersiz kılın.
satır içi dize işlemleri. için izin verilen değerler alg şunlardır:
rep_byte
rep_4bayt
rep_8bayt
Belirtilen boyutta i386 "rep" önekini kullanarak genişletin.
bayt_döngüsü
döngü
unrolled_loop
Bir satır içi döngüye genişletin.
kütüphane çağrısı
Her zaman bir kütüphane çağrısı kullanın.
-momit-yaprak-çerçeve-işaretçi
Çerçeve işaretçisini yaprak işlevleri için bir kayıtta tutmayın. Bu,
çerçeve işaretçilerini kaydetme, ayarlama ve geri yükleme talimatları ve fazladan bir kayıt yapar
yaprak fonksiyonlarında mevcuttur. Seçenek -fomit-yaprak-çerçeve-işaretçi çerçeveyi kaldırır
hata ayıklamayı zorlaştırabilecek yaprak işlevleri için işaretçi.
-mtls-doğrudan-seg-refs
-mno-tls-doğrudan-seg-refs
TLS değişkenlerine TLS segmentinden ofsetlerle erişilip erişilemeyeceğini kontrol eder
kaydı (32 bit için %gs, 64 bit için %fs) veya iş parçacığı temel işaretçisinin
katma. Bunun geçerli olup olmadığı işletim sistemine ve geçerli olup olmadığına bağlıdır.
segmenti tüm TLS alanını kapsayacak şekilde eşler.
GNU C Kitaplığını kullanan sistemler için varsayılan değer açıktır.
-msse2avx
-mno-sse2avx
Montajcının SSE talimatlarını VEX öneki ile kodlaması gerektiğini belirtin. Seçenek
-mavx bunu varsayılan olarak açar.
-mfentry
-mno-fentry
Profil oluşturma etkinse (-pg), profil oluşturma sayaç çağrısını önsözden önce koyun.
Not: x86 mimarilerinde "ms_hook_prologue" özelliği şu anda mümkün değildir.
için an -mfentry ve -pg.
-m8bit-idiv
-mno-8bit-idiv
Intel Atom gibi bazı işlemcilerde, 8 bitlik işaretsiz tamsayı bölme işlemi,
32-bit/64-bit tamsayı bölme. Bu seçenek, bir çalışma zamanı denetimi oluşturur. İkisi de olursa
bölünen ve bölen 0 ila 255 aralığında, 8 bitlik işaretsiz tamsayı bölme
32-bit/64-bit tamsayı bölme yerine kullanılır.
-mavx256-bölünmüş-hizasız-yük
-mavx256-bölünmüş-hizasız-mağaza
32 baytlık AVX hizasız yüklemeyi böl ve depola.
Bunlar -m 86-bit x64-64 işlemcilerde yukarıdakilere ek olarak anahtarlar desteklenir
ortamlar.
-m32
-m64
-mx32
32 bit veya 64 bit ortam için kod oluşturun. NS -m32 seçenek "int", "uzun" ayarlar,
ve işaretçi türleri 32 bittir ve herhangi bir i386 sisteminde çalışan kod üretir.
The -m64 seçenek, "int"i 32 bite ve "long" ve işaretçi türlerini 64 bite ayarlar ve
x86-64 mimarisi için kod üretir. Darwin için sadece -m64 ayrıca seçenek
kapatır -fno-resim ve -mdinamik-resimsiz seçenekleri.
The -mx32 seçenek "int", "long" ve işaretçi türlerini 32 bit olarak ayarlar ve kod üretir
x86-64 mimarisi için.
-mno-kırmızı-bölge
x86-64 kodu için sözde "kırmızı bölge" kullanmayın. Kırmızı bölge,
x86-64 ABI; olmayan yığın işaretçisinin konumunun ötesinde 128 baytlık bir alandır.
sinyal veya kesme işleyicileri tarafından değiştirilir ve bu nedenle geçici veriler için kullanılabilir
yığın işaretçisini ayarlamadan. Bayrak -mno-kırmızı-bölge bu kırmızı bölgeyi devre dışı bırakır.
-mcmodel=küçük
Küçük kod modeli için kod oluşturun: program ve sembolleri
adres alanının alt 2 GB'ı. İşaretçiler 64 bittir. programlar olabilir
statik veya dinamik olarak bağlantılı. Bu, varsayılan kod modelidir.
-mcmodel=çekirdek
Çekirdek kod modeli için kod oluşturun. Çekirdek, eksi 2 GB'de çalışır.
adres alanı. Bu model Linux çekirdek kodu için kullanılmalıdır.
-mcmodel=orta
Orta model için kod oluşturun: program, aşağıdaki 2 GB'lık alana bağlanır.
adres alanı. Küçük semboller de oraya yerleştirilmiştir. Şundan daha büyük boyutlara sahip semboller
-mlarge-veri eşiği büyük veri veya BSS bölümlerine konur ve bulunabilir
2GB'ın üzerinde. Programlar statik veya dinamik olarak bağlanabilir.
-mcmodel=büyük
Büyük model için kod oluşturun. Bu model, adresler hakkında hiçbir varsayımda bulunmaz
ve bölümlerin boyutları.
-maddress-modu=uzun
Uzun adres modu için kod oluşturun. Bu yalnızca 64 bit ve x32 için desteklenir
ortamlar. 64 bit ortamlar için varsayılan adres modudur.
-maddress-modu=kısa
Kısa adres modu için kod oluşturun. Bu yalnızca 32 bit ve x32 için desteklenir
ortamlar. 32 bit ve x32 ortamları için varsayılan adres modudur.
i386 ve x86-64 Windows Opsiyonlar
Bu ek seçenekler, Microsoft Windows hedefleri için kullanılabilir:
-mkonsol
Bu seçenek, komut verilerek bir konsol uygulamasının oluşturulacağını belirtir.
konsol uygulamaları için gerekli PE başlık alt sistemi türünü ayarlamak için bağlayıcı.
Bu seçenek Cygwin ve MinGW hedefleri için mevcuttur ve şu anda varsayılan olarak etkindir:
o hedefler.
-mdll
Bu seçenek Cygwin ve MinGW hedefleri için kullanılabilir. Bir DLL---a
dinamik bağlantı kitaplığı --- oluşturulacak ve gerekli
çalışma zamanı başlangıç nesnesi ve giriş noktası.
-mnop-eğlenceli-dll içe aktarma
Bu seçenek Cygwin ve MinGW hedefleri için kullanılabilir. olduğunu belirtir
"dllimport" özelliği yoksayılmalıdır.
-mthread
Bu seçenek MinGW hedefleri için kullanılabilir. MinGW'ye özgü iş parçacığını belirtir
destek kullanılacaktır.
- cep telefonu kodu
Bu seçenek MinGW-w64 hedefleri için kullanılabilir. "UNICODE" önişlemcisine neden olur
makroyu önceden tanımlayacak ve Unicode özellikli çalışma zamanı başlangıç kodunu seçecektir.
-mwin32
Bu seçenek Cygwin ve MinGW hedefleri için kullanılabilir. Tipik olduğunu belirtir
Microsoft Windows ön tanımlı makroları ön işlemcide ayarlanmalıdır, ancak
çalışma zamanı kitaplığı/başlangıç kodu seçimini etkiler.
-mwindows
Bu seçenek Cygwin ve MinGW hedefleri için kullanılabilir. Bir GUI olduğunu belirtir
uygulama, bağlayıcıya PE başlığını ayarlaması talimatı verilerek oluşturulacaktır.
alt sistem türünü uygun şekilde ayarlayın.
-fno-set-yığın-çalıştırılabilir
Bu seçenek MinGW hedefleri için kullanılabilir. için yürütülebilir bayrağın olduğunu belirtir.
iç içe işlevler tarafından kullanılan yığın ayarlanmadı. Bu, çalışan ikili dosyalar için gereklidir
ayarlamak için kullanılan User32 API'sinde olduğu gibi, Microsoft Windows'un çekirdek modunda
yürütülebilir ayrıcalıklar, mevcut değil.
-fwritable-yeniden konumlandırılmış-rdata
Bu seçenek MinGW ve Cygwin hedefleri için kullanılabilir. Yer değiştirdiğini belirtir-
salt okunur bölümündeki veriler .data bölümüne konur. Bu yaşlılar için gerekli
çalışma zamanları, sözde yer değiştirme için .rdata bölümlerinin değiştirilmesini desteklemez.
-mpe uyumlu-ortak
Bu seçenek Cygwin ve MinGW hedefleri için kullanılabilir. GNU olduğunu belirtir
ORTAK değişkenlerin doğru hizalanmasına izin veren PE dosya biçiminin uzantısı
kod üretirken kullanılmalıdır. GCC tarafından algılanırsa varsayılan olarak etkindir.
yapılandırma sırasında bulunan hedef birleştirici özelliği destekler.
Ayrıca bakınız i386 ve x86-64 Opsiyonlar standart seçenekler için
IA-64 Opsiyonlar
Bunlar şunlardır -m Intel IA-64 mimarisi için tanımlanan seçenekler.
-big-endian
Büyük endian hedefi için kod oluşturun. Bu, HP-UX için varsayılandır.
-küçük endian
Küçük bir endian hedefi için kod oluşturun. Bu, AIX5 ve GNU/Linux için varsayılandır.
-mgnu-as
-mno-gnu-as
GNU derleyicisi için kod oluşturun (veya oluşturmayın). Bu varsayılandır.
-mgnu-ld
-mno-gnu-ld
GNU bağlayıcısı için kod oluşturun (veya oluşturmayın). Bu varsayılandır.
-mno-resim
Genel işaretçi kaydı kullanmayan kod oluşturun. Sonuç pozisyon değil
bağımsız koddur ve IA-64 ABI'yi ihlal eder.
-mvolatile-asm-durdurma
-mno-uçucu-asm-stop
Volatile asm deyimlerinden hemen önce ve sonra bir stop biti oluşturun (veya yapmayın).
-mregister-isimleri
-mno-kayıt-adları
Oluştur (veya yapma) in, loc, ve dışarı yığılmış kayıtlar için kayıt adları. Bu
assembler çıktısını daha okunaklı hale getirebilir.
-mno-sdata
-msdata
Küçük veri bölümünü kullanan optimizasyonları devre dışı bırakın (veya etkinleştirin). Bu yararlı olabilir
optimize edici hataların etrafında çalışmak için.
-mconstant-gp
Tek bir sabit genel işaretçi değeri kullanan kod oluşturun. Bu yararlı olduğunda
çekirdek kodu derleme.
-oto-resim
Kendi kendine yer değiştirebilen kod oluşturun. Bu şu anlama gelir: -mconstant-gp. Bu kullanışlı
ürün yazılımı kodunu derlerken.
-minline-float-bölme-min-gecikme
Minimum gecikmeyi kullanarak kayan noktalı değerlerin satır içi bölmeleri için kod oluşturun
algoritması.
-minline-float-bölme-maks-iş hacmi
Maksimum verimi kullanarak kayan noktalı değerlerin satır içi bölmeleri için kod oluşturun
algoritması.
-mno-inline-float-bölme
Kayan noktalı değerlerin bölmeleri için satır içi kod oluşturmayın.
-minline-int-bölme-min-gecikme
Minimum gecikmeyi kullanarak tamsayı değerlerinin satır içi bölmeleri için kod oluşturun
algoritması.
-minline-int-divide-maks-iş hacmi
Maksimum verimi kullanarak tamsayı değerlerinin satır içi bölmeleri için kod oluşturun
algoritması.
-mno-inline-int-bölme
Tamsayı değerlerinin bölmeleri için satır içi kod oluşturmayın.
-minline-sqrt-min-gecikme
Minimum gecikme algoritmasını kullanarak satır içi karekökler için kod oluşturun.
-minline-sqrt-maks-iş hacmi
Maksimum verim algoritmasını kullanarak satır içi karekökler için kod oluşturun.
-mno-satır içi-sqrt
"sqrt" için satır içi kod oluşturmayın.
-mfused-deli
-mno-kaynaşmış-madd
Birleştirilmiş çarpma/ekleme veya çarpma/çıkarma işlemlerini kullanan kod üretmeyin (yapmayın)
Talimatlar. Varsayılan, bu talimatları kullanmaktır.
-mno-cüce2-asm
-mdwarf2-asm
DWARF 2 satır numarası hata ayıklama bilgisi için derleyici kodu oluşturmayın (veya yapmayın).
Bu, GNU birleştiricisi kullanılmadığında faydalı olabilir.
-yıllık-durdurma bitleri
-mno-erken-durdurma bitleri
Durdurma bitlerinin, talimattan hemen öncekinden daha önce yerleştirilmesine izin verin.
durdurma bitini tetikledi. Bu, talimat zamanlamasını iyileştirebilir, ancak her zaman değil
böyle yap.
-mfixed-aralık=kayıt aralığı
Verilen kayıt aralığını sabit kayıtlar olarak ele alan kod oluşturun. Sabit bir kayıt
kayıt ayırıcının kullanamayacağı bir tanesidir. Bu, çekirdeği derlerken kullanışlıdır.
kod. Bir kayıt aralığı, bir tire ile ayrılmış iki kayıt olarak belirtilir. çoklu
kayıt aralıkları virgülle ayrılarak belirtilebilir.
-mtls-boyutu=tls-boyutu
Anında TLS ofsetlerinin bit boyutunu belirtin. Geçerli değerler 14, 22 ve 64'tür.
-mtune=işlemci tipi
Belirli bir CPU için talimat zamanlamasını ayarlayın, Geçerli değerler Itanium,
itanyum1, merced, itanyum2, ve mckinley.
-milp32
-mlp64
32 bit veya 64 bit ortam için kod oluşturun. 32 bit ortam int'yi ayarlar,
uzun ve işaretçi 32 bit. 64 bit ortam, int'yi 32 bit olarak ayarlar ve uzun ve
64 bit işaretçisi. Bunlar, HP-UX'e özgü işaretlerdir.
-mno-schedule-br-data-spec
-msched-br-veri-belirtimi
Yeniden yüklemeden önce veri spekülatif planlamasını (Dis/En) mümkün kılar. Bu, nesil ile sonuçlanır
"ld.a" talimatları ve ilgili kontrol talimatları ("ld.c" / "chk.a"). NS
varsayılan 'devre dışı'dır.
-msched-ar-veri-belirtimi
-mno-schedule-ar-data-spec
Yeniden yüklemeden sonra veri spekülatif zamanlamayı etkinleştirir/devre dışı bırakır. Bu, nesil ile sonuçlanır
"ld.a" talimatları ve ilgili kontrol talimatları ("ld.c" / "chk.a"). NS
varsayılan "etkinleştir" dir.
-mno-zamanlanmış-kontrol-özelliği
-msched-kontrol-özelliği
Kontrol spekülatif zamanlamayı (Devre Dışı Bırak/En) mümkün kılar. Bu özellik yalnızca
bölge zamanlaması (yani yeniden yüklemeden önce). Bu, "ld.s"nin üretilmesiyle sonuçlanır.
talimatlar ve ilgili kontrol talimatları "chk.s". Varsayılan
'devre dışı bırakmak'.
-msched-br-veri spesifikasyonu
-mno-schedule-br-in-data-spec
Verilere bağlı talimatların spekülatif zamanlamasını (En/Devre Dışı) devre dışı bırakın
yeniden yüklemeden önce spekülatif yükler. Bu sadece ile etkilidir -msched-br-veri-belirtimi
etkinleştirilmiş. Varsayılan 'etkinleştir'dir.
-msched-ar-veri spesifikasyonunda
-mno-schedule-ar-in-veri spesifikasyonu
Verilere bağlı talimatların spekülatif zamanlamasını (En/Devre Dışı) devre dışı bırakın
yeniden yükledikten sonra spekülatif yükler. Bu sadece ile etkilidir -msched-ar-veri-belirtimi
etkinleştirilmiş. Varsayılan 'etkinleştir'dir.
-msched-in-control-spec
-mno-zamanlanmış-kontrol spesifikasyonu
(En/Devre Dışı) yönergelere bağlı spekülatif zamanlamayı devre dışı bırakın.
spekülatif yükleri kontrol eder. Bu sadece ile etkilidir -msched-kontrol-özelliği sağladı.
Varsayılan 'etkinleştir'dir.
-mno-sched-prefer-veri-özelliği olmayan-insns
-msched-tercih-veri olmayan-spec-insns
Etkinleştirilirse, veri spekülatif yönergeler, yalnızca
Şu anda diğer seçenekler. Bu, veri spekülasyonunun kullanımını çok daha fazla hale getirir.
tutucu. Varsayılan 'devre dışı'dır.
-mno-sched-tercih-kontrol dışı-spec-insns
-msched-tercih-kontrol dışı-spec-insns
Etkinleştirilirse, kontrol spekülatif talimatlar, yalnızca mevcutsa program için seçilir.
şu anda başka seçenek yok. Bu, kontrol spekülasyonunun daha fazla kullanılmasını sağlar.
daha muhafazakar. Varsayılan 'devre dışı'dır.
-mno-sched-count-spec-in-kritik-yol
-msched-count-spec-in-kritik-yol
Etkinleştirilirse, hesaplama sırasında spekülatif bağımlılıklar dikkate alınır.
talimat öncelikleri. Bu, spekülasyonun kullanımını biraz daha fazla hale getirir.
tutucu. Varsayılan 'devre dışı'dır.
-msched-spec-ldc
Basit bir veri spekülasyon kontrolü kullanın. Bu seçenek varsayılan olarak açıktır.
-msched-kontrol-özel-ldc
Kontrol spekülasyonları için basit bir kontrol kullanın. Bu seçenek varsayılan olarak açıktır.
-msched-stop-bitleri-her döngüden sonra
Programlarken her döngüden sonra bir durdurma biti yerleştirin. Bu seçenek varsayılan olarak açıktır.
-msched-fp-mem-deps-sıfır maliyet
Kayan nokta depolarının ve yüklerinin aşağıdaki durumlarda bir çakışmaya neden olma olasılığının olmadığını varsayalım.
aynı talimat grubuna yerleştirilir. Bu seçenek varsayılan olarak devre dışıdır.
-msel-schedule-kontrol etme-kontrol-özelliği
Seçici zamanlamada kontrol spekülasyonları için kontroller oluşturun. Bu bayrak
varsayılan olarak devre dışı.
-msched-max-bellek-insns=max-insn
Komut grubu başına bellek insn sayısını sınırlayarak, daha düşük öncelik verir.
aynı talimat grubunda programlamaya çalışan sonraki bellek insn'leri.
Önbellek bankası çakışmalarını önlemek için sıklıkla yararlıdır. Varsayılan değer 1'dir.
-msched-max-memory-insns-hard-limit
tarafından belirtilen limiti yapar msched-max-bellek-insns zor bir sınır, daha fazlasına izin vermemek
bir talimat grubundaki bu sayıdan daha fazla. Aksi takdirde, sınır "yumuşak", yani
sınıra ulaşıldığında bellek dışı işlemlerin tercih edildiğini, ancak bellek
operasyonlar hala planlanmış olabilir.
LM32 Opsiyonlar
Bunlar -m LatticeMico32 mimarisi için seçenekler tanımlanmıştır:
-mbarrel-shift-etkin
Namlu kaydırma talimatlarını etkinleştirin.
-mdivid-etkin
Bölme ve modül talimatlarını etkinleştirin.
-mmultiply-etkin
Çarpma talimatlarını etkinleştirin.
-msign-uzantı-etkin
İşaret genişletme talimatlarını etkinleştirin.
-müzer etkin
Kullanıcı tanımlı talimatları etkinleştirin.
M32C Opsiyonlar
-mcpu=isim
Kodun oluşturulacağı CPU'yu seçin. isim biri olabilir r8c R8C/Tiny için
seri, m16c M16C (/60'a kadar) serisi için, m32cm M16C/80 serisi için veya m32c
M32C/80 serisi için.
-msim
Programın simülatörde çalıştırılacağını belirtir. Bu alternatif neden olur
örneğin dosya G/Ç'yi destekleyen bağlantı kurulacak çalışma zamanı kitaplığı. Yapmamalısın
gerçek donanım üzerinde çalışacak programlar oluştururken bu seçeneği kullanın; Mecbursun
ne gerekiyorsa G/Ç işlevleri için kendi çalışma zamanı kitaplığınızı sağlayın.
-memregler=numara
GCC'nin kod oluşturma sırasında kullandığı bellek tabanlı sözde kayıtların sayısını belirtir.
Bu sözde kayıtlar, gerçek kayıtlar gibi kullanılır, dolayısıyla aralarında bir değiş tokuş vardır.
GCC'nin kodu mevcut kayıtlara sığdırma yeteneği ve performans cezası
kayıtlar yerine bellek kullanma. Bir programdaki tüm modüllerin
bu seçenek için aynı değerle derlenmiştir. Bu nedenle, bunu kullanmamalısınız
GCC'nin varsayılan çalışma zamanı kitaplıkları ile seçenek.
M32R/D Opsiyonlar
Bunlar -m Renesas M32R/D mimarileri için seçenekler tanımlanmıştır:
-m32r2
M32R/2 için kod oluşturun.
-m32rx
M32R/X için kod oluşturun.
-m32r
M32R için kod oluşturun. Bu varsayılandır.
-mmodel=küçük
Tüm nesnelerin daha düşük 16 MB bellekte yaşadığını varsayın (böylece adresleri
"ld24" komutuyla yüklenir) ve tüm alt programlara şu komutla erişilebildiğini varsayalım.
"bl" talimatı. Bu varsayılandır.
Belirli bir nesnenin adreslenebilirliği "model" özniteliği ile ayarlanabilir.
-mmodel=orta
Nesnelerin 32 bitlik adres alanında herhangi bir yerde olabileceğini varsayalım (derleyici
adreslerini yüklemek için "seth/add3" talimatları) ve tüm alt programların
"bl" komutu ile ulaşılabilir.
-mmodel=büyük
Nesnelerin 32 bitlik adres alanında herhangi bir yerde olabileceğini varsayalım (derleyici
adreslerini yüklemek için "seth/add3" talimatları) ve alt programların kullanılamayacağını varsayalım.
"bl" komutuyla erişilebilir (derleyici çok daha yavaş
"seth/add3/jl" komut dizisi).
-msdata=yok
Küçük veri alanının kullanımını devre dışı bırakın. Değişkenler birine konur .veri, .bssya da
.rodata ("bölüm" özelliği belirtilmemişse). Bu varsayılandır.
Küçük veri alanı bölümlerden oluşur .sdata ve .sbss. nesneler açıkça olabilir
bu bölümlerden birini kullanarak "section" özniteliği ile küçük veri alanına koyun.
-msveri=sveri
Küçük veri alanına küçük global ve statik verileri koyun, ancak özel veriler üretmeyin.
Onlara referans vermek için kod.
-msdata=kullan
Küçük veri alanına küçük global ve statik verileri koyun ve özel
onlara başvurmak için talimatlar.
-G num
Global ve statik nesneleri küçük veya eşit olarak koyun num küçük verilere bayt veya
Normal veri veya BSS bölümleri yerine BSS bölümleri. varsayılan değeri num is
8. -msdata seçenek şunlardan birine ayarlanmalıdır veri or kullanım bu seçeneğe sahip olmak için
etkisi.
Tüm modüller aynı ile derlenmelidir -G num değer. Farklı derleme
değerleri num çalışabilir veya çalışmayabilir; yoksa linker hata veriyor
mesaj --- yanlış kod oluşturulmaz.
-mdebug
Derleyicideki M32R'ye özgü kodun yardımcı olabilecek bazı istatistikleri görüntülemesini sağlar
hata ayıklama programlarında.
-malign-döngüler
Tüm döngüleri 32 baytlık bir sınıra hizalayın.
-mno-align-döngüleri
Döngüler için 32 baytlık bir hizalamayı zorlamayın. Bu varsayılandır.
-missue oranı=numara
Konu numara döngü başına talimatlar. numara sadece 1 veya 2 olabilir.
-mbranch-maliyet=numara
numara sadece 1 veya 2 olabilir. 1 ise koşullu şubelere tercih edilir.
kodu 2 ise, tersi geçerlidir.
-mflush-trap=numara
Önbelleği temizlemek için kullanılacak tuzak numarasını belirtir. Varsayılan değer 12'dir. Geçerli
sayılar 0 ile 15 arasındadır.
-mno-flush-trap
Bir tuzak kullanılarak önbelleğin temizlenemeyeceğini belirtir.
-mflush-işlev=isim
Önbelleği temizlemek için çağrılacak işletim sistemi işlevinin adını belirtir. NS
varsayılan _floş_önbellek, ancak bir işlev çağrısı yalnızca bir tuzak yoksa kullanılır.
-mno-flush-fonk
Önbelleği boşaltmak için bir işletim sistemi işlevi olmadığını gösterir.
M680x0 Opsiyonlar
Bunlar şunlardır -m M680x0 ve ColdFire işlemciler için tanımlanan seçenekler. Varsayılan ayarlar
derleyici yapılandırıldığında hangi mimarinin seçildiğine bağlıdır; varsayılanlar
en yaygın seçenekler için aşağıda verilmiştir.
-mart=kemer
Belirli bir M680x0 veya ColdFire komut seti mimarisi için kod oluşturun.
izin verilen değerler kemer M680x0 mimarileri için: 68000, 68010, 68020, 68030,
68040, 68060 ve cpu32. ColdFire mimarileri Freescale'in standartlarına göre seçilir.
ISA sınıflandırması ve izin verilen değerler şunlardır: isaa, isa artı, isab ve Isaac.
GCC bir makro tanımlar __mcfkemer__ ColdFire hedefi için kod oluşturduğunda.
The kemer bu makrodakilerden biri -Mart Yukarıda verilen argümanlar.
Birlikte kullanıldığında, -Mart ve -mtune benzer bir ailede çalışan kodu seçin
işlemciler, ancak bu belirli bir mikro mimari için optimize edilmiştir.
-mcpu=cpu
Belirli bir M680x0 veya ColdFire işlemcisi için kod oluşturun. M680x0 cpuler:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 ve cpu32. Soğuk Ateş cpus
CPU'ları ailelere göre de sınıflandıran aşağıdaki tabloda verilmiştir:
Aile: -mcpu argümanlar
51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51 mXNUMX
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 geçersiz kılmaları -mart=kemer if kemer ile uyumlu cpu. diğer kombinasyonları
-mcpu ve -Mart reddedildi.
GCC makroyu tanımlar __mcf_cpu_cpu ColdFire hedefi ne zaman cpu seçildi. Ayrıca
tanımlar __mcf_aile_aile, değeri nerede aile yukarıdaki tablo ile verilmektedir.
-mtune=melodi
tarafından belirlenen kısıtlamalar dahilinde belirli bir mikro mimari için kodu ayarlayın. -Mart
ve -mcpu. M680x0 mikro mimarileri şunlardır: 68000, 68010, 68020, 68030, 68040,
68060 ve cpu32. ColdFire mikro mimarileri şunlardır: cfv1, cfv2, cfv3, cfv4 ve
cfv4e.
Ayrıca kullanabilirsiniz -mtune=68020-40 68020'de nispeten iyi çalışması gereken kod için,
68030 ve 68040 hedefler. -mtune=68020-60 benzerdir ancak 68060 hedef içerir:
kuyu. Bu iki seçenek, aynı ayar kararlarını seçer. -m68020-40 ve -m68020-60
respectivamente.
GCC makroları tanımlar __mckemer ve __mckemer__ 680x0 mimarisini ayarlarken
kemer. Ayrıca tanımlar mckemer ikisinden biri olmadıkça -ansi veya GNU olmayan -std seçeneği kullanılır.
GCC tarafından seçilen bir dizi mimari için ayar yapıyorsa -mtune=68020-40 or
-mtune=68020-60, aralıktaki her mimari için makroları tanımlar.
GCC ayrıca makroyu tanımlar __Muark__ ColdFire mikro mimarisini ayarlarken
uark, Burada uark yukarıda verilen argümanlardan biridir.
-m68000
-mc68000
68000 için çıktı oluşturun. Bu, derleyici için yapılandırıldığında varsayılandır.
68000 tabanlı sistemler. eşdeğerdir -mart=68000.
68000 de dahil olmak üzere 000 veya EC68008 çekirdekli mikro denetleyiciler için bu seçeneği kullanın.
68302, 68306, 68307, 68322, 68328 ve 68356.
-m68010
68010 için çıktı oluşturun. Bu, derleyici için yapılandırıldığında varsayılandır.
68010 tabanlı sistemler. eşdeğerdir -mart=68010.
-m68020
-mc68020
68020 için çıktı oluşturun. Bu, derleyici için yapılandırıldığında varsayılandır.
68020 tabanlı sistemler. eşdeğerdir -mart=68020.
-m68030
68030 için çıktı oluşturun. Bu, derleyici için yapılandırıldığında varsayılandır.
68030 tabanlı sistemler. eşdeğerdir -mart=68030.
-m68040
68040 için çıktı oluşturun. Bu, derleyici için yapılandırıldığında varsayılandır.
68040 tabanlı sistemler. eşdeğerdir -mart=68040.
Bu seçenek, tarafından taklit edilmesi gereken 68881/68882 talimatlarının kullanımını engeller.
68040'taki yazılım. 68040'ınızın öykünecek kodu yoksa bu seçeneği kullanın.
bu talimatlar.
-m68060
68060 için çıktı oluşturun. Bu, derleyici için yapılandırıldığında varsayılandır.
68060 tabanlı sistemler. eşdeğerdir -mart=68060.
Bu seçenek, olması gereken 68020 ve 68881/68882 talimatlarının kullanımını engeller.
68060'ta yazılım tarafından öykünülür. 68060'ınızın kodu yoksa bu seçeneği kullanın.
bu talimatları taklit etmek için.
-mcpu32
Bir CPU32 için çıktı oluşturun. Bu, derleyici için yapılandırıldığında varsayılandır.
CPU32 tabanlı sistemler. eşdeğerdir -mart=cpu32.
32 da dahil olmak üzere CPU32 veya CPU68330+ çekirdekli mikro denetleyiciler için bu seçeneği kullanın.
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 ve 68360.
-m5200
520X ColdFire CPU için çıktı oluşturun. Derleyici olduğunda bu varsayılandır
520X tabanlı sistemler için yapılandırılmış. eşdeğerdir -mcpu=5206ve şimdi
bu seçenek lehine reddedildi.
MCF5200, MCF5202 dahil olmak üzere 5203 çekirdekli mikro denetleyici için bu seçeneği kullanın,
MCF5204 ve MCF5206.
-m5206e
5206e ColdFire CPU için çıktı oluşturun. Seçenek artık lehine kullanımdan kaldırıldı
eşdeğer -mcpu=5206e.
-m528x
ColdFire 528X ailesinin bir üyesi için çıktı oluşturun. Seçenek şimdi
eşdeğeri lehine kullanımdan kaldırıldı -mcpu=528x.
-m5307
ColdFire 5307 CPU için çıktı oluşturun. Seçenek artık lehine kullanımdan kaldırılmıştır.
eşdeğer -mcpu=5307.
-m5407
ColdFire 5407 CPU için çıktı oluşturun. Seçenek artık lehine kullanımdan kaldırılmıştır.
eşdeğer -mcpu=5407.
-mcfv4e
ColdFire V4e ailesi CPU için çıktı oluşturun (örn. 547x/548x). Bu şunları içerir:
donanım kayan nokta yönergeleri. Seçenek eşdeğerdir -mcpu=547x, ve bir
şimdi bu seçenek lehine kullanımdan kaldırıldı.
-m68020-40
Yeni talimatların hiçbirini kullanmadan 68040 için çıktı oluşturun. Bu sonuç
68020/68881 veya 68030 veya
68040. Oluşturulan kod, bilgisayarda öykünülen 68881 yönergelerini kullanır.
68040
Seçenek eşdeğerdir -mart=68020 -mtune=68020-40.
-m68020-60
Yeni talimatların hiçbirini kullanmadan 68060 için çıktı oluşturun. Bu sonuç
68020/68881 veya 68030 veya
68040. Oluşturulan kod, bilgisayarda öykünülen 68881 yönergelerini kullanır.
68060
Seçenek eşdeğerdir -mart=68020 -mtune=68020-60.
-mhard-şamandıra
-m68881
Kayan nokta yönergeleri oluşturun. Bu, 68020 ve üstü için varsayılandır ve
FPU'ya sahip ColdFire cihazları için. Makroyu tanımlar __VAR_68881__ M680x0'da
hedefler ve __mcffpu__ ColdFire hedeflerinde.
-msoft-float
Kayan nokta yönergeleri oluşturmayın; bunun yerine kitaplık çağrılarını kullanın. bu
68000, 68010 ve 68832 hedefler için varsayılan. ColdFire için de varsayılandır.
FPU'su olmayan cihazlar.
-mdiv
-mno-div
ColdFire donanım bölme ve kalan talimatları oluşturun (oluşturmayın). Eğer
-Mart olmadan kullanılır -mcpu, ColdFire mimarileri için varsayılan "açık" ve "kapalı"
M680x0 mimarileri için. Aksi takdirde, varsayılan hedef CPU'dan alınır (ya
varsayılan CPU veya tarafından belirtilen -mcpu). Örneğin, varsayılan "kapalı"
için -mcpu=5206 ve "açık" için -mcpu=5206e.
GCC makroyu tanımlar __mcfhwdiv__ Bu seçenek etkinleştirildiğinde.
-mshort
"Kısa int" gibi, "int" türünü 16 bit genişliğinde düşünün. Ek olarak, parametreler
yığında iletilen, API'si olan hedeflerde bile 16 bitlik bir sınıra hizalanır.
32-bit'e yükseltmeyi zorunlu kılar.
-mno-kısa
"int" türünün 16 bit genişliğinde olduğunu düşünmeyin. Bu varsayılandır.
-mnobit alanı
-mno-bit alanı
Bit alanı talimatlarını kullanmayın. NS -m68000, -mcpu32 ve -m5200 seçenekler ima eder
-mnobit alanı.
-mbit alanı
Bit alanı talimatlarını kullanın. NS -m68020 seçenek ima eder -mbit alanı. Bu,
68020 için tasarlanmış bir yapılandırma kullanıyorsanız varsayılan.
-mrtd
Sabit bir değer alan işlevlerin olduğu farklı bir işlev çağırma kuralı kullanın.
argümanların sayısı, argümanlarını açan "rtd" talimatıyla birlikte döner
dönerken. Bu, arayana bir talimat kaydeder çünkü aramaya gerek yoktur.
argümanları oraya yerleştirin.
Bu çağrı kuralı, normalde Unix'te kullanılanla uyumsuzdur, bu nedenle
Unix derleyicisi ile derlenen kitaplıkları çağırmanız gerekiyorsa bunu kullanamazsınız.
Ayrıca, değişken alan tüm fonksiyonlar için fonksiyon prototipleri sağlamalısınız.
argüman sayısı ("printf" dahil); aksi takdirde yanlış kod oluşturulur
bu işlevlere çağrı yapar.
Ayrıca, çok fazla işleve sahip bir işlevi çağırırsanız ciddi şekilde yanlış kod sonuçları ortaya çıkar.
argümanlar. (Normalde, fazladan argümanlar zararsız bir şekilde göz ardı edilir.)
"rtd" talimatı 68010, 68020, 68030, 68040, 68060 ve CPU32 tarafından desteklenir
işlemciler, ancak 68000 veya 5200 tarafından değil.
-mno-rtd
tarafından seçilen arama kurallarını kullanmayın. -mrtd. Bu varsayılandır.
-malign-int
-mno-hizalama-int
GCC'nin "int", "long", "long long", "float", "double" ve "long" olarak hizalanıp hizalanmayacağını kontrol edin
32 bitlik bir sınırda double" değişkenler (-malign-int) veya 16 bitlik bir sınır
(-mno-hizalama-int). Değişkenleri 32 bit sınırlarda hizalamak, çalışan kod üretir
32 bit veri yollu işlemcilerde biraz daha hızlı, daha fazla bellek pahasına.
Uyarı: eğer kullanırsan -malign-int anahtarı, GCC, yukarıdakileri içeren yapıları hizalar
için yayınlanan çoğu uygulama ikili arabirim belirtimlerinden farklı türler
m68k.
-mpcrel
Genel bir adres kullanmak yerine, 68000'in doğrudan bilgisayara göre adresleme modunu kullanın.
ofset tablosu. Şu anda, bu seçenek şu anlama gelir: -fpic, en fazla 16 bitlik bir ofset sağlar
bilgisayara göre adresleme için. -fPIC şu anda desteklenmiyor -mpcrelOlsa
bu, 68020 ve daha yüksek işlemciler için desteklenebilir.
-mno-katı hizalama
-mstrict-hizalama
Hizalanmamış bellek referanslarının sistem tarafından işlendiğini varsaymayın (yapmayın).
-msep-veri
Veri segmentinin farklı bir bellek alanına yerleştirilmesine izin veren kod oluşturun
metin bölümünden. Bu, olmayan bir ortamda yerinde yürütmeye izin verir.
sanal bellek yönetimi. Bu seçenek şu anlama gelir: -fPIC.
-mno-eylül-veri
Veri segmentinin metin segmentini takip ettiğini varsayan kod oluşturun. Bu
varsayılan.
-orta-paylaşılan-kütüphane
Kitaplık kimliği yöntemi aracılığıyla paylaşılan kitaplıkları destekleyen kod oluşturun. Bu izin verir
sanal belleği olmayan bir ortamda yerinde yürütme ve paylaşılan kitaplıklar için
yönetmek. Bu seçenek şu anlama gelir: -fPIC.
-mno-id-paylaşılan-kütüphane
Kimlik tabanlı paylaşılan kitaplıkların kullanıldığını varsaymayan kod oluşturun. Bu
varsayılan.
-mshared-library-id=n
Derlenmekte olan kimlik tabanlı paylaşılan kitaplığın kimlik numarasını belirtir.
0 değeri belirtmek daha kompakt kod üretir; diğer değerlerin belirtilmesi kuvvetleri
bu sayının mevcut kütüphaneye tahsisi, ancak artık yer veya zaman değil
bu seçeneği atlamaktan daha etkilidir.
-mxgot
-mno-xgot
ColdFire için konumdan bağımsız kod oluştururken, aşağıdaki durumlarda çalışan kod oluşturun:
GOT'ta 8192'den fazla giriş var. Bu kod, koddan daha büyük ve daha yavaş
bu seçenek olmadan oluşturulur. M680x0 işlemcilerde bu seçeneğe gerek yoktur; -fPIC
yeterli.
GCC normalde GOT'tan değerleri yüklemek için tek bir komut kullanır. Bu iken
nispeten verimlidir, yalnızca GOT yaklaşık 64k'dan küçükse çalışır. Herhangi bir şey
daha büyük, bağlayıcının aşağıdaki gibi bir hata bildirmesine neden olur:
yer değiştirme, sığacak şekilde kısaltıldı: R_68K_GOT16O foobar
Bu olursa, kodunuzu ile yeniden derlemeniz gerekir. -mxgot. Daha sonra ile çalışmalıdır
çok büyük GOT'lar. Bununla birlikte, oluşturulan kod -mxgot olduğundan daha az verimlidir.
global bir sembolün değerini almak için 4 talimat alır.
GNU bağlayıcısının daha yeni sürümleri de dahil olmak üzere bazı bağlayıcıların
birden fazla GOT ve GOT girişlerini sıralayın. Böyle bir bağlayıcınız varsa, yalnızca
kullanmak -mxgot 8192 GOT'tan fazlasına erişen tek bir nesne dosyası derlerken
girdileri. Çok azı yapar.
Bu seçeneklerin, GCC konumdan bağımsız kod oluşturmadığı sürece hiçbir etkisi yoktur.
MÇekirdek Opsiyonlar
Bunlar şunlardır -m Motorola M*Core işlemciler için tanımlanan seçenekler.
-mhardlit
-mno-sert ışıklı
İki veya daha az komutla yapılabiliyorsa, kod akışına satır içi sabitler.
-mdiv
-mno-div
Böl komutunu kullanın. (Varsayılan olarak etkindir).
-mrelax-hemen
-mno-rahatla-hemen
Bit işlemlerinde rasgele boyutlu anlık işlemlere izin verin.
-mwide-bit alanları
-mno-geniş-bit alanları
Bit alanlarına her zaman "int" boyutunda davranın.
-m4byte-işlevleri
-mno-4byte-işlevleri
Tüm işlevleri 4 baytlık bir sınıra hizalanmaya zorlayın.
-mcallgraph-veri
-mno-callgraph-veri
Callgraph bilgilerini yayınlayın.
-mslow-bayt
-mno-yavaş bayt
Bayt miktarlarını okurken kelime erişimini tercih edin.
-küçük endian
-big-endian
Küçük bir endian hedefi için kod oluşturun.
-m210
-m340
210 işlemci için kod oluşturun.
-mno-lsim
Çalışma zamanı desteğinin sağlandığını varsayın ve simülatör kitaplığını atlayın.
(libsim.a) bağlayıcı komut satırından.
-mstack-artış=boyut
Tek bir yığın artış işlemi için maksimum miktarı ayarlayın. Büyük değerler
büyük miktarda ihtiyaç duyan işlevleri içeren programların hızını artırın.
yığın alanı, ancak yığın uzatılırsa bir segmentasyon hatasını da tetikleyebilirler
çok fazla. Varsayılan değer 0x1000'dir.
MEP Opsiyonlar
-mabsdiff
İki kayıt arasındaki mutlak fark olan "abs" komutunu etkinleştirir.
-alışveriş merkezi seçenekleri
Tüm isteğe bağlı komutları etkinleştirir --- ortalama, çarpma, bölme, bit işlemleri,
baştaki sıfır, mutlak fark, min/maks, klip ve doygunluk.
-ortalama
İki kaydın ortalamasını hesaplayan "ave" komutunu etkinleştirir.
-mtabanlı=n
boyut değişkenleri n bayt veya daha küçükleri varsayılan olarak ".based" bölümüne yerleştirilir.
Tabanlı değişkenler, temel kayıt olarak $tp kaydını kullanır ve 128 baytlık bir sınır vardır.
".based" bölümüne gidin.
-mbittoplar
Bit işlem talimatlarını etkinleştirir --- bit testi ("btstm"), set ("bsetm"), temizle
("bclrm"), ters çevir ("bnotm") ve test et ve ayarla ("tas").
-mc=isim
Sabit verilerin hangi bölüme yerleştirileceğini seçer. isim "minik", "yakın" veya
"uzak".
-mclip
"Klip" talimatını etkinleştirir. "-mclip" ifadesinin, siz de kullanmadığınız sürece yararlı olmadığını unutmayın.
"-mminmax" sağlayın.
-mconfig=isim
Yerleşik çekirdek yapılandırmalarından birini seçer. Her MeP çipinde bir veya daha fazla
içindeki modüller; her modülün bir çekirdek CPU'su ve isteğe bağlı olarak çeşitli yardımcı işlemcileri vardır
yönergeler ve çevre birimleri. GCC'nin bir parçası olmayan "MeP-Integrator" aracı şunları sağlar:
bu seçenek aracılığıyla bu yapılandırmalar; bu seçeneği kullanmak, tümünü kullanmakla aynıdır.
karşılık gelen komut satırı seçenekleri. Varsayılan yapılandırma "varsayılan"dır.
-mkop
Yardımcı işlemci yönergelerini etkinleştirir. Varsayılan olarak, bu 32 bitlik bir yardımcı işlemcidir. Not
yardımcı işlemcinin normalde "-mconfig=" seçeneği aracılığıyla etkinleştirildiğini.
-mcop32
32 bit yardımcı işlemcinin yönergelerini etkinleştirir.
-mcop64
64 bit yardımcı işlemcinin yönergelerini etkinleştirir.
-mivc2
IVC2 zamanlamasını etkinleştirir. IVC2, 64 bitlik bir VLIW yardımcı işlemcisidir.
-mdc
".near" bölümüne sabit değişkenlerin yerleştirilmesine neden olur.
-mdiv
"div" ve "divu" talimatlarını etkinleştirir.
-meb
Big-endian kodu oluşturun.
-mel
Küçük endian kodu oluşturun.
-mio-uçucu
Derleyiciye "io" özniteliği ile işaretlenmiş herhangi bir değişkenin
uçucu olarak kabul edilir.
-ml Değişkenlerin varsayılan olarak ".far" bölümüne atanmasına neden olur.
-mleadz
"leadz" (baştaki sıfır) talimatını etkinleştirir.
-mm Değişkenlerin varsayılan olarak ".near" bölümüne atanmasına neden olur.
-mminmaks
"min" ve "max" talimatlarını etkinleştirir.
-mult
Çarpma ve çarpma-biriktirme talimatlarını etkinleştirir.
-mno-ops
"-mall-opts" tarafından etkinleştirilen tüm isteğe bağlı talimatları devre dışı bırakır.
-tekrar
Düşük yük döngüsü için kullanılan "tekrar" ve "tekrar" talimatlarını etkinleştirir.
-MS Tüm değişkenlerin varsayılan olarak ".tiny" bölümünde olmasına neden olur. Bir
Bu bölüm için 65536 baytlık sınır. Bu değişkenlere erişim %gp tabanını kullanır
kayıt.
-msatur
Doygunluk talimatlarını etkinleştirir. Derleyicinin şu anda
bunları kendiniz oluşturun, ancak bu seçenek diğer araçlarla uyumluluk için dahil edilmiştir,
"olarak" gibi.
-msdram
Varsayılan ROM tabanlı çalışma zamanı yerine SDRAM tabanlı çalışma zamanını bağlayın.
-msim
Simülatör çalışma zamanı kitaplıklarını bağlayın.
-msimnovec
Sıfırlama için yerleşik destek dışında simülatör çalışma zamanı kitaplıklarını bağlayın ve
istisna vektörleri ve tabloları.
-mtf
Tüm işlevlerin varsayılan olarak ".far" bölümüne geçmesine neden olur. Bu seçenek olmadan, işlevler
varsayılan olarak ".near" bölümü.
-miny=n
Değişkenler n bayt veya daha küçük ".tiny" bölümüne atanır. Bunlar
değişkenler $gp temel kaydını kullanır. Bu seçenek için varsayılan değer 4'tür, ancak şunu unutmayın:
".tiny" bölümü için 65536 baytlık bir sınır vardır.
MikroBlaze Opsiyonlar
-msoft-float
Kayan nokta için yazılım öykünmesini kullanın (varsayılan).
-mhard-şamandıra
Donanım kayan nokta yönergelerini kullanın.
-mmmcpy
Blok hareketlerini optimize etmeyin, "memcpy" kullanın.
-mno-clearbss
Bu seçenek kullanımdan kaldırılmıştır. Kullanmak -fno-sıfır-başlatıldı-in-bss yerine.
-mcpu=işlemci tipi
Verilen CPU'nun özelliklerini kullanın ve kodunu programlayın. Desteklenen değerler
biçim vX.YY.Z, Burada X ana sürümdür, YY küçük versiyondur ve Z is
uyumluluk kodu. Örnek değerler v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.
-mxl-yumuşak-mul
Yazılım çarpma öykünmesini kullanın (varsayılan).
-mxl-yumuşak-div
Bölmeler için yazılım öykünmesini kullanın (varsayılan).
-mxl-varil-shift
Donanım varil değiştiricisini kullanın.
-mxl-desen-karşılaştır
Model karşılaştırma talimatlarını kullanın.
-msmall-bölücüler
Küçük işaretli tamsayı bölümleri için tablo arama optimizasyonunu kullanın.
-mxl-yığın-kontrol
Bu seçenek kullanımdan kaldırılmıştır. Kullanmak -fstack-kontrol yerine.
-mxl-gp-opt
GP ile ilgili ".sdata"/".sbss" bölümlerini kullanın.
-mxl-çarpma-yüksek
32x32 çarpmanın yüksek kısmı için çarpma yüksek talimatlarını kullanın.
-mxl-float-dönüştürme
Donanım kayan nokta dönüştürme yönergelerini kullanın.
-mxl-float-sqrt
Donanım kayan noktalı karekök talimatını kullanın.
-big-endian
Büyük endian hedefi için kod oluşturun.
-küçük endian
Küçük bir endian hedefi için kod oluşturun.
-mxl-yeniden sırala
Yeniden sipariş talimatlarını kullanın (takas ve bayt ters yükleme/depolama).
-mxl-modu-uygulama modeli
Uygulama modelini seçin uygulama modeli. Geçerli modeller
çalıştırılabilir
normal yürütülebilir dosya (varsayılan), başlangıç kodunu kullanır crt0.o.
xmdstub
Xilinx Mikroişlemci Hata Ayıklayıcı (XMD) tabanlı yazılım müdahaleci hata ayıklama ile kullanım için
xmdstub adlı aracı. Bu başlangıç dosyasını kullanır crt1.o ve başlangıç adresini ayarlar
programı 0x800'e çıkarın.
çizme atkısı
bir önyükleyici kullanılarak yüklenen uygulamalar için. Bu model başlangıç dosyasını kullanır
crt2.o hangi bir işlemci sıfırlama vektör işleyicisi içermez. bu uygundur
bir işlemci sıfırlamasındaki kontrolü, önyükleyiciye değil, önyükleyiciye aktarmak için
uygulama.
yeni başlayanlar
MicroBlaze vektörlerinden herhangi birini gerektirmeyen uygulamalar için. Bu seçenek
bir izleme uygulaması içinde çalışan uygulamalar için yararlı olabilir. Bu model
kullanım crt3.o başlangıç dosyası olarak
seçenek -xl-modu-uygulama modeli için kullanımdan kaldırılmış bir takma addır -mxl-modu-uygulama modeli.
MIPS Opsiyonlar
-EB Big-endian kodu oluşturun.
-EL Küçük endian kodu oluşturun. Bu, varsayılan mips*el-*-* konfigürasyonları.
-mart=kemer
Üzerinde çalışan kod oluşturun kemer, genel bir MIPS ISA'nın adı olabilir veya
belirli bir işlemcinin adı. ISA isimleri şunlardır: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips64 ve mips64r2. İşlemci adları şunlardır: 4kc, 4km, 4kp, 4kc,
4kec, 4kem, 4kep, 4kd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1,
24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc,
1004kf2_1, 1004kf1_1, Loongson2e, loongson2f, loongson3a, m4k, okteon, okteon+,
okteon2, Oryon, r2000, r3000, r3900, r4000, r4400, r4600, r4650, r4700, r6000, r8000,
rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120,
vr4130, vr4300, vr5000, vr5400, vr5500, xlr ve XLP. özel değer abi
seçilen ABI için en uyumlu mimariyi seçer (yani, mips1 için
32 bit ABI'ler ve mips3 64 bit ABI'ler için).
Yerel Linux/GNU araç zinciri de değeri destekler yerli, en iyisini seçer
ana bilgisayar işlemcisi için mimari seçeneği. -mart=yerli GCC yaparsa etkisi olmaz
işlemciyi tanımıyor
İşlemci adlarında, son bir 000 olarak kısaltılabilir k (Örneğin, -mart=r2k).
Ön ekler isteğe bağlıdır ve vr yazılabilir r.
formun isimleri nF2_1 hızının yarısına ayarlanmış FPU'lara sahip işlemcilere bakın.
çekirdek, formun adları nF1_1 aynı hızda saat hızına sahip FPU'lara sahip işlemcilere bakın
çekirdek olarak ve formun adları nF3_2 FPU'ları bir oranda saat hızına sahip işlemcilere bakın
çekirdeğe göre 3:2. Uyumluluk nedenleriyle, nf olarak kabul edilir
eş anlamlısı nF2_1 süre nx ve bfx eş anlamlı olarak kabul edilir nF1_1.
GCC, bu seçeneğin değerine göre iki makro tanımlar. İlk olarak _MIPS_ARCH,
bu, bir dize olarak hedef mimarinin adını verir. İkincisi forma sahip
_MIPS_ARCH_foo, Burada foo kapitalize edilmiş değeridir _MIPS_ARCH. Örneğin,
-mart=r2000 setleri _MIPS_ARCH için "R2000" ve makroyu tanımlar _MIPS_ARCH_R2000.
Unutmayın _MIPS_ARCH makro yukarıda verilen işlemci adlarını kullanır. Diğer bir deyişle,
tam ön eke sahiptir ve kısaltma yapmaz 000 as k. Bu durumuda abi,
makrosu çözümlenen mimariyi adlandırır (ya "mips1" or "mips3"). adlandırıyor
hayır olduğunda varsayılan mimari -Mart seçenek verilir.
-mtune=kemer
İçin optimize et kemer. Bu seçenek, diğer şeylerin yanı sıra, talimatların
planlanmış ve aritmetik işlemlerin algılanan maliyeti. Listesi kemer değerlerimiz
ile aynı -Mart.
Bu seçenek kullanılmadığında, GCC tarafından belirtilen işlemci için optimize eder. -Mart. Tarafından
kullanma -Mart ve -mtune birlikte, bir üzerinde çalışan kod oluşturmak mümkündür.
işlemci ailesi, ancak kodu o ailenin belirli bir üyesi için optimize edin.
-mtune makroları tanımlar _MIPS_TUNE ve _MIPS_TUNE_fooile aynı şekilde çalışan
the -Mart yukarıda anlatılanlar.
-mips1
Eşittir -mart=mips1.
-mips2
Eşittir -mart=mips2.
-mips3
Eşittir -mart=mips3.
-mips4
Eşittir -mart=mips4.
-mips32
Eşittir -mart=mips32.
-mips32r2
Eşittir -mart=mips32r2.
-mips64
Eşittir -mart=mips64.
-mips64r2
Eşittir -mart=mips64r2.
-mips16
-mno-mips16
MIPS16 kodu oluşturun (oluşturmayın). GCC bir MIPS32 veya MIPS64'ü hedefliyorsa
mimarisi, MIPS16e ASE'yi kullanır.
MIPS16 kod üretimi ayrıca aşağıdakiler aracılığıyla işlev bazında kontrol edilebilir:
"mips16" ve "nomips16" öznitelikleri.
-mflip-mips16
Değişen işlevlerde MIPS16 kodu oluşturun. Bu seçenek regresyon için sağlanmıştır
karışık MIPS16/MIPS16 olmayan kod üretiminin test edilmesi ve sıradan amaçlar için tasarlanmamıştır.
kullanıcı kodunu derlemek için kullanın.
-minterlink-mips16
-mno-interlink-mips16
MIPS16 olmayan kodun MIPS16 koduyla bağlantı uyumlu olmasını gerektirir (gerekmez).
Örneğin, MIPS16 olmayan kod doğrudan MIPS16 koduna atlayamaz; ya kullanmalıdır
çağrı veya dolaylı bir atlama. -minterlink-mips16 bu nedenle doğrudan atlamaları devre dışı bırakır;
GCC, sıçramanın hedefinin MIPS16 olmadığını biliyor.
-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Verilen ABI için kod oluşturun.
EABI'nin 32 bit ve 64 bit varyantı olduğunu unutmayın. GCC normalde 64 bit üretir
64 bit mimari seçtiğinizde kod, ancak kullanabilirsiniz -mgp32 32 bit kod almak için
yerine.
O64 ABI hakkında bilgi için, bkz.http://gcc.gnu.org/projects/mipso64-abi.html>.
GCC, kayan noktalı yazmaçların yerine 32 olduğu o64 ABI'nin bir türevini destekler.
32 bitten daha geniş. ile bu kombinasyonu seçebilirsiniz. -mabi=32 -mfp64. Bu ABI
"mthc1" ve "mfhc1" talimatlarına dayanır ve bu nedenle yalnızca
MIPS32R2 işlemciler.
Argümanlar ve dönüş değerleri için kayıt atamaları aynı kalır, ancak her biri
skaler değer, bir çift 64 bit yerine tek bir 32 bit kayıtta geçirilir
kayıtlar. Örneğin, skaler kayan nokta değerleri döndürülür. $f0 sadece, bir değil
$f0/$f1 çift. Çağrı-kaydedilmiş kayıtlar seti de aynı kalır, ancak 64 bitin tamamı
kaydedilir.
-mabicalls
-mno-abicals
SVR4 stili dinamik nesneler için uygun kod oluşturun (oluşturmayın).
-mabicalls SVR4 tabanlı sistemler için varsayılandır.
-mshared
-mno-paylaşımlı
Tamamen konumdan bağımsız kod üretin (oluşturmayın) ve
bu nedenle paylaşılan kitaplıklara bağlanmalıdır. Bu seçenek yalnızca -mabicalls.
Türkiye -mabicalls kod, seçeneklerden bağımsız olarak geleneksel olarak konumdan bağımsızdır
sevmek -fPIC ve -fpic. Ancak, bir uzantı olarak, GNU araç zinciri yürütülebilir dosyalara izin verir.
yerel olarak bağlayıcı semboller için mutlak erişimleri kullanmak. Ayrıca daha kısa GP kullanabilir
başlatma dizileri ve yerel olarak tanımlanmış işlevlere doğrudan çağrılar oluşturur. Bu
mod tarafından seçilir -mno-paylaşımlı.
-mno-paylaşımlı binutils 2.16 veya daha yüksek sürümlere bağlıdır ve yalnızca
GNU bağlayıcısı tarafından bağlanır. Ancak, seçenek finalin ABI'sini etkilemez.
yürütülebilir; yalnızca yeniden yerleştirilebilir nesnelerin ABI'sini etkiler. kullanma -mno-paylaşımlı
genellikle yürütülebilir dosyaları hem daha küçük hem de daha hızlı yapar.
-mshared varsayılandır.
-mplt
-mno-plt
Statik ve dinamik bağlayıcıların PLT'leri desteklediğini varsayın (varsaymayın) ve kopyalayın
yer değiştirmeler. Bu seçenek yalnızca -mno-paylaşımlı -mabicalls. n64 ABI için bu
seçenek olmadan hiçbir etkisi yoktur -msym32.
Sen yapabilir -mplt GCC'yi yapılandırarak varsayılan --mips-plt ile. Varsayılan
is -mno-plt aksi takdirde.
-mxgot
-mno-xgot
Global ofset tablosunun boyutundaki olağan kısıtlamaları kaldırın (kaldırmayın).
GCC normalde GOT'tan değerleri yüklemek için tek bir komut kullanır. Bu iken
nispeten verimlidir, yalnızca GOT yaklaşık 64k'dan küçükse çalışır. Herhangi bir şey
daha büyük, bağlayıcının aşağıdaki gibi bir hata bildirmesine neden olur:
yer değiştirme sığdırmak için kesildi: R_MIPS_GOT16 foobar
Bu olursa, kodunuzu ile yeniden derlemeniz gerekir. -mxgot. Bu çok ile çalışır
büyük GOT'lar, ancak kod da daha az verimli olsa da, üç
genel bir sembolün değerini almak için talimatlar.
Bazı bağlayıcıların birden fazla GOT oluşturabileceğini unutmayın. Böyle bir bağlayıcınız varsa,
sadece kullanması gerekir -mxgot tek bir nesne dosyası 64k'den fazlasına eriştiğinde
GOT girişleri değerinde. Çok azı yapar.
Bu seçeneklerin, GCC konumdan bağımsız kod oluşturmadığı sürece hiçbir etkisi yoktur.
-mgp32
Genel amaçlı yazmaçların 32 bit genişliğinde olduğunu varsayın.
-mgp64
Genel amaçlı yazmaçların 64 bit genişliğinde olduğunu varsayın.
-mfp32
Kayan noktalı yazmaçların 32 bit genişliğinde olduğunu varsayalım.
-mfp64
Kayan noktalı yazmaçların 64 bit genişliğinde olduğunu varsayalım.
-mhard-şamandıra
Kayan noktalı yardımcı işlemci yönergelerini kullanın.
-msoft-float
Kayan noktalı yardımcı işlemci yönergelerini kullanmayın. Kayan nokta uygula
Bunun yerine kütüphane çağrılarını kullanan hesaplamalar.
-mno-şamandıra
Eşittir -msoft-float, ancak ayrıca derlenmekte olan programın
kayan nokta işlemleri gerçekleştirmez. Bu seçenek şu anda desteklenmektedir
yalnızca özel bir dizi seçebileceği bazı çıplak metal MIPS konfigürasyonları ile
tüm kayan nokta desteğinden yoksun kitaplıklar (örneğin, kayan-
nokta "printf" biçimleri). "-mno-float" ile derlenen kod yanlışlıkla şunları içeriyorsa:
kayan noktalı işlemlerde, bağlantı zamanı veya çalışma zamanı hatası olması muhtemeldir.
-msingle-şamandıra
Kayan nokta yardımcı işlemcisinin yalnızca tek duyarlıklı işlemleri desteklediğini varsayalım.
-mdouble-şamandıra
Kayan nokta yardımcı işlemcisinin çift duyarlıklı işlemleri desteklediğini varsayalım. Bu
varsayılandır.
-mlsc
-mno-llsc
kullanın (kullanmayın) ll, sc, ve senkronize yerleşik atomik bellek uygulamak için talimatlar
fonksiyonlar. Hiçbir seçenek belirtilmediğinde, GCC, hedef aşağıdaki durumlarda talimatları kullanır:
mimari onları destekler.
-mlsc çalışma zamanı ortamı talimatları taklit edebiliyorsa ve -mno-llsc
standart olmayan ISA'ları derlerken faydalı olabilir. Her iki seçeneği de yapabilirsiniz
GCC'yi yapılandırarak varsayılan --llsc ile ve --llsc olmadan respectivamente.
--llsc ile bazı konfigürasyonlar için varsayılandır; kurulum belgelerine bakın
Ayrıntılar için.
-mdsp
-mno-dsp
MIPS DSP ASE'nin 1. revizyonunu kullanın (kullanmayın).
Bu seçenek, önişlemci makrosunu tanımlar __mips_dsp. Ayrıca tanımlar
__mips_dsp_rev 1 için.
-mdspr2
-mno-dspr2
MIPS DSP ASE'nin 2. revizyonunu kullanın (kullanmayın).
Bu seçenek, önişlemci makrolarını tanımlar __mips_dsp ve __mips_dspr2. Ayrıca,
tanımlar __mips_dsp_rev 2 için.
-msmartmips
-mno-smartmips
MIPS SmartMIPS ASE'yi kullanın (kullanmayın).
-bağlı-bekar
-mno-çift-tek
Eşleştirilmiş tek kayan nokta yönergelerini kullanın (kullanmayın).
Bu seçenek, donanım kayan nokta desteğinin etkinleştirilmesini gerektirir.
-mdmx
-mno-mdmx
MIPS Dijital Medya Uzantısı talimatlarını kullanın (kullanmayın). Bu seçenek yalnızca
64 bit kod oluştururken kullanılır ve donanım kayan nokta desteği gerektirir
sağladı.
-mips3d
-mno-mips3d
MIPS-3D ASE'yi kullanın (kullanmayın). Seçenek -mips3d ima -bağlı-bekar.
-mmt
-mno-mt
MT Multithreading talimatlarını kullanın (kullanmayın).
-mmcu
-mno-mcu
MIPS MCU ASE talimatlarını kullanın (kullanmayın).
-mlong64
"Uzun" türleri 64 bit genişliğinde olmaya zorlayın. Görmek -mlong32 varsayılanın açıklaması için
ve işaretçi boyutunun belirlenme şekli.
-mlong32
"long", "int" ve işaretçi türlerini 32 bit genişliğinde olmaya zorlayın.
"int"ler, "uzun"lar ve işaretçilerin varsayılan boyutu ABI'ye bağlıdır. Hepsi
desteklenen ABI'ler 32 bit "int" kullanır. n64 ABI, 64-bit'te olduğu gibi 64-bit "uzun"lar kullanır
EABI; diğerleri 32-bit "uzun"lar kullanır. İşaretçiler, "uzun"lar ile aynı boyuttadır veya
tamsayı kayıtları ile aynı boyutta, hangisi daha küçükse.
-msym32
-mno-sym32
Seçili olandan bağımsız olarak tüm sembollerin 32 bitlik değerlere sahip olduğunu varsayın (varsaymayın).
ABI. Bu seçenek aşağıdakilerle birlikte kullanışlıdır: -mabi=64 ve -mno-abicals çünkü
GCC'nin sembolik adreslere daha kısa ve daha hızlı referanslar oluşturmasını sağlar.
-G num
Dışarıdan görülebilen verilerin tanımlarını küçük bir veri bölümüne koyun.
daha büyük num bayt. GCC daha sonra verilere daha verimli erişim sağlayabilir; görmek
-mgpopt Ayrıntılar için.
Varsayılan -G seçenek yapılandırmaya bağlıdır.
-mlocal-sdata
-mno-yerel-sdata
Uzatın (uzatmayın) -G statik değişkenler gibi yerel verilere de davranış
C cinsinden -mlocal-sdata tüm yapılandırmalar için varsayılandır.
Bağlayıcı, bir uygulamanın çok fazla küçük veri kullandığından şikayet ederse,
performans açısından daha az kritik olan parçaları yeniden oluşturmayı denemek istiyorsanız -mno-yerel-sdata. Sen
ile büyük kütüphaneler oluşturmak da isteyebilir -mno-yerel-sdata, böylece kütüphaneler
ana program için daha fazla yer bırakın.
-mextern-sdata
-mno-harici-sdata
Varsa, harici olarak tanımlanmış verilerin küçük bir veri bölümünde olduğunu varsayın (varsaymayın).
bu verilerin boyutu -G sınırı. -mextern-sdata hepsi için varsayılan
konfigürasyonları.
Bir modül derlerseniz yol ile -mextern-sdata -G num -mgpopt, ve yol referanslar bir
değişken Her bu daha büyük değil num bayt olduğundan emin olmalısınız Her yerleştirilmiş
küçük bir veri bölümünde. Eğer Her başka bir modül tarafından tanımlanmışsa, ya derlemeniz gerekir
yeterince yüksek olan bu modül -G bir "bölüm" özniteliği ayarlamak veya eklemek Her's
tanım. Eğer Her yaygındır, uygulamayı yeterince yüksek bir -G
ayarı.
Bu kısıtlamaları karşılamanın en kolay yolu, her modülü derlemek ve birbirine bağlamaktır.
ile aynı -G seçenek. Ancak, destekleyen bir kitaplık oluşturmak isteyebilirsiniz.
birkaç farklı küçük veri limiti. Bunu kütüphaneyi derleyerek yapabilirsiniz.
desteklenen en yüksek -G ayarlama ve ayrıca kullanma -mno-harici-sdata durdurmak için
kütüphanenin harici olarak tanımlanmış veriler hakkında varsayımlarda bulunmasını engeller.
-mgpopt
-mno-gpopt
Küçük bir veride olduğu bilinen semboller için GP'ye göre erişimleri kullanın (kullanmayın)
Bölüm; görmek -G, -mlocal-sdata ve -mextern-sdata. -mgpopt hepsi için varsayılan
konfigürasyonları.
-mno-gpopt $gp kaydının değerini tutmayabileceği durumlar için kullanışlıdır.
"_gp". Örneğin, kod, bir önyüklemede kullanılabilecek bir kitaplığın parçasıysa
monitör, önyükleme izleme rutinlerini çağıran programlar $gp'de bilinmeyen bir değer iletir. (İçinde
bu gibi durumlarda, önyükleme monitörünün kendisi genellikle -G0.)
-mno-gpopt ima -mno-yerel-sdata ve -mno-harici-sdata.
-üyeli-veri
-mno-gömülü-veri
Değişkenleri, mümkünse önce salt okunur veri bölümüne, ardından
mümkünse küçük veri bölümü, aksi takdirde verilerde. Bu biraz daha yavaş kod verir
varsayılandan daha fazladır, ancak yürütülürken gereken RAM miktarını azaltır ve bu nedenle
bazı gömülü sistemler için tercih edilebilir.
-rodata-muninit-const
-mno-unit-const-in-rodata
Başlatılmamış "const" değişkenlerini salt okunur veri bölümüne koyun. Bu seçenek
sadece birlikte anlamlı -üyeli-veri.
-mcode-okunabilir=ayar
GCC'nin yürütülebilir bölümlerden okuyan kod oluşturup oluşturamayacağını belirtin. Var
üç olası ayar:
-mcode-readable=evet
Talimatlar yürütülebilir bölümlere serbestçe erişebilir. Bu varsayılan ayardır.
-mcode-okunabilir=pcrel
MIPS16 PC'ye bağlı yükleme talimatları yürütülebilir bölümlere erişebilir, ancak diğer
talimatlar bunu yapmamalıdır. Bu seçenek 4KSc ve 4KSd işlemcilerde kullanışlıdır.
kod TLB'leri Okuma Engelleme bitine sahip olduğunda. İşlemcilerde de kullanışlıdır.
ikili komut/veri SRAM arayüzüne sahip olacak şekilde yapılandırılabilen ve
M4K gibi, PC'ye bağlı yükleri otomatik olarak RAM talimatına yönlendirir.
-mcode-readable=hayır
Talimatlar yürütülebilir bölümlere erişmemelidir. Bu seçenek yararlı olabilir
ikili talimat/veri SRAM arayüzüne sahip olacak şekilde yapılandırılmış ancak
(M4K'dan farklı olarak) PC'ye bağlı yükleri otomatik olarak
talimat RAM'i.
-msplit-adresleri
-mno-split-adresler
"%hi()" ve "%lo()" montajcı yer değiştirme operatörlerinin kullanımını etkinleştirin (devre dışı bırakın). Bu
seçeneğin yerini aldı -meexplicit-relocs ama geriye doğru tutulur
uyumluluğu.
-meexplicit-relocs
-mno-açık-yer değiştirmeler
Sembolik adreslerle uğraşırken birleştirici yer değiştirme operatörlerini kullanın (kullanmayın).
tarafından seçilen alternatif -mno-açık-yer değiştirmeler, bunun yerine birleştirici makroları kullanmaktır.
-meexplicit-relocs GCC bir montajcı kullanacak şekilde yapılandırıldıysa varsayılandır.
yer değiştirme operatörlerini destekler.
-mcheck-sıfır bölümü
-mno-check-sıfır-bölme
Tamsayıyı sıfıra bölmede yakalayın (bindirmeyin).
Varsayılan -mcheck-sıfır bölümü.
-mdivid-traps
-mdivid-breaks
MIPS sistemleri, bir koşullu tuzak ya da bir
kırma talimatı. Tuzakların kullanılması daha küçük kodla sonuçlanır, ancak yalnızca MIPS'de desteklenir
II ve sonrası. Ayrıca, Linux çekirdeğinin bazı sürümlerinde tuzağı önleyen bir hata vardır.
uygun sinyali ("SIGFPE") üretmekten. Kullanmak -mdivid-traps koşullu izin vermek
onları destekleyen mimarilerdeki tuzaklar ve -mdivid-breaks kullanmaya zorlamak
sonları.
Varsayılan genellikle -mdivid-traps, ancak bu, yapılandırma zamanında geçersiz kılınabilir
kullanma --with-divide=keser. Sıfıra bölme kontrolleri kullanılarak tamamen devre dışı bırakılabilir.
-mno-check-sıfır-bölme.
-mmmcpy
-mno-memcpy
Önemsiz blok hareketleri için "memcpy()" kullanımını zorlayın (zorlamayın). Varsayılan
is -mno-memcpy, bu da GCC'nin çoğu sabit boyutlu kopyayı satır içine almasına izin verir.
-mlong-çağrıları
-çok uzun aramalar
"jal" komutunun kullanımını devre dışı bırakın (devre dışı bırakmayın). "jal" kullanarak işlevleri çağırma
daha verimlidir ancak arayan ve arananın aynı 256 megabaytta olmasını gerektirir
segmenti.
Bu seçeneğin abicalls kodu üzerinde hiçbir etkisi yoktur. Varsayılan -çok uzun aramalar.
-mad
-deli
tarafından sağlanan "mad", "madu" ve "mul" talimatlarının kullanımını etkinleştirin (devre dışı bırakın).
R4650 ISA.
-mfused-deli
-mno-kaynaşmış-madd
Gerektiğinde kayan noktalı çarpma-biriktirme talimatlarının kullanımını etkinleştirin (devre dışı bırakın).
mevcut. Varsayılan -mfused-deli.
R8000 CPU'da çarpma-biriktirme talimatları kullanıldığında, ara
ürün sonsuz hassasiyetle hesaplanmıştır ve FCSR Flush'a tabi değildir.
Sıfır bit. Bu, bazı durumlarda istenmeyen bir durum olabilir. Diğer işlemcilerde
sonuç, ayrı çarpma kullanılarak eşdeğer hesaplamayla sayısal olarak aynıdır,
talimatları ekleyin, çıkarın ve olumsuzlayın.
-nocpp
MIPS derleyicisine önişlemcisini kullanıcı derleyici dosyaları üzerinde çalıştırmamasını söyleyin (bir
.s son eki) monte ederken.
-mfix-24k
-mno-düzeltme-24k
24K E48 (yeniden doldurma sırasında mağazalarda veri kaybı) hatalarını giderin. geçici çözümler
GCC yerine montajcı tarafından uygulanır.
-mfix-r4000
-mno-düzeltme-r4000
Belirli R4000 CPU hatalarını giderin:
- Çift kelime veya değişken kaydırma, yürütülürse yanlış sonuç verebilir
bir tamsayılı bölmeye başladıktan hemen sonra.
- Bir çift kelime veya değişken kaydırma, şu anda yürütülürse yanlış sonuç verebilir.
bir tamsayı çarpma işlemi devam ediyor.
- Bir tamsayı bölümü, bir gecikme yuvasında başlatılırsa yanlış sonuç verebilir.
alınan dal veya atlama.
-mfix-r4400
-mno-düzeltme-r4400
Belirli R4400 CPU hatalarını giderin:
- Çift kelime veya değişken kaydırma, yürütülürse yanlış sonuç verebilir
bir tamsayılı bölmeye başladıktan hemen sonra.
-mfix-r10000
-mno-düzeltme-r10000
Belirli R10000 hataları etrafında çalışın:
- "ll"/"sc" dizileri 3.0'dan önceki revizyonlarda atomik davranmayabilir. Onlar olabilir
2.6 ve önceki sürümlerde kilitlenme.
Bu seçenek yalnızca hedef mimari dallanma olasılığını destekliyorsa kullanılabilir.
talimatları. -mfix-r10000 varsayılan olduğunda -mart=r10000 kullanıldı; -mno-düzeltme-r10000
aksi takdirde varsayılandır.
-mfix-vr4120
-mno-düzeltme-vr4120
Belirli VR4120 hatalarını giderin:
- "dmultu" her zaman doğru sonucu vermez.
- "div" ve "ddiv", işlenenlerden biri varsa her zaman doğru sonucu vermez
negatiftir.
Bölme hataları için geçici çözümler, aşağıdaki özel işlevlere dayanır: libgcc.a. At
mevcut, bu işlevler yalnızca "mips64vr*-elf" konfigürasyonları tarafından sağlanmaktadır.
Diğer VR4120 hataları, belirli çiftler arasına bir NOP eklenmesini gerektirir.
Talimatlar. Bu hatalar, GCC'nin kendisi tarafından değil, montajcı tarafından işlenir.
-mfix-vr4130
VR4130 "mflo"/"mfhi" hatalarını giderin. Geçici çözümler, aşağıdakiler tarafından uygulanır:
GCC, "mflo" ve "mfhi" kullanmaktan kaçınsa da, GCC yerine montajcı
Bunun yerine VR4130 "macc", "macchi", "dmacc" ve "dmacchi" talimatları mevcuttur.
-mfix-sb1
-mno-düzeltme-sb1
Belirli SB-1 CPU çekirdek hataları etrafında çalışın. (Bu bayrak şu anda SB-1 çevresinde çalışmaktadır.
revizyon 2 "F1" ve "F2" kayan nokta hataları.)
-mr10k-önbellek-bariyer=ayar
GCC'nin yan etkilerinden kaçınmak için önbellek engelleri eklemesi gerekip gerekmediğini belirtin.
R10K işlemciler hakkında spekülasyon.
Birçok işlemcide olduğu gibi, R10K bir koşullu işlemin sonucunu tahmin etmeye çalışır.
şube ve spekülatif olarak "alınan" şubeden talimatları yürütür. Daha sonra
tahmin edilen sonuç yanlışsa bu talimatları iptal eder. Ancak, R10K'da,
iptal edilen talimatların bile yan etkileri olabilir.
Bu sorun yalnızca çekirdek depolarını ve sisteme bağlı olarak çekirdek yüklerini etkiler.
Örnek olarak, spekülatif olarak yürütülen bir mağaza, hedef belleği önbelleğe yükleyebilir.
ve mağazanın kendisi daha sonra iptal edilse bile önbellek satırını kirli olarak işaretleyin. eğer bir DMA
işlem, "kirli" satır temizlenmeden önce aynı bellek alanına yazar,
önbelleğe alınmış veriler, DMA ile oluşturulmuş verilerin üzerine yazar. Tam bilgi için R10K işlemci kılavuzuna bakın.
diğer olası sorunlar da dahil olmak üzere açıklama.
Çözümlerden biri, her bellek erişiminden önce önbellek engeli yönergeleri eklemektir.
spekülatif olarak yürütülebilir ve iptal edilse bile yan etkileri olabilir.
-mr10k-önbellek-bariyer=ayar GCC'nin bu geçici çözümü uygulamasını kontrol eder. Bilişim Teknoloji
aşağıdaki bölgelerdeki herhangi bir bayta iptal edilen erişimlerin yan
Etkileri:
1. geçerli işlevin yığın çerçevesi tarafından işgal edilen bellek;
2. gelen yığın argümanı tarafından işgal edilen bellek;
3. Bağlantı-zaman-sabit adresi olan bir nesne tarafından işgal edilen bellek.
Bu bölgelere spekülatif erişimin sağlanması, çekirdeğin sorumluluğundadır.
gerçekten güvendeler.
Giriş programı aşağıdaki gibi bir işlev bildirimi içeriyorsa:
geçersiz foo (boş);
o zaman "foo"nun uygulanması "j foo" ve "jal foo"nun yürütülmesine izin vermelidir
spekülatif olarak. GCC, kendi derlediği işlevler için bu kısıtlamayı dikkate alır. Bilişim Teknoloji
GCC dışı işlevlerin (elle yazılmış derleme kodu gibi) aynı şeyi yapmasını bekler.
Seçeneğin üç biçimi vardır:
-mr10k-önbellek-bariyer=yük deposu
Spekülatif olarak yürütülebilecek bir yükleme veya depolamadan önce bir önbellek bariyeri ekleyin
ve iptal edilse bile bunun yan etkileri olabilir.
-mr10k-önbellek-bariyer=mağaza
Spekülatif olarak yürütülebilecek bir mağazanın önüne bir önbellek bariyeri yerleştirin ve
iptal edilse bile yan etkileri olabilir.
-mr10k-önbellek-bariyer=yok
Önbellek engellerinin eklenmesini devre dışı bırakın. Bu varsayılan ayardır.
-mflush-işlev=func
-mno-flush-fonk
I ve D önbelleklerini temizlemek için çağrılacak veya böyle bir çağrı yapılmayacak işlevi belirtir.
işlev. Çağrılırsa, işlev ortak argümanlarla aynı argümanları almalıdır.
"_flush_func()", yani önbelleğin kendisine ait olduğu bellek aralığının adresi
temizlenmiş, bellek aralığının boyutu ve 3 sayısı (her iki önbelleği temizlemek için). NS
varsayılan, GCC'nin yapılandırıldığı hedefe bağlıdır, ancak genellikle
_flush_func or __cpu_flush.
mbranch-maliyet=num
Şubelerin maliyetini kabaca ayarlayın num "basit" talimatlar. Bu maliyet sadece bir
buluşsaldır ve sürümler arasında tutarlı sonuçlar üretmesi garanti edilmez. bir sıfır
maliyet yedekli olarak varsayılanı seçer, bu da -mtune ayarı.
-mbranch-muhtemelen
-mno-dal-muhtemel
Şube Olası talimatlarının kullanımını etkinleştirin veya devre dışı bırakın, varsayılan ayardan bağımsız olarak.
seçilmiş mimari Varsayılan olarak, Şube Olası talimatları şu durumlarda oluşturulabilir:
seçilen mimari tarafından desteklenirler. Bir istisna, MIPS32 içindir ve
MIPS64 mimarileri ve bu mimarileri uygulayan işlemciler; bunlar için,
Branch Muhtemel talimatları, MIPS32 ve
MIPS64 mimarileri, kullanımlarını özellikle kullanımdan kaldırmaktadır.
-mfp-istisnaları
-mno-fp-istisnaları
FP istisnalarının etkinleştirilip etkinleştirilmediğini belirtir. Bu, FP talimatlarının nasıl olduğunu etkiler.
bazı işlemciler için planlanmıştır. Varsayılan, FP istisnalarının etkinleştirilmesidir.
Örneğin, SB-1'de, FP istisnaları devre dışı bırakılırsa ve 64-bit yayarsak
kodu, o zaman her iki FP borusunu da kullanabiliriz. Aksi takdirde sadece bir FP borusu kullanabiliriz.
-mvr4130 hizalama
-mno-vr4130-hizalama
VR4130 ardışık düzeni iki yönlü süperskalerdir, ancak yalnızca iki talimat verebilir
ilki 8 bayt hizalanmışsa birlikte. Bu seçenek etkinleştirildiğinde, GCC hizalar
paralel olarak yürütülmesi gerektiğini düşündüğü talimat çiftleri.
Bu seçenek yalnızca VR4130 için optimizasyon yaparken etkilidir. Normalde kod yapar
daha hızlı, ama daha büyük yapma pahasına. Varsayılan olarak şurada etkindir:
optimizasyon seviyesi -O3.
-msynci
-mno-synci
Onu destekleyen mimarilerde "synci" talimatlarının oluşturulmasını etkinleştirin (devre dışı bırakın).
"Synci" talimatları (etkinleştirilmişse), "__builtin___clear_cache()" olduğunda oluşturulur.
derlenir.
Bu seçenek varsayılan olarak "-mno-synci"dir, ancak varsayılan ayar yapılandırılarak geçersiz kılınabilir.
"--with-synci" ile.
Tek işlemcili sistemler için kod derlerken, "synci" kullanmak genellikle güvenlidir.
Ancak, birçok çok çekirdekli (SMP) sistemde, talimatı geçersiz kılmaz.
tüm çekirdeklerde önbelleğe alır ve tanımsız davranışa neden olabilir.
-mrelax-resimli aramalar
-mno-rahatla-resimli aramalar
Normalde 25$'lık kayıt yoluyla gönderilen PIC çağrılarını doğrudan çağrılara dönüştürmeyi deneyin.
Bu, yalnızca bağlayıcının hedefi bağlantı zamanında çözebilmesi ve
hedef, doğrudan arama için kapsama alanı içindedir.
-mrelax-resimli aramalar GCC bir montajcı ve bir
".reloc" derleme yönergesini ve "-mexplicit-relocs"u destekleyen bağlayıcı
Efekt. "-mno-explicit-relocs" ile bu optimizasyon,
derleyiciden yardım almadan tek başına derleyici ve bağlayıcı.
-mmcount-ra-adresi
-mno-mcount-ra-adresi
"_mcount" öğesinin çağıran işlevin dönüşünü değiştirmesine izin veren kodu yayın (yayınlamayın)
adres. Etkinleştirildiğinde, bu seçenek olağan "_mcount" arabirimini yeni bir
ra-adresi "intptr_t *" tipine sahip olan ve 12$ kaydında geçirilen parametre.
"_mcount" daha sonra aşağıdakilerin her ikisini yaparak dönüş adresini değiştirebilir:
· Kayıttaki yeni adresin iade edilmesi 31 $.
· Yeni adresin "* içinde saklanmasıra-adresi", Eğer ra-adresi null değildir.
Varsayılan -mno-mcount-ra-adresi.
MMIX Opsiyonlar
Bu seçenekler MMIX için tanımlanmıştır:
-mlibfuncs
-mno-libfuncs
İçindeki tüm değerleri ileterek, içsel kitaplık işlevlerinin derlendiğini belirtin.
Kayıtlar, boyutu ne olursa olsun.
-mepsilon
-mno-epsilon
"rE" ile karşılaştıran kayan nokta karşılaştırma talimatları oluşturun
epsilon kaydı.
-mabi=mmixware
-mabi=gnu
İşlev parametrelerini ileten ve (çağrılan
işlevi), global kullanan GNU ABI'nin aksine $0 ve üzeri kayıtlar olarak görülür.
231$ ve üzeri kayıtlar.
-mzero-uzatma
-mno-sıfır-uzatma
64 bitten daha kısa boyutlardaki bellekten veri okurken, sıfır-kullanın (kullanmayın)
işaret genişletici olanlar yerine varsayılan olarak yükleme talimatlarını genişletmek.
-mknuthdiv
-mno-knuthdiv
Kalan veren bir bölme işleminin sonucunun bölenle aynı işarete sahip olmasını sağlayın.
Varsayılan ile, -mno-knuthdiv, kalanın işareti, kalanın işaretini takip eder.
kâr payı. Her iki yöntem de aritmetik olarak geçerlidir, ikincisi neredeyse yalnızca
Kullanılmış.
-mtoplevel-semboller
-mno-üst düzey-semboller
Başa ekle (başa ekleme) a : tüm global sembollere, böylece montaj kodu kullanılabilir
"PREFIX" montaj direktifi ile.
-melf
Varsayılan yerine ELF biçiminde bir yürütülebilir dosya oluşturun mmo tarafından kullanılan biçim
the karma simülatör.
-mbranch-tahmin
-mno-dal-tahmin
Statik dal tahmini yaparken olası dal talimatlarını kullanın (kullanmayın).
olası bir şubeyi gösterir.
-mbase-adresleri
-mno-taban-adresleri
Kullanan kod oluşturun (oluşturmayın) baz adresleri. Temel adres kullanma
için otomatik olarak bir istek oluşturur (birleştirici ve bağlayıcı tarafından işlenir)
küresel bir kayıtta kurulacak sabit. Kayıt, bir veya daha fazla baz için kullanılır
Kayıtta tutulan değerden 0 ila 255 aralığında adres istekleri. NS
genellikle kısa ve hızlı koda yol açar, ancak farklı veri öğelerinin sayısı
sınırlı olarak ele alınabilir. Bu, çok sayıda statik veri kullanan bir programın
gerektirebilir -mno-taban-adresleri.
-msingle-çıkış
-mno-tek çıkış
Oluşturulan kodu her işlevde tek bir çıkış noktasına sahip olmaya zorlayın (zorlamayın).
MN10300 Opsiyonlar
Bunlar -m Matsushita MN10300 mimarileri için seçenekler tanımlanmıştır:
-mult-bug
MN10300 işlemciler için çarpma talimatlarındaki hataları önlemek için kod oluşturun.
Bu varsayılan.
-mno-çoklu-hata
MN10300 için çarpma talimatlarındaki hataları önlemek için kod oluşturmayın
işlemciler.
-mam33
AM33 işlemciye özgü özellikleri kullanarak kod oluşturun.
-mno-am33
AM33 işlemciye özgü özellikleri kullanarak kod oluşturmayın. bu
Varsayılan.
-mam33-2
AM33/2.0 işlemciye özgü özellikleri kullanarak kod oluşturun.
-mam34
AM34 işlemciye özgü özellikleri kullanarak kod oluşturun.
-mtune=işlemci tipi
Talimatları planlarken belirtilen CPU tipinin zamanlama özelliklerini kullanın.
Bu, hedeflenen işlemci türünü değiştirmez. CPU tipi şunlardan biri olmalıdır:
mn10300, am33, 33-2 or am34.
-mreturn-işaretçisi-on-d0
Bir işaretçi döndüren bir işlev oluştururken, işaretçiyi hem "a0" hem de
"d0". Aksi takdirde, işaretçi yalnızca "a0" içinde döndürülür ve böyle bir arama yapmaya çalışır.
prototipi olmayan işlevler hatalara neden olur. Bu seçeneğin şu tarihte açık olduğunu unutmayın:
varsayılan; kullanmak -mno-dönüş-işaretçi-on-d0 devre dışı bırakmak için.
-mno-crt0
C çalışma zamanı başlatma nesne dosyasında bağlantı kurmayın.
-mrelax
Bağlayıcıya, bir gevşeme optimizasyon geçişi gerçekleştirmesi gerektiğini belirtin.
şubeleri, çağrıları ve mutlak hafıza adreslerini kısaltın. Bu seçeneğin yalnızca bir etkisi vardır
son bağlantı adımı için komut satırında kullanıldığında.
Bu seçenek, sembolik hata ayıklamayı imkansız hale getirir.
-miliw
Derleyicinin oluşturmasına izin ver Uzun Talimat Word hedef ise talimatlar
AM33 veya daha sonra. Bu varsayılandır. Bu seçenek önişlemci makrosunu tanımlar
__LIW__.
-mnoliw
Derleyicinin oluşturmasına izin verme Uzun Talimat Word Talimatlar. Bu seçenek
önişlemci makrosunu tanımlar __NO_LIW__.
-msetlb
Derleyicinin oluşturmasına izin ver SELB ve LCC hedef ise talimatlar
AM33 veya daha sonra. Bu varsayılandır. Bu seçenek önişlemci makrosunu tanımlar
__SETLB__.
-mnosetlb
Derleyicinin oluşturmasına izin verme SELB or LCC Talimatlar. Bu seçenek tanımlar
önişlemci makrosu __NO_SETLB__.
Moxie Opsiyonlar
-meb
Big-endian kodu oluşturun. Bu, varsayılan Moxie-*-* konfigürasyonları.
-mel
Küçük endian kodu oluşturun.
-mno-crt0
C çalışma zamanı başlatma nesne dosyasında bağlantı kurmayın.
KAP-11 Opsiyonlar
Bu seçenekler PDP-11 için tanımlanmıştır:
-mfpu
Donanım FPP kayan noktası kullanın. Bu varsayılandır. (FIS kayan nokta
PDP-11/40 desteklenmez.)
-msoft-float
Donanım kayan nokta kullanmayın.
-mac0
Kayan nokta sonuçlarını ac0 olarak döndürün (Unix derleyici sözdiziminde fr0).
-mno-ac0
Kayan nokta sonuçlarını bellekte döndürün. Bu varsayılandır.
-m40
PDP-11/40 için kod oluşturun.
-m45
PDP-11/45 için kod oluşturun. Bu varsayılandır.
-m10
PDP-11/10 için kod oluşturun.
-mbcopy-yerleşik
Belleği kopyalamak için satır içi "movmemhi" kalıplarını kullanın. Bu varsayılandır.
-mbkopya
Belleği kopyalamak için satır içi "movmemhi" kalıplarını kullanmayın.
-nane16
-mno-int32
16 bitlik "int" kullanın. Bu varsayılandır.
-nane32
-mno-int16
32 bit "int" kullanın.
-mfloat64
-mno-float32
64 bit "kayan" kullanın. Bu varsayılandır.
-mfloat32
-mno-float64
32 bit "kayan" kullanın.
-mabşi
"abshi2" desenini kullanın. Bu varsayılandır.
-mno-abshi
"abshi2" deseni kullanmayın.
-mbranch-pahalı
Şubelerin pahalı olduğunu varsayın. Bu, kod oluşturmayı denemek içindir
bir tek.
-mbranch-ucuz
Şubelerin pahalı olduğunu iddia etmeyin. Bu varsayılandır.
-munix-asm
Unix birleştirici sözdizimini kullanın. Bu, yapılandırıldığında varsayılandır. pdp11-*-bsd.
-mdec-asm
DEC birleştirici sözdizimini kullanın. Bu, herhangi bir PDP-11 hedefi için yapılandırıldığında varsayılandır
başka pdp11-*-bsd.
picoçip Opsiyonlar
Bunlar -m picoChip uygulamaları için seçenekler tanımlanmıştır:
-mae=ae_type
Dizi için komut seti, kayıt seti ve komut programlama parametrelerini ayarlayın
öğe türü ae_type. için desteklenen değerler ae_type vardır HERHANGİ, MUL, ve MAC.
-mae=HERHANGİ BİR tamamen genel bir AE türü seçer. Bu seçenekle oluşturulan kod çalışır
diğer AE türlerinden herhangi birinde. Kod, derlendiğinde olacağı kadar verimli değil
belirli bir AE türü için ve bazı işlem türleri (örn. çarpma) çalışmıyor
tüm AE türlerinde düzgün şekilde.
-mae=ÇOK bir MUL AE türü seçer. Bu, derlenmiş kod için en kullanışlı AE türüdür,
ve varsayılandır.
-mae=MAC DSP tarzı bir MAC AE seçer. Bu seçenekle derlenen kod,
DSP AE sağlamadığından bayt (char) manipülasyonunun düşük performansı
bayt yükü/depoları için donanım desteği.
-msymbol-adres
Derleyicinin bir sembol adını doğrudan bir yükleme/depoda adres olarak kullanmasını sağlayın
talimat, önce bir kayıt defterine yüklemeden. Tipik olarak, bunun kullanımı
seçeneği, seçeneğin kullanılmadığı zamandan daha hızlı çalışan daha büyük programlar oluşturur.
Ancak sonuçlar programdan programa değişir, bu nedenle kullanıcı seçeneği olarak bırakılır,
kalıcı olarak etkinleştirilmek yerine.
-mno-verimsiz-uyarılar
Verimsiz kod üretimiyle ilgili uyarıları devre dışı bırakır. Bu uyarılar şunlar olabilir:
örneğin bayt düzeyinde bellek işlemleri gerçekleştiren kod derlenirken oluşturulur
MAC AE tipinde. MAC AE'nin bayt düzeyinde bellek için donanım desteği yoktur
işlemler, bu nedenle tüm bayt yükleme/depolar, word load/store'dan sentezlenmelidir.
operasyonlar. Bu verimsizdir ve bunu yaptığınızı belirtmek için bir uyarı oluşturulur.
bayt işlemlerinden kaçınmak veya aşağıdakilere sahip bir AE türünü hedeflemek için kodu yeniden yazmalıdır.
gerekli donanım desteği. Bu seçenek, bu uyarıları devre dışı bırakır.
PowerPC Opsiyonlar
Bunlar aşağıda listelenmiştir
RL78 Opsiyonlar
-msim
Bir simülatör içinde çalışmayı desteklemek için ek hedef kitaplıklarındaki bağlantılar.
-mmul=yok
-mmul=g13
-mmul=rl78
Kullanılacak donanım çarpma desteğinin türünü belirtir. Varsayılan
yazılım çarpma işlevlerini kullanan "yok". "g13" seçeneği,
donanım çarpma/bölme çevre birimi yalnızca RL78/G13 hedeflerinde. "rl78" seçeneği
RL78 yazılım kılavuzunda tanımlanan standart donanım çoğaltması içindir.
IBM RS / 6000 ve PowerPC Opsiyonlar
Bunlar -m IBM RS/6000 ve PowerPC için seçenekler tanımlanmıştır:
-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-zor-dfp
Kullandığınız işlemcide hangi talimatların mevcut olduğunu belirtmek için bu seçenekleri kullanırsınız.
kullanıyorlar. Bu seçeneklerin varsayılan değeri, GCC yapılandırılırken belirlenir.
belirterek -mcpu=cpu_type bu seçeneklerin belirtimini geçersiz kılar. Biz
kullanmanı tavsiye ederim -mcpu=cpu_type Yukarıda listelenen seçenekler yerine seçenek.
Belirtme -mpowerpc-gpopt GCC'nin isteğe bağlı PowerPC mimarisini kullanmasına izin verir
kayan noktalı karekök de dahil olmak üzere Genel Amaç grubundaki talimatlar.
Belirtme -mpowerpc-gfxopt GCC'nin isteğe bağlı PowerPC mimarisini kullanmasına izin verir
kayan nokta seçimi de dahil olmak üzere Grafik grubundaki talimatlar.
The -mmfcrf seçenek, GCC'nin koşul kaydı alanından hareketi oluşturmasına izin verir
POWER4 işlemcisine ve aşağıdakileri destekleyen diğer işlemcilere uygulanan talimat
PowerPC V2.01 mimarisi. NS -mpopcntb seçenek, GCC'nin popcount oluşturmasına izin verir
ve POWER5'te uygulanan çift duyarlıklı FP karşılıklı tahmin talimatı
PowerPC V2.02 mimarisini destekleyen işlemci ve diğer işlemciler. NS
-mpopcntd seçeneği, GCC'nin üzerinde uygulanan popcount talimatını oluşturmasına izin verir.
POWER7 işlemci ve PowerPC V2.06 mimarisini destekleyen diğer işlemciler.
The -mfprnd seçenek, GCC'nin FP yuvarlaktan tamsayıya yönergeler oluşturmasına izin verir
POWER5+ işlemcide ve PowerPC'yi destekleyen diğer işlemcilerde uygulanır
V2.03 mimarisi. NS -mcmpb seçenek, GCC'nin karşılaştırma baytlarını oluşturmasına izin verir
POWER6 işlemcisine ve aşağıdakileri destekleyen diğer işlemcilere uygulanan talimat
PowerPC V2.05 mimarisi. NS -mmfpgpr seçenek, GCC'nin FP hareketini oluşturmasına izin verir
POWER6X işlemcide uygulanan genel amaçlı kayıt talimatlarına ve
genişletilmiş PowerPC V2.05 mimarisini destekleyen diğer işlemciler. NS -mhard-dfp
seçeneği, GCC'nin üzerinde uygulanan ondalık kayan nokta talimatlarını oluşturmasına izin verir.
bazı POWER işlemciler.
The -mpowerpc64 seçeneği, GCC'nin ek 64-bit yönergeler oluşturmasını sağlar.
tam PowerPC64 mimarisinde bulunur ve GPR'leri 64-bit, çift kelime olarak ele alır
miktarları. GCC varsayılanları -mno-powerpc64.
-mcpu=cpu_type
için mimari tipini, kayıt kullanımını ve talimat zamanlama parametrelerini ayarlayın.
makine tipi cpu_type. için desteklenen değerler cpu_type vardır 401, 403, 405, 405 fps, 440,
440 fps, 464, 464 fps, 476, 476 fps, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, ec603e, G3, G4, G5, titan, power3, power4, power5, güç5+, power6,
güç6x, power7, power8, güç bilgisayarı, güçpc64, güçpc64le, ve rs64.
-mcpu=powerpc, -mcpu=powerpc64, ve -mcpu=powerpc64le saf 32-bit PowerPC belirtin
(endian), 64 bit büyük endian PowerPC ve 64 bit küçük endian PowerPC
için varsayılan uygun, genel bir işlemci modeline sahip mimari makine türleri
zamanlama amaçları.
Diğer seçenekler belirli bir işlemciyi belirtir. Bu seçenekler altında oluşturulan kod
en iyi o işlemcide çalışır ve diğerlerinde hiç çalışmayabilir.
The -mcpu seçenekler aşağıdaki seçenekleri otomatik olarak etkinleştirir veya devre dışı bırakır:
-maltivec -mfprnd -mhard-şamandıra -mmfcrf -mçoklu -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-şamandıra -mdouble-şamandıra -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-hareket -mpower8-füzyon
-mpower8-vektör -mquad-bellek -mquad-bellek-atomik
Belirli bir CPU için ayarlanan belirli seçenekler, derleyici sürümleri arasında değişiklik gösterir,
o CPU için en uygun kodu hangi ayarın ürettiğine bağlı olarak; değil
mutlaka gerçek donanımın yeteneklerini yansıtır. ayarlamak isterseniz
belirli bir değere bireysel seçenek, sonra belirtebilirsiniz -mcpu seçeneği
sevmek -mcpu=970 -mno-altivec.
AIX'te, -maltivec ve -mpowerpc64 seçenekler tarafından etkinleştirilmez veya devre dışı bırakılır. -mcpu
AIX'in bu seçenekler için tam desteği olmadığı için şu anda seçenek. Yapabilirsin
bilgisayarınızda çalışacağından eminseniz, bunları ayrı ayrı etkinleştirin veya devre dışı bırakın.
ortamı.
-mtune=cpu_type
Makine tipi için talimat programlama parametrelerini ayarlayın cpu_type, ancak ayarlamayın
mimari türü veya kayıt kullanımı, -mcpu=cpu_type yapmak. için aynı değerler
cpu_type için kullanılır -mtune olduğu gibi -mcpu. Her ikisi de belirtilirse, oluşturulan kod
tarafından belirlenen mimariyi ve kayıtları kullanır. -mcpu, ancak tarafından ayarlanan zamanlama parametreleri
-mtune.
-mcmodel=küçük
Küçük model için PowerPC64 kodu oluşturun: TOC, 64k ile sınırlıdır.
-mcmodel=orta
Orta model için PowerPC64 kodu oluşturun: TOC ve diğer statik veriler çalışıyor olabilir
toplam 4G boyutunda.
-mcmodel=büyük
Büyük model için PowerPC64 kodu oluşturun: TOC'nin boyutu 4G'ye kadar olabilir. Başka
veri ve kod yalnızca 64 bit adres alanıyla sınırlıdır.
-maltivec
-mno-altivec
AltiVec talimatlarını kullanan (kullanmayan) kod oluşturun ve ayrıca kullanımı etkinleştirin
AltiVec komut setine daha doğrudan erişim sağlayan yerleşik işlevler.
Ayrıca ayarlamanız gerekebilir -mabi=altifc AltiVec ABI ile mevcut ABI'yi ayarlamak için
geliştirmeleri.
Ne zaman -maltivec yerine kullanılır -maltivec=le or -maltivec=olmak, eleman sırası
Altivec için "vec_splat", "vec_extract" ve "vec_insert" gibi gerçekler eşleşir
hedefin endianlığına karşılık gelen dizi öğesi sırası. yani eleman
sıfır, bir big-endian'ı hedeflerken bir vektör kaydındaki en soldaki öğeyi tanımlar
platform ve bir vektörü hedeflerken bir vektör kaydındaki en sağdaki öğeyi tanımlar.
küçük endian platformu.
-maltivec=olmak
Altivec komutlarını big-endian eleman sırasını kullanarak üretin.
hedef büyük veya küçük endian. Bir big-endian'ı hedeflerken bu varsayılandır
platformu.
Öğe sırası, aşağıdakiler gibi Altivec içsel öğelerindeki öğe numaralarını yorumlamak için kullanılır:
"vec_splat", "vec_extract" ve "vec_insert". Varsayılan olarak, bunlar diziyle eşleşir
hedefin endianlığına karşılık gelen eleman sırası.
-maltivec=le
Küçük endian eleman sırasını kullanarak Altivec talimatlarını oluşturun,
hedef büyük veya küçük endian. Biraz hedeflerken bu varsayılandır-
adana platformu. Bu seçenek şu anda bir big-endian hedeflenirken yoksayılıyor
platformu.
Öğe sırası, aşağıdakiler gibi Altivec içsel öğelerindeki öğe numaralarını yorumlamak için kullanılır:
"vec_splat", "vec_extract" ve "vec_insert". Varsayılan olarak, bunlar diziyle eşleşir
hedefin endianlığına karşılık gelen eleman sırası.
-mvrsave
-mno-vrsave
AltiVec kodu oluştururken VRSAVE talimatları oluşturun.
-mgen-hücre-mikrokod
Hücre mikrokod talimatları oluşturun.
-mwarn-hücre-mikrokod
Bir Hücre mikrokodu talimatı yayınlandığında uyar. Hücre mikrokodu örneği
talimat değişken bir vardiyadır.
-msecure-plt
izin veren kod oluşturun ld ve ld.so yürütülebilir dosyalar ve paylaşılan kitaplıklar oluşturmak için
yürütülemez ".plt" ve ".got" bölümleri. Bu, bir PowerPC 32-bit SYSV ABI seçeneğidir.
-mbss-plt
BSS ".plt" bölümünü kullanan kod oluşturun. ld.so doldurur ve ".plt" gerektirir
ve hem yazılabilir hem de yürütülebilir olan ".got" bölümleri. Bu bir PowerPC 32 bit
SYSV ABI seçeneği.
-misel
-mno-isel
Bu anahtar, ISEL talimatlarının oluşturulmasını etkinleştirir veya devre dışı bırakır.
-misel=Evet Hayır
Bu anahtar kullanımdan kaldırıldı. Kullanmak -misel ve -mno-isel yerine.
-mspe
-mno-spe
Bu anahtar, SPE simd talimatlarının oluşturulmasını etkinleştirir veya devre dışı bırakır.
- engelli
-mno-eşleştirilmiş
Bu anahtar, PAIRED simd talimatlarının oluşturulmasını etkinleştirir veya devre dışı bırakır.
-mspe=Evet Hayır
Bu seçenek kullanımdan kaldırıldı. Kullanmak -mspe ve -mno-spe yerine.
-mvsx
-mno-vsx
Vektör/skaler (VSX) komutlarını kullanan (kullanmayan) ve ayrıca
VSX'e daha doğrudan erişime izin veren yerleşik işlevlerin kullanımını etkinleştirin
komut seti.
-mcrypto
-mno-kripto
Doğrudan erişime izin veren yerleşik işlevlerin kullanımını etkinleştirin (devre dışı bırakın).
PowerPC ISA'nın 2.07 sürümünde eklenen şifreleme yönergeleri.
-mdirect-hareket
-mno-doğrudan-hareket
Veriler arasında veri taşımak için talimatları kullanan (kullanmayan) kod oluşturun.
genel amaçlı kayıtlar ve eklenen vektör/skaler (VSX) kayıtları
PowerPC ISA'nın 2.07 sürümü.
-mpower8-füzyon
-mno-power8-füzyon
Bazı tamsayı işlemlerini bitişik tutan (tutmayan) kod oluşturun, böylece
yönergeler power8 ve sonraki işlemcilerde birleştirilebilir.
-mpower8-vektör
-mno-power8-vektör
Vektör ve skaler talimatları kullanan (kullanmayan) kod oluşturun.
PowerPC ISA'nın 2.07 sürümüne eklenmiştir. Ayrıca yerleşik işlevlerin kullanımını etkinleştirin
vektör talimatlarına daha doğrudan erişim sağlar.
-mquad-bellek
-mno-dörtlü-hafıza
Atomik olmayan dörtlü sözcük belleği yönergelerini kullanan (kullanmayan) kod oluşturun.
The -mquad-bellek seçenek 64 bit modunun kullanılmasını gerektirir.
-mquad-bellek-atomik
-mno-dört-bellek-atomik
Atomik dörtlü sözcük belleği yönergelerini kullanan (kullanmayan) kod oluşturun. NS
-mquad-bellek-atomik seçenek 64 bit modunun kullanılmasını gerektirir.
-mfloat-gprs=evet/tek/çift/hayır
-mfloat-gprs
Bu anahtar, üzerinde kayan nokta işlemlerinin oluşturulmasını etkinleştirir veya devre dışı bırakır.
onu destekleyen mimariler için genel amaçlı kayıtlar.
Argüman Evet or tek tek duyarlıklı kayan nokta kullanımını sağlar
işlemleri.
Argüman çift tek ve çift duyarlıklı kayan nokta kullanımını sağlar
işlemleri.
Argüman yok hayır genel amaçlı kayıtlarda kayan nokta işlemlerini devre dışı bırakır.
Bu seçenek şu anda yalnızca MPC854x'te mevcuttur.
-m32
-m64
Darwin ve SVR32 hedeflerinin 64 bit veya 4 bit ortamları için kod oluşturun (dahil
GNU/Linux). 32 bit ortam int, long ve pointer'ı 32 bite ayarlar ve
herhangi bir PowerPC varyantında çalışan kod üretir. 64-bit ortam, int'yi şu şekilde ayarlar:
32 bit ve uzun ve 64 bit işaretçi ve olduğu gibi PowerPC64 için kod üretir
-mpowerpc64.
-mfull-toc
-mno-fp-in-toc
-mno-toplam-toplam
-minimal-toc
Her biri için oluşturulan TOC'nin (İçindekiler) oluşturulmasını değiştirin.
çalıştırılabilir dosya. NS -mfull-toc seçeneği varsayılan olarak seçilidir. Bu durumda, GCC
içindeki her benzersiz otomatik olmayan değişken referansı için en az bir TOC girişi tahsis eder.
senin programın. GCC ayrıca TOC'ye kayan nokta sabitleri yerleştirir. Ancak, sadece
TOC'de 16,384 giriş mevcuttur.
Mevcut miktarı aştığınızı söyleyen bir linker hata mesajı alırsanız
TOC alanı ile kullanılan TOC alanı miktarını azaltabilirsiniz. -mno-fp-in-toc ve
-mno-toplam-toplam seçenekleri. -mno-fp-in-toc GCC'nin kayan nokta koymasını önler
TOC'deki sabitler ve -mno-toplam-toplam GCC'yi hesaplamak için kod oluşturmaya zorlar.
Bu toplamı TOC'ye koymak yerine çalışma zamanında bir adres ve bir sabitin toplamı.
Bu seçeneklerden birini veya her ikisini de belirtebilirsiniz. Her biri GCC'nin çok üretmesine neden olur
TOC alanını koruma pahasına biraz daha yavaş ve daha büyük kod.
Bu seçeneklerin her ikisini de belirttiğinizde bile İçindekiler'de hala yeriniz kalmazsa,
belirtmek -minimal-toc Bunun yerine. Bu seçenek, GCC'nin yalnızca bir TOC girişi yapmasına neden olur.
her dosya. Bu seçeneği belirlediğinizde, GCC daha yavaş ve daha büyük kod üretir.
ancak bu son derece az TOC alanı kullanır. Bu seçeneği yalnızca
Daha az sıklıkla yürütülen kod içeren dosyalar.
-maix64
-maix32
64-bit AIX ABI ve çağrı kuralını etkinleştirin: 64-bit işaretçiler, 64-bit "uzun" tip ve
onları desteklemek için gerekli altyapı. belirtme -maix64 ima -mpowerpc64,
süre -maix32 64-bit ABI'yi devre dışı bırakır ve -mno-powerpc64. GCC varsayılanları
-maix32.
-mxl-uyumluluğu
-mno-xl-uyumluluğu
AIX- kullanırken IBM XL derleyici semantiğine daha yakın olan kod üretin
uyumlu ABI. Kayan nokta bağımsız değişkenlerini, prototiplenmiş işlevlere,
bağımsız değişken FPR'lerine ek olarak yığında kaydetme alanını (RSA) kaydedin. varsayma
128 bit uzunluğundaki çift değerdeki en anlamlı çift, doğru şekilde yuvarlandığında
değerleri karşılaştırmak ve ikiye dönüştürmek. Uzun çift için XL sembol adlarını kullanın
rutinleri destekler.
AIX çağrı kuralı genişletildi, ancak başlangıçta bir sorunu işlemek için belgelenmedi.
argümanlarının adresini alan bir işlevi çağırmanın belirsiz K&R C durumu
beyan edilenden daha az argüman. IBM XL derleyicileri, kayan nokta bağımsız değişkenlerine şu şekilde erişir:
olmadan bir altyordam derlendiğinde yığından RSA'ya sığmaz.
optimizasyon. Çünkü her zaman kayan noktalı argümanları yığında depolamak
verimsiz ve nadiren ihtiyaç duyulan, bu seçenek varsayılan olarak etkin değildir ve yalnızca
optimizasyon olmadan IBM XL derleyicileri tarafından derlenen alt yordamları çağırırken gereklidir.
-mpe
Destek IBM RS / 6000 SP Paralel çevre (PE). Kullanmak için yazılmış bir uygulamayı bağlayın
uygulamanın çalışmasını sağlamak için özel başlangıç koduyla iletilen mesaj. NS
sistem standart konuma PE kurulu olmalıdır (/usr/lpp/ppe.poe/), ya da
gözlük dosya ile geçersiz kılınmalıdır -özellikler= uygun olanı belirtme seçeneği
dizin konumu. Paralel Ortam iş parçacıklarını desteklemez, bu nedenle -mpe
seçeneği ve -pthread seçenek uyumsuz.
-malign-doğal
-malign-güç
AIX, 32 bit Darwin ve 64 bit PowerPC GNU/Linux'ta seçenek -malign-doğal
kayan noktalı çiftler gibi daha büyük türlerin ABI tanımlı hizalamasını geçersiz kılar,
doğal büyüklük temelli sınırlarında. Seçenek -malign-güç GCC'ye talimat verir
ABI tarafından belirtilen hizalama kurallarına uyun. GCC, standart hizalamayı varsayılan olarak ayarlar
ABI'de tanımlanmıştır.
64 bit Darwin'de, doğal hizalama varsayılandır ve -malign-güç değil
destekledi.
-msoft-float
-mhard-şamandıra
Kayan nokta kayıt kümesini kullanmayan (kullanmayan) kod oluşturun. Yazılım
kullanırsanız kayan nokta öykünmesi sağlanır. -msoft-float seçeneğini seçin ve
bağlanırken GCC seçeneği.
-msingle-şamandıra
-mdouble-şamandıra
Tek veya çift duyarlıklı kayan nokta işlemleri için kod oluşturun.
-mdouble-şamandıra ima -msingle-şamandıra.
-msimple-fpu
Donanım kayan nokta birimi için "sqrt" ve "div" yönergeleri oluşturmayın.
-mfpu=isim
Kayan nokta biriminin türünü belirtin. için geçerli değerler isim vardır sp_lite (eşittir
-msingle-şamandıra -msimple-fpu), dp_lite (eşittir -mdouble-şamandıra -msimple-fpu),
sp_full (eşittir -msingle-şamandıra), Ve dp_full (eşittir -mdouble-şamandıra).
-mxilinx-fpu
Xilinx PPC 405/440 üzerinde kayan nokta birimi için optimizasyonlar gerçekleştirin.
-mçoklu
-mno-çoklu
Birden çok kelime yükleme talimatını kullanan (kullanmayan) kod oluşturun ve
birden fazla kelime talimatını saklayın. Bu talimatlar varsayılan olarak
POWER sistemleri ve PowerPC sistemlerinde oluşturulmamıştır. Kullanmayın -mçoklu küçük-
endian PowerPC sistemleri, çünkü bu talimatlar işlemci devredeyken çalışmaz.
küçük endian modu. İstisnalar, bunlara izin veren PPC740 ve PPC750'dir.
küçük endian modunda talimatlar.
-mstring
-mno-dizesi
Yükleme dizesi yönergelerini ve depoyu kullanan (kullanmayan) kod oluşturun
birden çok kaydı kaydetmek ve küçük blok hareketleri yapmak için string word talimatları. Bunlar
talimatlar varsayılan olarak POWER sistemlerinde oluşturulur ve PowerPC'de oluşturulmaz
sistemler. Kullanmayın -mstring Little-endian PowerPC sistemlerinde,
işlemci küçük endian modundayken yönergeler çalışmaz. istisnalar
Little-endian modunda bu komutlara izin veren PPC740 ve PPC750'dir.
-güncelleme
-mno-güncelleme
Güncelleyen yükleme veya depolama talimatlarını kullanan (kullanmayan) kod oluşturun.
baz kaydı, hesaplanan hafıza konumunun adresine. Bu talimatlar
varsayılan olarak oluşturulur. Eğer kullanırsan -mno-güncellemearasında küçük bir pencere vardır.
yığın işaretçisinin güncellendiği ve önceki çerçevenin adresinin
depolanır, bu, yığın çerçevesini kesintiler veya sinyaller arasında dolaşan kodun
bozuk veri alın.
-mavoid-endeksli-adresler
-mno-avoid-endeksli-adresler
Dizine alınmış yük veya depolama kullanımından kaçınmaya (kaçınmamaya) çalışan kod oluşturun
Talimatlar. Bu talimatlar, Power6 işlemcilerde performans cezasına neden olabilir
16M'lik bir alanı geçen büyük dizilerden geçerken olduğu gibi belirli durumlarda
sınır. Bu seçenek, Power6 hedeflendiğinde varsayılan olarak etkinleştirilir ve devre dışı bırakılır
aksi takdirde.
-mfused-deli
-mno-kaynaşmış-madd
Kayan nokta çarpmasını kullanan (kullanmayan) kod oluşturun ve biriktirin
Talimatlar. Bu talimatlar, donanım kayan noktası varsa varsayılan olarak oluşturulur.
kullanıldı. Makineye bağlı -mfused-deli seçenek artık makineyle eşlenmiştir.
bağımsız -ffp-kontrat=hızlı seçenek ve -mno-kaynaşmış-madd ile eşlendi
-ffp-kontrat=kapalı.
-mmulhw
-mno-mulhw
Yarım kelime çarpma ve çarpma-birikimini kullanan (kullanmayan) kod oluşturun
IBM 405, 440, 464 ve 476 işlemcilere ilişkin yönergeler. Bu talimatlar
bu işlemciler hedeflenirken varsayılan olarak oluşturulur.
-mdlmzb
-mno-dlmzb
Dize aramasını kullanan (kullanmayan) kod oluşturun dlmzb IBM'deki talimat
405, 440, 464 ve 476 işlemciler. Bu talimat, varsayılan olarak şu durumlarda oluşturulur:
bu işlemcileri hedef alıyor.
-mno-bit hizalama
-mbit hizalama
System V.4'te ve yerleşik PowerPC sistemleri, yapıları ve birleşimleri zorlamaz (yapmaz).
bit alanının temel türüne hizalanacak bit alanlarını içeren.
Örneğin, varsayılan olarak, 8 "imzasız" bit alanından başka hiçbir şey içermeyen bir yapı.
uzunluk 1, 4 baytlık bir sınıra hizalanır ve 4 bayt boyutundadır. Kullanarak
-mno-bit hizalama, yapı 1 baytlık bir sınıra hizalanır ve 1 bayt boyutundadır.
-mno-katı hizalama
-mstrict-hizalama
System V.4'te ve yerleşik PowerPC sistemlerinde, hizalanmamış bellek
referanslar sistem tarafından işlenir.
- yeniden yerleştirilebilir
-mno-taşınabilir
Statik bir yürütülebilir dosyanın başka bir yere taşınmasına izin veren (izin vermeyen) kod oluşturun.
çalışma zamanında farklı adres. Basit bir gömülü PowerPC sistem yükleyicisi
".got2"nin tüm içeriğini ve ".fixup"ta listelenen 4 baytlık konumları yeniden konumlandırın
bölümünde, bu seçenek tarafından oluşturulan 32 bitlik adreslerin bir tablosu. Bunun çalışması için tüm
birbirine bağlı nesneler ile derlenmelidir - yeniden yerleştirilebilir or -mrelocable-lib.
- yeniden yerleştirilebilir kodu, yığını 8 baytlık bir sınıra hizalar.
-mrelocable-lib
-mno-yeniden konumlandırılabilir-lib
Facebok sayfasını beğenin : - yeniden yerleştirilebilir, -mrelocable-lib statik izin vermek için bir ".fixup" bölümü oluşturur
yürütülebilir dosyalar çalışma zamanında yeniden konumlandırılacak, ancak -mrelocable-lib kullanmaz
daha küçük yığın hizalama - yeniden yerleştirilebilir. ile derlenen nesneler -mrelocable-lib eğer yalnızca sığınmacı statüleri sona erdirilmemişse, kalıcı oturma iznine
herhangi bir kombinasyonu ile derlenen nesnelerle bağlantılı olmalıdır. - yeniden yerleştirilebilir seçenekleri.
-mno-toc
-mtoc
Sistem V.4'te ve yerleşik PowerPC sistemlerinde, kayıt 2'nin şunları içerdiğini varsaymayın (yapmayın).
programda kullanılan adresleri gösteren global bir alana işaretçi.
-biraz
-küçük endian
System V.4'te ve yerleşik PowerPC sistemlerinde, işlemci kodunu çok az bir sürede derler.
endian modu. NS -küçük endian seçenek aynı -biraz.
-büyük
-big-endian
System V.4'te ve yerleşik PowerPC sistemlerinde, işlemci kodunu büyük boyutlu olarak derler.
endian modu. NS -big-endian seçenek aynı -büyük.
-mdinamik-resimsiz
Darwin ve Mac OS X sistemlerinde, kodu yeniden konumlandırılamayacak şekilde derleyin, ancak
dış referansları yeniden yerleştirilebilir. Ortaya çıkan kod için uygundur
uygulamalar, ancak paylaşılan kitaplıklar değil.
-msingle-pic-base
PIC adreslemesi için kullanılan register'ı, onu bir dosyaya yüklemek yerine salt okunur olarak kabul edin.
Her işlev için önsöz. Çalışma zamanı sistemi bunu başlatmaktan sorumludur.
yürütme başlamadan önce uygun bir değerle kaydolun.
-mprioritize-kısıtlı-insns=öncelik
Bu seçenek, sınırlı dağıtım yuvasına atanan önceliği kontrol eder.
ikinci zamanlama geçişi sırasındaki talimatlar. Argüman öncelik değeri alır
0, 1ya da 2 için hayır, en yüksek veya ikinci en yüksek (sırasıyla) öncelik atamak
gönderme yuvası kısıtlı yönergeler.
-msched-maliyetli-dep=bağımlılık_tipi
Bu seçenek, sırasında hangi bağımlılıkların hedef tarafından maliyetli kabul edildiğini kontrol eder.
talimat zamanlaması. Argüman bağımlılık_tipi aşağıdakilerden birini alır
değerler:
yok hayır Hiçbir bağımlılık maliyetli değildir.
herşey Tüm bağımlılıklar maliyetlidir.
true_store_to_load
Mağazadan yüklemeye gerçek bir bağımlılık maliyetlidir.
mağaza_to_load
Mağazadan yüklemeye herhangi bir bağımlılık maliyetlidir.
numara
Gecikmenin daha büyük veya eşit olduğu herhangi bir bağımlılık numara maliyetlidir.
-minsert-schedule-nops=plan
Bu seçenek, ikinci zamanlama sırasında hangi NOP ekleme şemasının kullanılacağını kontrol eder.
geçmek. Argüman plan aşağıdaki değerlerden birini alır:
yok hayır NOP eklemeyin.
ped Boş sorun yuvalarına sahip herhangi bir gönderme grubunu NOP'larla doldurun.
zamanlayıcının gruplaması.
regroup_exact
Pahalı bağımlı insn'leri ayrı gruplara zorlamak için NOP'leri ekleyin. Tam olarak ekle
tahminlere göre, bir Inn'i yeni bir gruba zorlamak için gerektiği kadar NOP
işlemci gruplaması
numara
Pahalı bağımlı inn'leri ayrı gruplara zorlamak için NOP'leri ekleyin. Sokmak numara
NOP'lar, bir işletmeyi yeni bir gruba zorlamak için.
-mcall-sysv
System V.4'te ve yerleşik PowerPC sistemlerinde, arama kurallarını kullanarak kodu derler.
Sistem V Uygulama İkili Arabirimi, PowerPC'nin Mart 1995 taslağına bağlı kalın
işlemci takviyesi GCC'yi kullanarak yapılandırmadığınız sürece bu varsayılandır.
powerpc-*-eabiaix.
-mcall-sysv-eabi
-mcall-eabi
Her ikisini de belirtin -mcall-sysv ve -meabi seçenekleri.
-mcall-sysv-noeabi
Her ikisini de belirtin -mcall-sysv ve -mno-eabi seçenekleri.
-mcall-aixdesc
System V.4 ve yerleşik PowerPC sistemlerinde AIX işletim sistemi için kod derler.
-mcall-linux
System V.4 ve yerleşik PowerPC sistemlerinde Linux tabanlı GNU için kod derler
sistem.
-mcall-freebsd
System V.4 ve yerleşik PowerPC sistemlerinde, FreeBSD işletim sistemi için kod derler.
sistem.
-mcall-netbsd
System V.4 ve yerleşik PowerPC sistemlerinde, NetBSD işletim sistemi için kod derler.
sistem.
-mcall-openbsd
System V.4 ve gömülü PowerPC sistemlerinde, OpenBSD işletim sistemi için kod derler.
sistem.
-maix-yapı-dönüş
Bellekteki tüm yapıları döndürün (AIX ABI tarafından belirtildiği gibi).
-msvr4-struct-dönüş
Kayıtlarda 8 bayttan küçük yapıları döndürür (SVR4 ABI tarafından belirtildiği gibi).
-mabi=abi tipi
Mevcut ABI'yi belirli bir uzantıyla genişletin veya bu uzantıyı kaldırın. Geçerli
değerler altivec, alternatifsiz, sPE, hayır-spe, Ibmlongdouble, eeeelongdouble, elfv1,
elfv2.
-mabi=tür
Mevcut ABI'yi SPE ABI uzantılarıyla genişletin. Bu, varsayılan ABI'yi değiştirmez,
bunun yerine SPE ABI uzantılarını mevcut ABI'ye ekler.
-mabi=spe yok
Mevcut ABI için Book-E SPE ABI uzantılarını devre dışı bırakın.
-mabi=ibmlongdouble
Mevcut ABI'yi, IBM genişletilmiş kesinlikli uzun çiftini kullanacak şekilde değiştirin. Bu bir PowerPC'dir
32 bit SYSV ABI seçeneği.
-mabi=ieeelongdouble
Geçerli ABI'yi, IEEE genişletilmiş kesinlikli uzun çift kullanacak şekilde değiştirin. Bu bir PowerPC'dir
32-bit Linux ABI seçeneği.
-mabi=elfv1
ELFv1 ABI'yi kullanmak için mevcut ABI'yi değiştirin. Bu, big-endian için varsayılan ABI'dır.
PowerPC 64-bit Linux. Varsayılan ABI'yi geçersiz kılmak, özel sistem desteği gerektirir ve
muhteşem şekillerde başarısız olması muhtemeldir.
-mabi=elfv2
ELFv2 ABI'yi kullanmak için mevcut ABI'yi değiştirin. Bu, küçük- için varsayılan ABI'dir.
endian PowerPC 64-bit Linux. Varsayılan ABI'yi geçersiz kılmak için özel sistem gerekir
destekler ve muhteşem şekillerde başarısız olması muhtemeldir.
-mprototip
-mno-prototip
System V.4'te ve yerleşik PowerPC sistemlerinde, tüm çağrıların değişken bağımsız değişkene
işlevler uygun şekilde prototiplenir. Aksi takdirde, derleyici bir talimat eklemelidir.
koşul kodu kaydının bit 6'sını ayarlamak veya temizlemek için prototiplenmemiş her çağrıdan önce
(CR) kayan nokta değerlerinin kayan nokta içinde geçirilip geçirilmediğini belirtmek için
işlevin değişken argümanlar alması durumunda kaydeder. İle birlikte -mprototip, sadece aramalar
prototiplenmiş değişken argüman işlevlerine biti ayarlayın veya temizleyin.
-msim
Gömülü PowerPC sistemlerinde, başlangıç modülünün çağrıldığını varsayalım. sim-crt0.o ve
standart C kitaplıklarının libsim.a ve libc.a. Bu, varsayılan
powerpc-*-eabisim konfigürasyonları.
-mmvme
Gömülü PowerPC sistemlerinde, başlangıç modülünün çağrıldığını varsayalım. crt0.o ve
standart C kitaplıkları libmvme.a ve libc.a.
-deli
Gömülü PowerPC sistemlerinde, başlangıç modülünün çağrıldığını varsayalım. crt0.o ve
standart C kitaplıkları libads.a ve libc.a.
-sarı bıçak
Gömülü PowerPC sistemlerinde, başlangıç modülünün çağrıldığını varsayalım. crt0.o ve
standart C kitaplıkları libyk.a ve libc.a.
-mvxworks
System V.4 ve yerleşik PowerPC sistemlerinde, bir
VxWorks sistemi.
-üye
Gömülü PowerPC sistemlerinde, PPC_EMB belirtmek için ELF bayrakları başlığındaki bit
o eabi genişletilmiş yer değiştirmeler kullanılır.
-meabi
-mno-eabi
System V.4'te ve yerleşik PowerPC sistemlerinde Gömülü
Sistemde yapılan bir dizi değişiklik olan Uygulamalar İkili Arayüzü (EABI)
V.4 özellikleri. seçme -meabi yığının 8 bayta hizalandığı anlamına gelir
sınır, EABI ortamını kurmak için "ana"dan "__eabi" işlevi çağrılır,
ve -msdata seçenek, iki ayrı küçük veriye işaret etmek için hem "r2" hem de "r13" kullanabilir
alanlar. seçme -mno-eabi yığının 16 baytlık bir sınıra hizalandığı anlamına gelir, hayır
EABI başlatma işlevi "ana"dan çağrılır ve -msdata seçenek yalnızca kullanır
"r13" tek bir küçük veri alanına işaret eder. NS -meabi seçerseniz, seçenek varsayılan olarak açıktır.
birini kullanarak yapılandırılmış GCC powerpc*-*-eabi* seçenekleri.
-msdata=eabi
System V.4 ve gömülü PowerPC sistemlerinde, küçük başlatılmış "const" global ve
içindeki statik veriler .sdata2 "r2" kaydı ile gösterilen bölüm. küçük koymak
"const" olmayan global ve statik veriler başlatıldı. .sdata işaret edilen bölüm
"r13" kaydederek. Küçük başlatılmamış genel ve statik verileri .sbss
bitişik olan bölüm, .sdata Bölüm. -msdata=eabi seçenektir
ile uyumsuz - yeniden yerleştirilebilir seçeneği. -msdata=eabi seçeneği de ayarlar
-üye seçeneği.
-msdata=sysv
System V.4 ve yerleşik PowerPC sistemlerinde, küçük global ve statik verileri
.sdata "r13" kaydı ile gösterilen bölüm. Küçük başlatılmamış global
ve statik veriler .sbss bitişik olan bölüm, .sdata Bölüm.
-msdata=sysv seçenek ile uyumlu değil - yeniden yerleştirilebilir seçeneği.
-msdata=varsayılan
-msdata
Sistem V.4 ve yerleşik PowerPC sistemlerinde, eğer -meabi kullanılır, kodu aynı şekilde derleyin
as -msdata=eabi, aksi takdirde kodu aynı şekilde derleyin -msdata=sysv.
-msdata=veri
System V.4 ve yerleşik PowerPC sistemlerinde, küçük global verileri .sdata
Bölüm. Küçük başlatılmamış küresel verileri .sbss Bölüm. Kullanmayın
ancak küçük verileri adreslemek için "r13" kaydedin. olmadıkça bu varsayılan davranıştır.
diğer -msdata seçenekler kullanılır.
-msdata=yok
-mno-sdata
Gömülü PowerPC sistemlerinde, başlatılmış tüm global ve statik verileri .veri
bölümünde ve tüm başlatılmamış veriler .bss Bölüm.
-mblock-hareket-inline-limit=num
Tüm blok hareketlerini satır içi ("memcpy" çağrıları veya yapı kopyaları gibi) küçük veya
eşittir num bayt. için minimum değer num 32 bit hedeflerde 32 bayt ve 64
64 bit hedeflerde bayt. Varsayılan değer hedefe özeldir.
-G num
Gömülü PowerPC sistemlerinde, global ve statik öğeleri şundan küçük veya eşit olarak koyun: num
baytları normal veri veya BSS bölümü yerine küçük veri veya BSS bölümlerine aktarın.
Varsayılan olarak, num 8'dır. -G num anahtarı da bağlayıcıya iletilir. Tüm modüller
aynı ile derlenmelidir -G num değeri.
-mregnames
-mno-yeni adlar
System V.4'te ve yerleşik PowerPC sistemlerinde,
sembolik formlar kullanarak montaj dili çıktısı.
-mlongcall
-mno-uzun arama
Varsayılan olarak, tüm aramaların uzakta olduğunu varsayın, böylece daha uzun ve daha pahalı
arama sırası gereklidir. Bu, 32 megabayttan daha uzak aramalar için gereklidir
(33,554,432 bayt) geçerli konumdan. kısa bir arama oluşturulur.
derleyici, aramanın o kadar uzakta olamayacağını bilir. Bu ayar şu şekilde geçersiz kılınabilir:
"kısa arama" işlev özelliği veya "#pragma uzun arama(0)".
Bazı bağlayıcılar, menzil dışı aramaları tespit edebilir ve
Sinek. Bu sistemlerde uzun aramalar gereksizdir ve daha yavaş kod üretir. Olarak
Bu yazıdan, AIX bağlayıcısı, PowerPC/64 için GNU bağlayıcısı gibi bunu yapabilir. Bilişim Teknoloji
Bu özelliğin 32-bit PowerPC sistemleri için de GNU linker'a eklenmesi planlanmaktadır.
Darwin/PPC sistemlerinde "#pragma longcall", "jbsr callee, L42", artı bir şube
ada (yapıştırma kodu). İki hedef adres, aranan kişiyi ve şubeyi temsil eder.
Adalet. Darwin/PPC bağlayıcısı ilk adresi tercih eder ve bir "bl callee" oluşturur
PPC "bl" talimatı doğrudan aranan kişiye ulaşırsa; aksi takdirde, bağlayıcı
şube adasını çağırmak için "bl L42" üretir. Şube adası eklenir
çağıran fonksiyonun gövdesi; arananın tam 32 bit adresini hesaplar ve
ona atlar.
Mach-O (Darwin) sistemlerinde, bu seçenek derleyicinin yayımını yapıştırıcıya yönlendirir.
her doğrudan arama ve Darwin bağlayıcı onu kullanıp kullanmamaya karar verir.
Gelecekte, GCC, bağlayıcının bilindiği durumlarda tüm uzun arama özelliklerini görmezden gelebilir.
tutkal üretir.
-mtls-işaretçileri
-mno-tls-işaretçileri
İşlevi belirten bir yer değiştirme ile "__tls_get_addr" çağrılarını işaretleyin (işaretlemeyin)
argüman. Yer değiştirme, bağlayıcının işlev çağrısını aşağıdakilerle güvenilir bir şekilde ilişkilendirmesini sağlar:
TLS optimizasyonu için argüman kurulum talimatları, bu da GCC'nin daha iyi olmasını sağlar
sırayı planlayın.
-pthread
ile çoklu kullanım için destek ekler. p-dişler kütüphane. Bu seçenek için bayraklar ayarlar
hem önişlemci hem de bağlayıcı.
-mrecip
-mno-reçete
Bu seçenek, karşılıklı tahminin ve karşılıklı karekök tahmininin kullanılmasını sağlar.
yerine hassasiyeti artırmak için ek Newton-Raphson adımları içeren talimatlar
kayan nokta argümanları için bölme veya karekök ve bölme yapmak. Kullanmalısın
the -fffast-matematik kullanırken seçenek -mrecip (ya da en azından -funsafe-matematik-optimizasyonları,
-sonlu-matematik-sadece, -karşılıklı-matematik ve -fno-trapping-matematiği). Şuna dikkat edin:
dizinin verimi, genellikle olmayanların veriminden daha yüksektir.
karşılıklı talimat, dizinin hassasiyeti 2 ulp'ye kadar azaltılabilir
(yani 1.0'ın tersi 0.99999994'e eşittir) karşılıklı karekökler için.
-mrecip=yeğlemek
Bu seçenek, hangi karşılıklı tahmin talimatlarının kullanılabileceğini kontrol eder. yeğlemek bir
önüne bir "!" gelebilen, virgülle ayrılmış seçenekler listesi. seçeneği tersine çevirmek için:
"all": tüm tahmin talimatlarını etkinleştir, "varsayılan": varsayılan talimatları etkinleştir,
eşdeğerdir -mrecip, "none": eşdeğer tüm tahmin talimatlarını devre dışı bırakın
-mno-reçete; "div": her ikisi için de karşılıklı yaklaşım talimatlarını etkinleştirin
ve çift hassasiyet; "divf": tek duyarlıklı karşılıklı yaklaşımı etkinleştir
Talimatlar; "divd": çift duyarlıklı karşılıklı yaklaşımı etkinleştir
Talimatlar; "rsqrt": karşılıklı karekök yaklaşım talimatlarını etkinleştir
hem tek hem de çift hassasiyet için; "rsqrtf": tek duyarlıklı karşılıklılığı etkinleştir
karekök yaklaşımı yönergeleri; "rsqrtd": çift duyarlılığı etkinleştir
karşılıklı karekök yaklaşımı yönergeleri;
Yani, örneğin, -mrecip=tümü,!rsqrtd tüm karşılıklı tahminleri sağlar
"FRSQRTE", "XSRSQRTEDP" ve "XVRSQRTEDP" talimatları dışındaki talimatlar
çift duyarlıklı karşılıklı karekök hesaplamalarını işleyen.
-mrecip-hassas
-mno-recip-hassas
Karşılıklı tahmin talimatlarının daha yüksek değerler sağladığını varsayın (varsaymayın).
PowerPC ABI tarafından zorunlu kılındığından daha hassas tahminler. seçme -mcpu=güç6,
-mcpu=güç7 or -mcpu=güç8 otomatik olarak seçer -mrecip-hassas. Çift-
hassas karekök tahmin talimatları varsayılan olarak düşük
hassas makineler, çünkü üçten sonra yakınsayan bir tahmin sağlamazlar.
adım.
-mveclibabi=tip
Harici bir kitaplık kullanarak içselleri vektörleştirmek için kullanılacak ABI türünü belirtir.
Şu anda desteklenen tek tür, IBM'in
İçselleri vektörleştirmek için Matematiksel Hızlandırma Alt Sistemi (MASS) kitaplıkları
harici kütüphaneler. GCC şu anda "acosd2", "acosf4", "acoshd2" çağrıları gönderiyor,
"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",
power2 için kod oluştururken "tanhd4" ve "tanhf7". Her ikisi de -ftree-vektörize ve
-funsafe-matematik-optimizasyonları ayrıca etkinleştirilmelidir. MASS kitaplıkları olmalıdır
bağlantı zamanında belirtilir.
-mfriz
-kıvırcık
olduğunda "friz" talimatını oluşturun (oluşturmayın). -funsafe-matematik-optimizasyonları
seçeneği, kayan noktalı değerlerin 64 bit tam sayıya yuvarlanmasını optimize etmek için kullanılır ve
kayan noktaya geri dönün. "friz" talimatı, aşağıdaki durumlarda aynı değeri döndürmez:
kayan nokta sayısı bir tam sayıya sığmayacak kadar büyük.
-mpointers-to-iç içe-işlevler
-mno-işaretçiler-iç içe-işlevler
Statik zincir kaydını (r11) ne zaman
AIX ve 64-bit Linux sistemlerinde bir işaretçi aracılığıyla bir işlev işaretçisinin çağrılması
fonksiyon adresini veren 3 kelimelik bir tanımlayıcıya işaret eder, yüklenecek TOC değeri
kayıt olmak r2, ve kayıtta yüklenecek statik zincir değeri r11.
-mpointers-to-iç içe-işlevler varsayılan olarak açıktır. İşaretçiler aracılığıyla arayamazsınız
kullanan diğer dillerde derlenmiş işlevler için iç içe işlevler veya işaretçiler
kullanıyorsanız statik zincir -mno-işaretçiler-iç içe-işlevler.
-msave-toc-dolaylı
-mno-save-toc-dolaylı
İçindekiler değerini ayrılmış yığın konumuna kaydetmek için kod oluşturun (oluşturmayın)
işlev önsözünde, işlev AIX ve 64 bit üzerindeki bir işaretçi aracılığıyla çağırırsa
Linux sistemleri. Önsözde TOC değeri kaydedilmezse, hemen önce kaydedilir.
işaretçi aracılığıyla arama. NS -mno-save-toc-dolaylı seçenek varsayılandır.
-mcompat-align-parm
-mno-uyumluluk-hizalama-parm
Yapı parametrelerini maksimum hizalama ile geçirmek için kod oluşturun (oluşturmayın)
64 bit, GCC'nin eski sürümleriyle uyumluluk için.
GCC'nin daha eski sürümleri (4.9.0'dan önceki) bir yapı parametresini hatalı şekilde hizalamadı
128 bitlik bir sınırda, bu yapı 128 bit gerektiren bir üye içerdiğinde
hizalama. Bu, GCC'nin daha yeni sürümlerinde düzeltilmiştir. Bu seçenek kullanılabilir
eski sürümleriyle derlenen işlevlerle uyumlu kod oluşturmak için
GCC.
Derleyicinin bu sürümünde, -mcompat-align-parm varsayılandır, ne zaman hariç
Linux ELFv2 ABI kullanarak.
RX Opsiyonlar
Bu komut satırı seçenekleri, RX hedefleri için tanımlanmıştır:
-m64bit-çiftler
-m32bit-çiftler
"Çift" veri türünü 64 bit yapın (-m64bit-çiftler) veya 32 bit (-m32bit-çiftler)
boyutunda. Varsayılan -m32bit-çiftler. not RX kayan nokta donanımı yalnızca çalışır
32 bit değerlerde, bu nedenle varsayılan -m32bit-çiftler.
-fpu
-nofpu
etkinleştirir (-fpu) veya devre dışı bırakır (-nofpu) RX kayan nokta donanımının kullanımı. NS
için varsayılan etkinleştirildi RX600 seri ve devre dışı RX200 serisi.
Kayan nokta yönergeleri yalnızca 32 bit kayan nokta değerleri için oluşturulur,
ancak, bu nedenle FPU donanımı, aşağıdaki durumlarda çiftler için kullanılmaz: -m64bit-çiftler seçenektir
Kullanılmış.
not Eğer -fpu o zaman seçenek etkinleştirildi -funsafe-matematik-optimizasyonları ayrıca etkin
otomatik olarak. Bunun nedeni, RX FPU talimatlarının kendilerinin güvenli olmamasıdır.
-mcpu=isim
Hedeflenecek RX CPU türünü seçer. Şu anda üç tür desteklenmektedir,
genel RX600 ve RX200 seri donanım ve özel RX610 İŞLEMCİ. Varsayılan
RX600.
Arasındaki tek fark RX600 ve RX610 olduğu RX610 desteklemiyor
"MVTIPL" talimatı.
The RX200 serisinde donanım kayan nokta birimi yoktur ve bu nedenle -nofpu etkin
bu tür seçildiğinde varsayılan olarak.
-big-endian-veri
-mlittle-endian-veri
Verileri (ancak kodu değil) büyük endian biçiminde depolayın. Varsayılan
-mlittle-endian-veri, yani verileri küçük endian biçiminde depolamak için.
-msmall-veri sınırı=N
Yerleştirilebilecek global ve statik değişkenlerin bayt cinsinden maksimum boyutunu belirtir
küçük veri alanına. Küçük veri alanını kullanmak, daha küçük ve daha hızlı sonuçlara yol açabilir
kod, ancak alanın boyutu sınırlıdır ve bunu sağlamak programcıya kalmıştır.
alan taşmaz. Ayrıca küçük veri alanı kullanıldığında RX'lerden biri
yazmaçlar (genellikle "r13") bu alana işaret eden kullanım için ayrılmıştır, bu nedenle
daha uzun süre derleyici tarafından kullanılabilir. Bu, daha yavaş ve/veya daha büyük
değişkenler bu kayıtta tutulmak yerine yığına itilirse kod.
Not, ortak değişkenler (başlatılmamış değişkenler) ve sabitler
diğer bölümlere atandıkları için küçük veri alanına yerleştirilmezler.
çıktı yürütülebilir.
Varsayılan değer, bu özelliği devre dışı bırakan sıfırdır. Not, bu özellik
daha yüksek optimizasyon seviyeleri ile varsayılan olarak etkindir (-O2 vb) nedeniyle
bir kayıt ayırmanın potansiyel olarak zararlı etkileri. Programcıya kalmış
Bu özelliğin programlarına fayda sağlayıp sağlamadığını denemek ve keşfetmek için. Görmek
açıklaması -mpid gerçek kaydın nasıl yapılacağına dair bir açıklama seçeneği
küçük veri alanı işaretçisini tutun seçilir.
-msim
-mno-sim
Simülatör çalışma zamanını kullanın. Varsayılan, libgloss panosuna özgü çalışma zamanını kullanmaktır.
-mas100-sözdizimi
-mno-as100-sözdizimi
Derleyici çıktısı oluştururken Renesas'ın AS100'ü ile uyumlu bir sözdizimi kullanın
montajcı. Bu sözdizimi GAS montajcısı tarafından da işlenebilir, ancak bazı özellikleri vardır.
kısıtlamalar, bu nedenle varsayılan olarak oluşturulmaz.
-mmax-sabit-boyut=N
içinde işlenen olarak kullanılabilecek bir sabitin bayt cinsinden maksimum boyutunu belirtir.
bir RX talimatı. RX komut seti 4'e kadar sabitlere izin verse de
komutlarda kullanılacak uzunlukta bayt varsa, daha uzun bir değer daha uzun bir değere eşittir.
talimat. Bu nedenle, bazı durumlarda boyutunu sınırlamak faydalı olabilir.
komutlarda kullanılan sabitler. Bunun yerine çok büyük sabitler
sabit bir havuza yerleştirilir ve kayıt dolaylı yoluyla başvurulur.
Değer N 0 ile 4 arasında olabilir. 0 (varsayılan) veya 4 değeri,
herhangi bir boyuttaki sabitlere izin verilir.
-mrelax
Bağlayıcı gevşemesini etkinleştirin. Bağlayıcı gevşemesi, bağlayıcının denediği bir süreçtir.
çeşitli talimatların daha kısa versiyonlarını bularak bir programın boyutunu küçültmek.
Varsayılan olarak devre dışıdır.
-nane-kayıt=N
Hızlı kesme işleyici işlevleri için ayrılacak kayıt sayısını belirtin. NS
değer N 0 ile 4 arasında olabilir. 1 değeri, "r13" kaydının rezerve edildiği anlamına gelir.
hızlı kesme işleyicilerinin özel kullanımı için. 2 yedek "r13" değeri ve
"r12". 3 yedek "r13", "r12" ve "r11" ve 4 yedek "r13" değeri
"r10" aracılığıyla. Varsayılan değer olan 0, herhangi bir kayıt ayırmaz.
-msave-acc-in-kesmeler
Kesme işleyici işlevlerinin akümülatör kaydını koruması gerektiğini belirtir.
Bu, yalnızca normal kod, örneğin akümülatör kaydını kullanıyorsa gereklidir.
çünkü 64-bit çarpma işlemi gerçekleştirir. Varsayılan, akümülatörü yoksaymaktır
çünkü bu, kesme işleyicilerini daha hızlı hale getirir.
-mpid
-mno-pid
Konumdan bağımsız verilerin oluşturulmasını sağlar. Herhangi bir erişim etkinleştirildiğinde
sabit veriler, bir kayıtta tutulan bir temel adresten bir ofset yoluyla yapılır. Bu
gerektirmeden çalışma zamanında sabit verilerin konumunun belirlenmesini sağlar.
yürütülebilir dosyanın yeri değiştirilecek, bu da sıkı gömülü uygulamalar için bir avantajdır.
hafıza kısıtlamaları Değiştirilebilen veriler bu seçenekten etkilenmez.
Bu özelliğin kullanılmasının, sabit veriler için genellikle "r13" olan bir kayıt tuttuğunu unutmayın.
temel adres. Bu, özellikle karmaşık kodlarda daha yavaş ve/veya daha büyük koda neden olabilir.
fonksiyonlar.
Sabit veri tabanı adresini tutmak için seçilen gerçek kayıt,
the -msmall-veri sınırı ve / veya -nane-kayıt komut satırı seçenekleri etkinleştirildi.
"r13" kaydı ile başlayıp aşağı doğru devam ederek, önce kayıtlar tahsis edilir.
gereksinimlerini karşılamak için -nane-kayıt, Daha sonra -mpid ve sonunda
-msmall-veri sınırı. Böylece küçük veri alanı kaydının "r8" olması mümkündür.
ikisi de olursa -nane-kayıt=4 ve -mpid komut satırında belirtilir.
Varsayılan olarak bu özellik etkin değildir. Varsayılan, aracılığıyla geri yüklenebilir -mno-pid
komut satırı seçeneği.
-mno-uyarı-çoklu-hızlı-kesmeler
-mwarn-çoklu-hızlı-kesmeler
Birden fazla hızlı kesme bulursa GCC'nin bir uyarı mesajı yayınlamasını önler
işleyici bir dosya derlerken. Varsayılan, her ekstra için bir uyarı vermektir.
hızlı kesme işleyicisi bulundu, çünkü RX böyle bir kesmeyi destekliyor.
Not: Genel GCC komut satırı seçeneği -sabitlenmiş-reg RX için özel bir önemi var
"interrupt" işlev özniteliği ile kullanıldığında bağlantı noktası. Bu nitelik, bir
hızlı kesmeleri işlemeyi amaçlayan işlev. GCC, yalnızca kayıtları kullanmasını sağlar
"r10", "r11", "r12" ve/veya "r13" ve yalnızca cihazın normal kullanımı şartıyla
ilgili kayıtlar şu şekilde sınırlandırılmıştır: -sabitlenmiş-reg or -nane-kayıt
komut satırı seçenekleri.
S / 390 ve zSerisi Opsiyonlar
Bunlar şunlardır -m S/390 ve zSeries mimarisi için tanımlanan seçenekler.
-mhard-şamandıra
-msoft-float
Kayan nokta için donanım kayan nokta yönergelerini ve kayıtlarını kullanın (kullanmayın).
nokta işlemleri. Ne zaman -msoft-float belirtilir, işlevler libgcc.a alışkın
kayan nokta işlemlerini gerçekleştirin. Ne zaman -mhard-şamandıra belirtildiğinde, derleyici
IEEE kayan nokta yönergeleri oluşturur. Bu varsayılandır.
-mhard-dfp
-mno-zor-dfp
Ondalık sayı için donanım ondalık-kayan nokta yönergelerini kullanın (kullanmayın).
kayan nokta işlemleri. Ne zaman -mno-zor-dfp belirtilir, işlevler libgcc.a vardır
ondalık kayan nokta işlemlerini gerçekleştirmek için kullanılır. Ne zaman -mhard-dfp belirtilir,
derleyici ondalık kayan noktalı donanım yönergeleri oluşturur. Bu varsayılan
için -mart=z9-ec veya daha yüksek.
-mlong-çift-64
-mlong-çift-128
Bu anahtarlar "uzun çift" tipin boyutunu kontrol eder. 64 bitlik bir boyut,
"double" tipine eşdeğer "long double" tipi. Bu varsayılandır.
-mbackchain
-mno-arka zincir
Arayanın çerçevesinin adresini arka zincir işaretçisi olarak depolayın (saklamayın)
callee'nin yığın çerçevesi. Araçları kullanarak hata ayıklamaya izin vermek için bir arka zincir gerekebilir.
DWARF 2 çağrı çerçevesi bilgilerini anlamıyorum. Ne zaman -mno-paketlenmiş-yığın olduğu
etkisi, arka zincir işaretçisi yığın çerçevesinin altında depolanır; ne zaman
-mpacked-yığın yürürlükte olduğunda, arka zincir, kelimenin en üstteki kelimesine yerleştirilir.
96/160 bayt kayıt alanı kaydetme.
Genel olarak, kod ile derlenmiş -mbackchain ile derlenmiş kodla çağrı uyumludur
-mmo-arka zincir; ancak, hata ayıklama amacıyla arka zincirin kullanımı genellikle şunları gerektirir:
tüm ikili ile inşa edildiğini -mbackchain. kombinasyonuna dikkat edin.
-mbackchain, -mpacked-yığın ve -mhard-şamandıra desteklenmiyor. Bir inşa etmek için
linux çekirdek kullanımı -msoft-float.
Varsayılan, arka zinciri korumamaktır.
-mpacked-yığın
-mno-paketlenmiş-yığın
Paketlenmiş yığın düzenini kullanın (kullanmayın). Ne zaman -mno-paketlenmiş-yığın belirtilir,
derleyici, 96/160 baytlık kayıt kaydetme alanının tüm alanlarını yalnızca kendi bilgileri için kullanır.
varsayılan amaç; kullanılmayan alanlar hala yığın alanı kaplar. Ne zaman -mpacked-yığın is
belirtilen, kayıt kaydetme yuvaları, kayıt kaydetme işleminin en üstünde yoğun bir şekilde paketlenir
alan; kullanılmayan alan başka amaçlar için yeniden kullanılır, bu da daha verimli kullanılmasına izin verir.
kullanılabilir yığın alanı. Ancak, ne zaman -mbackchain aynı zamanda yürürlüktedir, en üstte
kaydetme alanının word'ü her zaman arka zinciri depolamak için kullanılır ve iade adresi
register her zaman arka zincirin iki kelime altına kaydedilir.
Yığın çerçevesi arka zinciri kullanılmadığı sürece, kod -mpacked-yığın
ile oluşturulan kodla çağrı uyumludur -mno-paketlenmiş-yığın. Bazı FSF olmayanların
S/2.95 için GCC 390 sürümleri veya yığın çerçevesini kullanan zSeries tarafından oluşturulan kod
yalnızca hata ayıklama amacıyla değil, çalışma zamanında backchain. Böyle bir kod çağrı değil-
ile derlenen kodla uyumlu -mpacked-yığın. Ayrıca, kombinasyonuna dikkat edin.
-mbackchain, -mpacked-yığın ve -mhard-şamandıra desteklenmiyor. Bir inşa etmek için
linux çekirdek kullanımı -msoft-float.
Varsayılan, paketlenmiş yığın düzenini kullanmamaktır.
-msmall-exec
-mno-küçük-yürütme
Alt yordamı yapmak için "sütyen" talimatını kullanarak kod oluşturun (veya oluşturmayın)
aramalar. Bu, yalnızca toplam yürütülebilir dosya boyutu 64k'yi geçmezse güvenilir şekilde çalışır.
Varsayılan, bunun yerine "basr" talimatını kullanmaktır, buna sahip değildir.
sınırlama.
-m64
-m31
Ne zaman -m31 belirtildiğinde, S/390 ABI için GNU/Linux ile uyumlu kod oluşturun. Ne zaman
-m64 belirtilirse, zSeries ABI için GNU/Linux ile uyumlu kod oluşturun. Bu
GCC'nin özellikle 64 bit yönergeler oluşturmasına izin verir. İçin s390 hedefler,
varsayılan -m31Iken s390x Hedefler varsayılan olarak -m64.
-mzarch
-mesa
Ne zaman -mzarch belirtilmişse, üzerinde bulunan talimatları kullanarak kod oluşturun.
z/Mimarlık. Ne zaman -mesa belirtilirse, talimatları kullanarak kod oluşturun
ESA/390'da mevcuttur. Bunu not et -mesa ile mümkün değil -m64. oluştururken
S/390 ABI için GNU/Linux ile uyumlu kod, varsayılan -mesa. oluştururken
zSeries ABI için GNU/Linux ile uyumlu kod, varsayılan -mzarch.
-mmvcle
-mno-mvcle
Blok gerçekleştirmek için "mvcle" komutunu kullanarak kod oluşturun (veya oluşturmayın)
hareket eder. Ne zaman -mno-mvcle belirtilirse, bunun yerine bir "mvc" döngüsü kullanın. Bu varsayılan
boyut için optimize etmedikçe.
-mdebug
-mno-hata ayıklama
Derlerken ek hata ayıklama bilgilerini yazdırın (veya yazdırmayın). Varsayılan
hata ayıklama bilgilerini yazdırmamak için.
-mart=işlemci tipi
Üzerinde çalışan kod oluşturun işlemci tipitemsil eden bir sistemin adıdır.
belirli işlemci türü. için olası değerler işlemci tipi vardır g5, g6, z900, z990, z9-109,
z9-ec, z10, z196, ve zEC12. adresinde bulunan talimatları kullanarak kod oluştururken
z/Architecture, varsayılan -mart=z900. Aksi takdirde, varsayılan -mart=g5.
-mtune=işlemci tipi
Ayarla işlemci tipi ABI hariç, oluşturulan kodla ilgili geçerli olan her şey
ve kullanılabilir yönergeler kümesi. Listesi işlemci tipi değerler için aynıdır
-Mart. Varsayılan, kullanılan değerdir -Mart.
-mtpf-izi
-mno-tpf-izleme
Rutinleri izlemek için TPF OS'ye özel dallara ekleyen (eklemeyen) kod oluşturun
işletim sisteminde. için derleme yaparken bile bu seçenek varsayılan olarak kapalıdır.
TPF işletim sistemi.
-mfused-deli
-mno-kaynaşmış-madd
Kayan nokta çarpmasını kullanan (kullanmayan) kod oluşturun ve biriktirin
Talimatlar. Bu talimatlar, donanım kayan noktası varsa varsayılan olarak oluşturulur.
kullanıldı.
-mwarn-çerçeve boyutu=çerçeve boyutu
Geçerli işlev verilen çerçeve boyutunu aşarsa bir uyarı verir. çünkü bu
derleme zamanı kontrolü, program çalışırken gerçek bir sorun olması gerekmez. Bilişim Teknoloji
büyük olasılıkla yığın taşmasına neden olan işlevleri tanımlamaya yöneliktir. Bu
linux çekirdeği gibi sınırlı yığın boyutuna sahip bir ortamda kullanılmak için kullanışlıdır.
-mwarn-dinamik yığın
İşlev "alloca" çağırıyorsa veya dinamik olarak boyutlandırılmış diziler kullanıyorsa bir uyarı yayınlayın. Bu
sınırlı bir yığın boyutuyla genellikle kötü bir fikirdir.
-mstack-guard=yığın koruyucu
-mstack-boyutu=yığın boyutu
Bu seçenekler sağlanırsa, S/390 arka ucu,
yığın boyutu ise bir tuzağı tetikleyen işlev prologu yığın koruyucu üzerindeki bayt
yığın boyutu (S/390'daki yığının aşağı doğru büyüdüğünü unutmayın). Eğer yığın koruyucu
seçenek, derlenen çerçeve boyutundan 2'nin en küçük gücü hariç tutulur.
fonksiyon seçilir. Bu seçenekler, yığın hata ayıklamaya yardımcı olmak için kullanılmak üzere tasarlanmıştır.
taşma sorunları Ek olarak yayılan kod, yalnızca çok az ek yüke neden olur ve
dolayısıyla daha yüksek performans olmadan üretim benzeri sistemlerde de kullanılabilir
bozulma. Verilen değerler 2'nin tam katı olmalıdır ve yığın boyutu olmalı
daha büyük yığın koruyucu 64k'yı aşmadan. Verimli olmak için ekstra
kodu, yığının değere hizalanmış bir adreste başladığını varsayar.
tarafından verildi yığın boyutu. yığın koruyucu seçeneği yalnızca ile birlikte kullanılabilir
yığın boyutu.
-mhotpatch=ön yarım kelimeler,yarı kelimeler
Hotpatch seçeneği etkinleştirilirse, "hot-patch" işlevi için bir prolog oluşturulur.
derleme birimindeki tüm işlevler. İşlev etiketinin başına verilen
iki baytlık NOP komutlarının sayısı (ön yarım kelimeler, maksimum 1000000). Sonra
etiket, 2 * yarı kelimeler baytlar, en büyük NOP benzeri talimatlar kullanılarak eklenir
mimari izin verir (maksimum 1000000).
Her iki bağımsız değişken de sıfırsa, etkin düzeltme devre dışı bırakılır.
Bu seçenek, "hotpatch" özniteliğine sahip bireysel işlevler için geçersiz kılınabilir.
Puan Opsiyonlar
Bu seçenekler Puan uygulamaları için tanımlanmıştır:
-meb
Big-endian modu için kod derleyin. Bu varsayılandır.
-mel
Little-endian modu için kod derleyin.
-mnhwloop
"bcnz" talimatlarının oluşturulmasını devre dışı bırakın.
- muls
Hizalanmamış yük oluşturmayı etkinleştirin ve talimatları saklayın.
-mmac
Çoklu biriktirme talimatlarının kullanımını etkinleştirin. Varsayılan olarak devre dışıdır.
-mscore5
SCORE5'i hedef mimari olarak belirtin.
-mscore5u
Hedef mimarinin SCORE5U'sunu belirtin.
-mscore7
SCORE7'yi hedef mimari olarak belirtin. Bu varsayılandır.
-mscore7d
SCORE7D'yi hedef mimari olarak belirtin.
SH Opsiyonlar
Bunlar -m SH uygulamaları için seçenekler tanımlanmıştır:
-m1 SH1 için kod oluşturun.
-m2 SH2 için kod oluşturun.
-m2e
SH2e için kod oluşturun.
-m2a-nofpu
FPU'suz SH2a için veya SH2a-FPU için şu şekilde kod oluşturun:
kayan nokta birimi kullanılmaz.
-m2a-tek-sadece
SH2a-FPU için, çift duyarlıklı kayan nokta olmayacak şekilde kod oluşturun.
işlemler kullanılır.
-m2a-tek
Kayan nokta biriminin tek duyarlıklı olduğunu varsayarak SH2a-FPU için kod oluşturun
varsayılan olarak mod.
-m2a
Kayan nokta biriminin çift hassasiyette olduğunu varsayarak SH2a-FPU için kod oluşturun
varsayılan olarak mod.
-m3 SH3 için kod oluşturun.
-m3e
SH3e için kod oluşturun.
-m4-nofpu
Kayan nokta birimi olmadan SH4 için kod oluşturun.
-m4-yalnızca
Yalnızca tekli noktayı destekleyen kayan nokta birimiyle SH4 için kod oluşturun.
hassas aritmetik.
-m4-tek
Kayan nokta biriminin tek duyarlıklı modda olduğunu varsayarak SH4 için kod oluşturun
varsayılan olarak.
-m4 SH4 için kod oluşturun.
-m4-100
SH4-100 için kod oluşturun.
-m4-100-nofpu
SH4-100 için kayan nokta birimi kullanılmayacak şekilde kod oluşturun.
-m4-100-tek
Kayan nokta biriminin tek duyarlıklı modda olduğunu varsayarak SH4-100 için kod oluşturun
varsayılan olarak.
-m4-100-sadece tek
SH4-100 için çift duyarlıklı kayan nokta olmayacak şekilde kod oluşturun
işlemler kullanılır.
-m4-200
SH4-200 için kod oluşturun.
-m4-200-nofpu
SH4-200 için, kayan nokta biriminin olmadığı bir şekilde kod oluşturun.
Kullanılmış.
-m4-200-tek
Kayan nokta biriminin tek duyarlıklı modda olduğunu varsayarak SH4-200 için kod oluşturun
varsayılan olarak.
-m4-200-sadece tek
SH4-200 için çift duyarlıklı kayan nokta olmayacak şekilde kod oluşturun
işlemler kullanılır.
-m4-300
SH4-300 için kod oluşturun.
-m4-300-nofpu
SH4-300 için, kayan nokta biriminin olmadığı bir şekilde kod oluşturun.
Kullanılmış.
-m4-300-tek
SH4-300 için çift duyarlıklı kayan nokta olmayacak şekilde kod oluşturun
işlemler kullanılır.
-m4-300-sadece tek
SH4-300 için çift duyarlıklı kayan nokta olmayacak şekilde kod oluşturun
işlemler kullanılır.
-m4-340
SH4-340 için kod oluşturun (MMU yok, FPU yok).
-m4-500
SH4-500 (FPU yok) için kod oluşturun. Geçer -isa=sh4-nofpu montajcıya.
-m4a-nofpu
SH4al-dsp için veya bir SH4a için, kayan noktanın
birim kullanılmaz.
-m4a-tek-sadece
SH4a için, çift duyarlıklı kayan nokta olmayacak şekilde kod oluşturun.
işlemler kullanılır.
-m4a-tek
Kayan nokta biriminin tek duyarlıklı olduğunu varsayarak SH4a için kod oluşturun
varsayılan olarak mod.
-m4a
SH4a için kod oluşturun.
-m4al
Aynısı -m4a-nofpu, dolaylı olarak geçmesi dışında -dsp montajcıya. KİK
şu anda herhangi bir DSP talimatı oluşturmaz.
-m5-32medya
SHmedia için 32 bit kod oluşturun.
-m5-32media-nofpu
SHmedia için kayan nokta birimi olmayacak şekilde 32 bit kod oluşturun.
Kullanılmış.
-m5-64medya
SHmedia için 64 bit kod oluşturun.
-m5-64media-nofpu
SHmedia için kayan nokta birimi olmayacak şekilde 64 bit kod oluşturun.
Kullanılmış.
-m5-kompakt
SHcompact için kod oluşturun.
-m5-kompakt-nofpu
SHcompact için kayan nokta birimi kullanılmayacak şekilde kod oluşturun.
-mb Big-endian modunda işlemci için kod derleyin.
-ml Küçük endian modunda işlemci için kod derleyin.
-mdalign
Hizalama, 64 bit sınırlarda iki katına çıkar. Bunun arama kurallarını değiştirdiğini unutmayın,
ve bu nedenle standart C kitaplığındaki bazı işlevler, yeniden derlemediğiniz sürece çalışmaz.
ilk onunla -mdalign.
-mrelax
Mümkün olduğunda, bağlantı zamanında bazı adres referanslarını kısaltın; bağlayıcı seçeneğini kullanır
-Rahatlayın.
-bigtable
"Switch" tablolarında 32 bit ofsetler kullanın. Varsayılan, 16 bitlik ofsetleri kullanmaktır.
-mbittoplar
SH2A'da bit işleme talimatlarının kullanımını etkinleştirin.
-mfmovd
"fmovd" komutunun kullanımını etkinleştirin. Kontrol etmek -mdalign hizalama kısıtlamaları için.
-mrenesas
Renesas tarafından tanımlanan çağrı kurallarına uyun.
-mno-renesas
Renesas sözleşmelerinden önce GCC için tanımlanan çağrı kurallarına uyun
Mevcuttu. Bu seçenek, SH takım zincirinin tüm hedefleri için varsayılandır.
-mnomacsave
"MAC" kaydını çağrı engellendi olarak işaretleyin. -mrenesas verilmiş.
-mieee
-mno-ieee
İşlemi etkileyen kayan nokta karşılaştırmalarının IEEE uyumluluğunu kontrol edin
Bir karşılaştırma sonucunun sırasız olduğu durumlarda. Varsayılan olarak -mieee is
dolaylı olarak etkinleştirildi. Eğer -ffinite-matematik-sadece etkin -mno-ieee dolaylı olarak ayarlanır,
bu da daha hızlı kayan noktalı daha büyük eşit ve daha az eşit karşılaştırmalarla sonuçlanır. NS
örtük ayarlar, aşağıdakilerden biri belirtilerek geçersiz kılınabilir -mieee or -mno-ieee.
-minline-ic_invalidate
İç içe işlevi ayarladıktan sonra talimat önbellek girişlerini geçersiz kılmak için satır içi kod
trambolinler. Bu seçeneğin aşağıdaki durumlarda etkisi yoktur: -müzer modu yürürlükte ve seçilen
kod oluşturma seçeneği (örn. -m4) "icbi" talimatının kullanımına izin vermez.
Seçilen kod oluşturma seçeneği "icbi" kullanımına izin vermiyorsa
talimat ve -müzer modu geçerli değil, satır içi kod
komut önbelleği adres dizisi, doğrudan bir ilişkisel yazma ile. Bu sadece
çalışma zamanında ayrıcalıklı mod gerektirir, ancak önbellek satırı
TLB aracılığıyla eşlendi ve eşlenmemiş hale geldi.
-missize
Montaj kodunda talimat boyutunu ve yerini boşaltın.
-mpadstruct
Bu seçenek kullanımdan kaldırılmıştır. Yapıları 4 baytın katlarına kadar doldurur;
SH ABI ile uyumlu değil.
-matomik-model=model
Atomik işlemlerin modelini ve ek parametreleri virgülle ayrılmış olarak ayarlar
liste. Atomik yerleşik işlevlerle ilgili ayrıntılar için bkz. __atomik yerleşikler.
aşağıdaki modeller ve parametreler desteklenir:
Yok
Derleyici tarafından oluşturulan atomik dizileri devre dışı bırakın ve atom için kitaplık çağrıları yayınlayın
operasyonlar. Hedef "sh*-*-linux*" değilse bu varsayılandır.
yumuşak gusa
Atomik yapı için GNU/Linux uyumlu gUSA yazılımı atomik dizileri oluşturun.
fonksiyonlarda. Üretilen atomik diziler, ek destek gerektirir.
sistemin kesinti/istisna işleme kodudur ve yalnızca SH3* ve
SH4* tek çekirdekli sistemler. Bu seçenek, hedef seçildiğinde varsayılan olarak etkindir.
"sh*-*-linux*" ve SH3* veya SH4*. Hedef SH4A olduğunda, bu seçenek aynı zamanda
için "movli.l" ve "movco.l" donanım atomik talimatlarını kısmen kullanır.
olmadığı sürece daha verimli kod oluşturun sıkı belirtilir.
yumuşak tcb
İş parçacığı kontrolünde bir değişken kullanan yazılım atomik dizileri oluşturun
engellemek. Bu, SH1* üzerinde de kullanılabilen gUSA dizilerinin bir varyasyonudur.
ve SH2* hedefleri. Üretilen atomik diziler, aşağıdakilerden ek destek gerektirir:
sistemin kesme/istisna işleme kodudur ve yalnızca
tek çekirdekli sistemler. Bu modeli kullanırken, gbr-ofset= parametre olmalı
de belirtilmiştir.
yumuşak maske
Ayarlayarak kesintileri geçici olarak devre dışı bırakan yazılım atomik dizileri oluşturun
"SR.IMASK = 1111". Bu model yalnızca program ayrıcalıklı modda çalıştığında çalışır
ve yalnızca tek çekirdekli sistemler için uygundur. dan ek destek
sistemin kesme/istisna işleme kodu gerekli değildir. Bu model
hedef "sh*-*-linux*" ve SH1* veya SH2* olduğunda varsayılan olarak etkinleştirilir.
hard-llcs
"movli.l" ve "movco.l" talimatlarını kullanarak donanım atomik dizileri oluşturun
bir tek. Bu yalnızca SH4A'da mevcuttur ve çok çekirdekli sistemler için uygundur.
Donanım talimatları yalnızca 32 bit atomik değişkenleri desteklediğinden, 8'e erişim
veya 16 bit değişkenler 32 bit erişimlerle öykünür. Bununla derlenen kod
seçenek ayrıca diğer yazılım atom modeliyle de uyumlu olacaktır
SH4A sisteminde yürütülürse kesme/istisna işleme sistemleri. Ek olarak
sistemin kesinti/istisna işleme kodundan destek gerekli değildir
bu model için.
gbr-ofset=
Bu parametre, thread kontrolündeki değişkenin ofsetini bayt cinsinden belirtir.
olduğunda üretilen atomik diziler tarafından kullanılması gereken blok yapı
yumuşak tcb modeli seçilmiştir. Diğer modeller için bu parametre yok sayılır.
Belirtilen değer, dördün katı bir tam sayı olmalı ve 0-1020 aralığında olmalıdır.
sıkı
Bu parametre, birden çok atom modelinin karışık kullanımını engeller.
uyumlu olacaktır ve derleyicinin
sadece belirtilen model
-mtas
"__atomic_test_and_set" için "tas.b" işlem kodunu oluşturun. Buna bağlı olarak dikkat edin
belirli donanım ve yazılım yapılandırması bu, genel performansı düşürebilir
"tas.b" talimatı tarafından ima edilen işlenen önbellek satırı temizlemeleri nedeniyle. Açık
çok çekirdekli SH4A işlemciler için "tas.b" talimatı dikkatli kullanılmalıdır, çünkü
belirli önbellek yapılandırmaları için veri bozulmasına neden olabilir.
-mprefergot
Konumdan bağımsız kod oluştururken, Global Offset'i kullanarak işlev çağrıları yayınlayın
Prosedür Bağlantı Tablosu yerine Tablo.
-müzer modu
-mno-kullanıcı modu
Derleyicinin ayrıcalıklı mod kodu oluşturmasına izin vermeyin (izin vermeyin). belirtme
-müzer modu ayrıca ima eder -mno-inline-ic_invalidate satır içi kod işe yaramazsa
kullanıcı modunda. -müzer modu hedef "sh*-*-linux*" olduğunda varsayılandır. Eğer
hedef SH1* veya SH2* -müzer modu kullanıcı modu olmadığı için etkisi yoktur.
-çok maliyet=numara
Çarpma sayısı için varsayılacak maliyeti ayarlayın.
-mdiv=strateji
Tamsayılı bölme işlemleri için kullanılacak bölme stratejisini ayarlayın. SHmedia için
strateji şunlardan biri olabilir:
fp İşlemi kayan noktada gerçekleştirir. Bu çok yüksek bir gecikme süresine sahiptir, ancak
yalnızca birkaç talimat, bu nedenle kodunuz yeterliyse bu iyi bir seçim olabilir
derleyicinin kayan noktayı programlamasına izin vermek için kolayca kullanılabilir ILP
diğer talimatlarla birlikte talimatlar. Sıfıra bölme neden olur
kayan nokta istisnası.
inv Bölenin tersini hesaplamak için tamsayı işlemlerini kullanır ve sonra
temettü ile tersini çarpar. Bu strateji, ÖAM ve kaldırmaya izin verir
ters hesaplama. Sıfıra bölme, belirtilmemiş bir sonuç hesaplar,
ama tutmuyor.
yatırım:minlat
Bir varyantı inv CSE veya kaldırma fırsatları bulunmadığında veya
tüm operasyon aynı yere çekildi, operasyonun son aşamaları
ters hesaplama genel azaltmak için son çarpma ile iç içedir
gecikme, birkaç talimat daha kullanma pahasına ve böylece daha az
diğer kodlarla zamanlama fırsatları.
çağrı
Genellikle aşağıdakileri uygulayan bir kitaplık işlevini çağırır: yatırım:minlat strateji. Bu
"m5-*media-nofpu" derlemeleri için yüksek kod yoğunluğu verir.
call2
Aynı kitaplık işlevinin farklı bir giriş noktasını kullanır, burada bir
bir arama tablosuna yönelik işaretçi zaten kurulmuş, bu da işaretçi yükünü ortaya çıkarıyor
CSE ve kod kaldırma optimizasyonlarına.
inv:çağrı
inv:çağrı2
env:fp
Kullan inv ilk kod üretimi için algoritma, ancak kod kalırsa
optimize edilmemiş, geri dön çağrı, call2ya da fp stratejileri sırasıyla. Bunu not et
sıfıra bölmenin potansiyel olarak kapana kıstırıcı yan etkisi, ayrı bir
talimat, bu nedenle tüm tamsayı talimatlarının kaldırılması mümkündür,
ancak yan etkinin işareti olduğu yerde kalır. için bir rekombinasyon
bu durumda kayan nokta işlemleri veya bir çağrı mümkün değildir.
inv20u
inv20l
Varyantları yatırım:minlat strateji. Ters hesaplamanın yapılması durumunda
çarpmadan ayrılmazlar, temettüsünün sığdığı bölmeyi hızlandırırlar
bir dizi atlamak için bir test ekleyerek 20 bite (varsa artı işareti)
bu durumdaki işlemler; bu test, daha büyük temettüler durumunu yavaşlatır.
inv20u bu kadar küçük bir temettü durumunun olası olmadığını varsayar ve inv20l
muhtemel olduğunu varsayar.
SHmedia dışındaki hedefler için strateji şunlardan biri olabilir:
çağrı div1
için "div1" tek adımlı bölme talimatını kullanan bir kitaplık işlevini çağırır.
işlemi gerçekleştirin. Sıfıra bölme, belirtilmemiş bir sonucu hesaplar ve
tuzak değil. Bu, SH4, SH2A ve SHcompact dışında varsayılandır.
çağrı-fp
İşlemi çift duyarlıklı yüzer biçimde gerçekleştiren bir kitaplık işlevini çağırır
puan. Sıfıra bölme, kayan nokta istisnasına neden olur. Bu varsayılan
FPU ile SHcompact için. İki katı olmayan hedefler için bunu belirtmek
hassas FPU varsayılan olarak "call-div1" olacaktır.
çağrı masası
Küçük bölenler için bir arama tablosu kullanan bir kitaplık işlevi çağırır ve
Daha büyük bölenler için büyük/küçük harf ayrımına sahip "div1" komutu. Sıfıra bölüm
belirtilmemiş bir sonuç hesaplar ve bindirmez. Bu, SH4 için varsayılandır.
Dinamik kaydırma talimatlarına sahip olmayan hedefler için bunu belirtmek,
varsayılan olarak "call-div1".
Bir bölünme stratejisi belirlenmediğinde, varsayılan strateji seçilecektir.
mevcut hedefe göre. SH2A için varsayılan strateji "divs" kullanmaktır ve
kütüphane fonksiyon çağrıları yerine "divu" talimatları.
-maccumulate-giden-arglar
İşlev prologunda etraftan ziyade giden argümanlar için bir kez yer ayırın
her arama Genellikle performans ve boyut için faydalıdır. Gevşemek için de gerekli
yığın çerçevesini koşullu kod etrafında değiştirmekten kaçınmak için.
-mdivsi3_libfunc=isim
32 bit işaretli bölme için kullanılan kitaplık işlevinin adını şu şekilde ayarlayın: isim. Bu
yalnızca kullanılan adı etkiler çağrı ve inv:çağrı bölünme stratejileri ve
derleyici hala bu gibi aynı girdi/çıktı/kapalı kayıt kümelerini bekliyor
seçenek mevcut değildi.
-mfixed-aralık=kayıt aralığı
Verilen kayıt aralığını sabit kayıtlar olarak ele alan kod oluşturun. Sabit bir kayıt
kayıt ayırıcının kullanamayacağı bir tanesidir. Bu, çekirdeği derlerken kullanışlıdır.
kod. Bir kayıt aralığı, bir tire ile ayrılmış iki kayıt olarak belirtilir. çoklu
kayıt aralıkları virgülle ayrılarak belirtilebilir.
-mindexed-adresleme
SHmedia32/SHcompact için dizinlenmiş adresleme modunun kullanımını etkinleştirin. Bu sadece
donanım ve/veya işletim sistemi, dizine eklenenler için 32-bit sarma semantiği uygularsa güvenlidir.
adresleme modu Mimari, 64 bitlik işlemcilerin uygulanmasına izin verir
İşletim sisteminin 32 bit adresleme almak için kullanabileceği, ancak mevcut donanım olmadığı için MMU
uygulama, dizinlenmiş adresleme modunu güvenli hale getirmek için bunu veya başka herhangi bir yolu destekler
32 bit ABI'de kullanmak için varsayılan -mno-endeksli-adresleme.
-mgettrcost=numara
"gettr" talimatı için varsayılan maliyeti şu şekilde ayarlayın: numara. Varsayılan 2 ise
-mpt-sabit yürürlükte, aksi takdirde 100.
-mpt-sabit
"pt*" talimatlarının yakalanmayacağını varsayın. Bu genellikle daha iyi planlanmış kod üretir,
ancak mevcut donanımda güvenli değil. Mevcut mimari tanımı diyor ki
"ptabs" ve "ptrel", hedef 3 ile ve 3 olduğunda tuzak.
bu talimatların önceden planlanmasını güvensiz hale getirmenin kasıtsız etkisi
daldırın veya onları bir döngüden çıkarın. Örneğin, "__do_global_ctors", bir parçası
libgcc program başlangıcında yapıcıları çalıştıran, bir listedeki işlevleri çağıran
-1 ile sınırlandırılmıştır. İle -mpt-sabit seçeneği, "ptabs" testten önce yapılır
-1'e karşı. Bu, tüm kurucuların biraz daha hızlı çalıştığı anlamına gelir, ancak
döngü listenin sonuna gelir, "ptabs" bir dosyaya -1 yüklediği için program çöker.
hedef kayıt.
Bu seçenek, mevcut mimariyi uygulayan herhangi bir donanım için güvenli olmadığından
belirtim, varsayılan -mno-pt-sabit. ile açıkça belirtilmedikçe
-mgettrcost, -mno-pt-sabit ayrıca ima eder -mgettrcost=100; bu kayıttan caydırır
Sıradan tamsayıları depolamak için hedef kayıtları kullanmaktan ayırma.
-minvalid-semboller
Sembollerin geçersiz olabileceğini varsayın. Derleyici tarafından oluşturulan sıradan fonksiyon sembolleri
"movi"/"shori"/"ptabs" veya "movi"/"shori"/"ptrel" ile yüklemek için her zaman geçerlidir, ancak
montajcı ve/veya bağlayıcı hileleri ile neden olan semboller oluşturmak mümkündür.
Yakalamak için "ptabs" veya "ptrel". Bu seçenek yalnızca şu durumlarda anlamlıdır: -mno-pt-sabit olduğu
Efekt. Temel bloklar arası CSE'yi, kaldırmayı ve çoğu sembolün zamanlamasını önler
yükler. Varsayılan -mno-geçersiz-semboller.
-mbranch-maliyet=num
üstlenmek num bir şube talimatının maliyeti olmak. Daha yüksek sayılar derleyiciyi yapar
mümkünse daha fazla şubesiz kod oluşturmaya çalışın. Belirtilmemişse değer
derlenmekte olan işlemci türüne bağlı olarak seçilir.
-mzdcbranch
-mno-zdcbranch
Sıfır yer değiştirme koşullu dal talimatlarının "bt" olduğunu varsayın (varsaymayın) ve
"bf" hızlıdır. Eğer -mzdcbranch belirtilirse, derleyici sıfırı tercih etmeye çalışacaktır.
yer değiştirme şube kodu dizileri. Bu, kod oluşturulurken varsayılan olarak etkindir
SH4 ve SH4A için. Belirterek açıkça devre dışı bırakılabilir -mno-zdcbranch.
-mcbranchdi
"cbranchdi4" talimat düzenini etkinleştirin.
-mcmpeqdi
"cmpeqdi_t" talimat desenini yayınlasanız bile -mcbranchdi yürürlüktedir.
-mfused-deli
-mno-kaynaşmış-madd
Kayan nokta çarpmasını kullanan (kullanmayan) kod oluşturun ve biriktirin
Talimatlar. Bu talimatlar, donanım kayan noktası varsa varsayılan olarak oluşturulur.
kullanıldı. Makineye bağlı -mfused-deli seçenek artık makineyle eşlenmiştir.
bağımsız -ffp-kontrat=hızlı seçenek ve -mno-kaynaşmış-madd ile eşlendi
-ffp-kontrat=kapalı.
-mfsca
-mno-fsca
Derleyicinin sinüs ve kosinüs için "fsca" talimatını yayınlamasına izin verin veya vermeyin
yaklaşımlar. "-mfsca" seçeneği ile birlikte kullanılmalıdır.
"-funsafe-matematik optimizasyonları". için kod oluşturulurken varsayılan olarak etkindir.
SH4A. "-mno-fsca" kullanmak, sinüs ve kosinüs yaklaşımlarını devre dışı bırakır.
"-funsafe-matematik optimizasyonları" etkindir.
-mfsrra
-mno-fsrra
Derleyicinin karşılıklı kare için "fsrra" talimatını yayınlamasına izin verin veya izin vermeyin
kök yaklaşımları. "-mfsrra" seçeneği ile birlikte kullanılmalıdır.
"-funsafe-matematik optimizasyonları" ve "-ffinite-yalnızca matematik". Varsayılan olarak etkinleştirildiğinde
SH4A için kod oluşturma. "-mno-fsrra" kullanmak karşılıklı karekökü devre dışı bırakır
"-funsafe-matematik-optimizasyonları" ve "-ffinite-yalnızca matematik" içinde olsa bile yaklaşımlar
etkisi.
-impretend-cmove
Koşullu hareket talimatı için sıfır yer değiştirme koşullu dalları tercih edin
desenler. Bu, SH4 işlemcide daha hızlı kod ile sonuçlanabilir.
Solaris 2 Opsiyonlar
Bunlar -m seçenekler Solaris 2'de desteklenir:
-mimpur-metin
-mimpur-metin, ek olarak kullanılan -paylaşılan, derleyiciye geçmemesini söyler -z metin için
paylaşılan bir nesneyi bağlarken bağlayıcı. Bu seçeneği kullanarak konum-
bağımlı kod, paylaşılan bir nesneye dönüştürülür.
-mimpur-metin "yer değiştirmelerin tahsis edilebilir ancak yazılamaz durumda kalmasını" bastırır
bölümler" linker hata mesajı. Ancak, gerekli yer değiştirmeler kopyalamayı tetikler.
yazın ve paylaşılan nesne aslında süreçler arasında paylaşılmaz. Onun yerine
kullanma -mimpur-metin, tüm kaynak kodunu ile derlemelisin -fpic or -fPIC.
Bu anahtarlar, Solaris 2'de yukarıdakilere ek olarak desteklenir:
-pthread'ler
POSIX iş parçacığı kitaplığını kullanarak çoklu iş parçacığı desteği ekleyin. Bu seçenek ayarlar
hem önişlemci hem de bağlayıcı için bayraklar. Bu seçenek iş parçacığını etkilemez
derleyici tarafından üretilen nesne kodunun veya onunla sağlanan kitaplıkların güvenliği.
-pthread
Bu eş anlamlısı -pthread'ler.
SPARC Opsiyonlar
Bunlar -m seçenekler SPARC'ta desteklenir:
-mno-app-regs
-mapp-reg'ler
Belirtmek -mapp-reg'ler 2'den 4'e kadar olan global kayıtları kullanarak çıktı üretmek için
SPARC SVR4 ABI, uygulamalar için saklıdır. Global register 1 gibi, her global
2'den 4'e kadar olan kayıtlar daha sonra
işlev çağrıları. Bu varsayılandır.
Bir miktar performans kaybı pahasına tamamen SVR4 ABI uyumlu olmak için şunu belirtin:
-mno-app-regs. Bu seçenek ile kütüphaneleri ve sistem yazılımlarını derlemelisiniz.
-mflat
-mno-düz
İle -mflat, derleyici kaydetme/geri yükleme talimatları oluşturmaz ve bir
"düz" veya tek kayıt penceresi modeli. Bu model normal ile uyumludur.
pencere modelini kaydedin. Yerel kayıtlar ve giriş kayıtları (0--5) hala
"çağrı kaydedilmiş" kayıtlar olarak kabul edilir ve gerektiğinde yığına kaydedilir.
İle -mno-düz (varsayılan), derleyici kaydetme/geri yükleme yönergeleri oluşturur (
yaprak işlevleri için). Bu normal çalışma modudur.
-mfpu
-mhard-şamandıra
Kayan nokta talimatları içeren çıktı oluşturun. Bu varsayılandır.
-mno-fpu
-msoft-float
Kayan nokta için kitaplık çağrılarını içeren çıktı oluşturun. Uyarı: gerekli
kitaplıklar tüm SPARC hedefleri için mevcut değildir. Normalde tesislerin
makinenin olağan C derleyicisi kullanılır, ancak bu doğrudan çapraz olarak yapılamaz.
derleme. Uygun kütüphane sağlamak için kendi düzenlemelerinizi yapmalısınız.
çapraz derleme için işlevler. Gömülü hedefler sparc-*-aout ve spaclite-*-*
yazılım kayan nokta desteği sağlar.
-msoft-float çıktı dosyasındaki çağrı kuralını değiştirir; bu nedenle, sadece
derlerseniz faydalı herşey Bu seçeneğe sahip bir programın Özellikle, yapmanız gereken
derlemek libgcc.a, GCC ile birlikte gelen kitaplık, -msoft-float bunun için
çalışmak.
-mhard-dörtlü-şamandıra
Dört sözcüklü (uzun çift) kayan nokta yönergelerini içeren çıktı oluşturun.
-msoft-dörtlü-şamandıra
Dört sözcüklü (uzun çift) kayan nokta için kitaplık çağrıları içeren çıktı oluşturun
Talimatlar. Çağrılan işlevler, SPARC ABI'de belirtilen işlevlerdir. bu
Varsayılan.
Bu yazı itibariyle, donanım desteğine sahip hiçbir SPARC uygulaması bulunmamaktadır.
dört kelimelik kayan nokta talimatları. Hepsi biri için bir tuzak işleyicisi çağırır.
bu talimatları ve ardından tuzak işleyicisi talimatın etkisini taklit eder.
Tuzak işleyici ek yükü nedeniyle, bu, ABI kitaplığını çağırmaktan çok daha yavaştır.
rutinler. Böylece -msoft-dörtlü-şamandıra seçenek varsayılandır.
-mno-hizasız-çiftler
-düzensiz-çiftler
Çiftlerin 8 baytlık hizalamaya sahip olduğunu varsayalım. Bu varsayılandır.
İle -düzensiz-çiftler, GCC, çiftlerin yalnızca 8 baytlık hizalamaya sahip olduğunu varsayar.
başka bir türde yer alıyorsa veya mutlak bir adresleri varsa. Aksi takdirde
4 baytlık hizalamaları olduğunu varsayar. Bu seçeneğin belirtilmesi bazı nadir durumlardan kaçınır.
diğer derleyiciler tarafından oluşturulan kodla uyumluluk sorunları. varsayılan değil
çünkü özellikle kayan noktalı kod için performans kaybına neden olur.
-muser-modu
-mno-kullanıcı modu
Yalnızca süpervizör modunda çalışabilen kod oluşturmayın. Bu sadece şunlar için geçerlidir:
LEON3 işlemcisi için yayınlanan "casa" talimatı. Varsayılan
-mno-kullanıcı modu.
-mno-daha hızlı-yapılar
-mfaster-yapıları
İle -mfaster-yapıları, derleyici yapıların 8 bayt olması gerektiğini varsayar.
hizalama. Bu, kopyalar için "ldd" ve "std" komut çiftlerinin kullanılmasını sağlar.
yapı atamasında, iki kat daha fazla "ld" ve "st" çifti yerine. Ancak
bu değiştirilmiş hizalamanın kullanılması SPARC ABI'yi doğrudan ihlal eder. Böylece amaçlanan
yalnızca geliştiricinin elde ettikleri kodun doğru olduğunu kabul ettiği hedeflerde kullanım içindir.
doğrudan ABI kurallarına uygun değildir.
-mcpu=cpu_type
Komut seti, kayıt seti ve komut programlama parametrelerini ayarlayın.
makine tipi cpu_type. için desteklenen değerler cpu_type vardır v7, selvi, v8, süper parc,
hiperpark, leon, leon3, leon3v7, sparlit, f930, f934, spaclite86x, kıvılcım,
tsc701, v9, ultraspark, ultrasparc3, Niyagara, Niagara2, Niagara3 ve Niagara4.
Yerel Solaris ve GNU/Linux araç zincirleri de değeri destekler yerli, hangisini seçer
ana bilgisayar işlemcisi için en iyi mimari seçeneği. -mcpu=yerel eğer etkisi yoktur
GCC işlemciyi tanımıyor.
Varsayılan talimat zamanlama parametreleri, bir
mimari ve bir uygulama değil. Bunlar v7, v8, sparlit, kıvılcım, v9.
Desteklenen her bir mimarinin ve desteklenen uygulamalarının listesi aşağıdadır.
v7 selvi, leon3v7
v8 süpersparc, hipersparc, leon, leon3
sparlit
f930, f934, sraclite86x
kıvılcım
tsc701
v9 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
Varsayılan olarak (aksi şekilde yapılandırılmadıkça), GCC, V7 varyantı için kod oluşturur.
SPARC mimarisi. İle birlikte -mcpu=selvi, derleyici ayrıca için optimize eder
SPARCStation/SPARCServer 7xx serisinde kullanıldığı şekliyle Cypress CY602C3 yongası. Bu
eski SPARCSstation 1, 2, IPX vb. için de uygundur.
İle -mcpu=v8, GCC, SPARC mimarisinin V8 varyantı için kod üretir. NS
V7 kodundan tek fark, derleyicinin tamsayı çarpmasını yayması ve
SPARC-V8'de bulunan ancak SPARC-V7'de olmayan tamsayı bölme talimatları. İle birlikte
-mcpu=süper sparc, derleyici ayrıca SuperSPARC yongası için optimize eder.
SPARCSstation 10, 1000 ve 2000 serilerinde kullanılır.
İle -mcpu=parklilit, GCC, SPARC'ın SPARClite varyantı için kod üretir
mimari. Bu, tamsayı çarpmasını, tamsayı bölme adımını ve taramayı ("ffs") ekler
SPARClite'da bulunan ancak SPARC-V7'de olmayan talimatlar. İle birlikte -mcpu=f930,
derleyici ayrıca orijinal olan Fujitsu MB86930 yongası için optimize eder.
SPARClite, FPU'suz. İle birlikte -mcpu=f934, derleyici ayrıca için optimize eder
FPU'lu daha yeni SPARClite olan Fujitsu MB86934 yongası.
İle -mcpu=parıltı, GCC, SPARC'ın SPARClet varyantı için kod üretir
mimari. Bu, tamsayı çarpma, çarpma/biriktirme, tamsayı bölme işlemlerini ekler
SPARClet'te bulunan ancak SPARC-V7'de olmayan adım ve tarama ("ffs") talimatları. İle birlikte
-mcpu=tsc701, derleyici ayrıca onu TEMIC SPARClet çipi için optimize eder.
İle -mcpu=v9, GCC, SPARC mimarisinin V9 varyantı için kod üretir. Bu
64-bit tamsayı ve kayan nokta taşıma talimatları, 3 ek kayan nokta ekler
koşul kodu kayıtları ve koşullu taşıma talimatları. İle birlikte -mcpu=ultraparc,
derleyici ayrıca onu Sun UltraSPARC I/II/III yongaları için optimize eder. İle birlikte
-mcpu=ultraparc3, derleyici ayrıca Sun UltraSPARC için optimize eder
III/III+/IIIi/IIIi+/IV/IV+ çipler. İle birlikte -mcpu=niagara, derleyici ayrıca
Sun UltraSPARC T1 çipleri için optimize eder. İle birlikte -mcpu=niagara2, derleyici
ayrıca Sun UltraSPARC T2 çipleri için optimize eder. İle birlikte -mcpu=niagara3,
derleyici ayrıca Sun UltraSPARC T3 yongaları için optimize eder. İle birlikte -mcpu=niagara4,
derleyici ayrıca onu Sun UltraSPARC T4 yongaları için optimize eder.
-mtune=cpu_type
Makine tipi için talimat programlama parametrelerini ayarlayın cpu_type, ancak ayarlamayın
seçeneğin olduğu komut seti veya kayıt seti -mcpu=cpu_type yapar.
için aynı değerler -mcpu=cpu_type için kullanılabilir -mtune=cpu_typeama tek
yararlı değerler, belirli bir CPU uygulamasını seçen değerlerdir. Onlar
selvi, süper parc, hiperpark, leon, leon3, leon3v7, f930, f934, spaclite86x,
tsc701, ultraspark, ultrasparc3, Niyagara, Niagara2, Niagara3 ve Niagara4. Ile
yerel Solaris ve GNU/Linux araç zincirleri, yerli ayrıca kullanılabilir.
-mv8plus
-mno-v8plus
İle -mv8plus, GCC, SPARC-V8+ ABI için kod oluşturur. V8'den farkı
ABI, genel ve çıkış kayıtlarının 64 bit genişliğinde kabul edilmesidir. Bu etkinleştirildi
tüm SPARC-V32 işlemciler için varsayılan olarak Solaris'te 9 bit modunda.
-mvis
-mno-vis
İle -mvis, GCC, UltraSPARC Görselinden yararlanan kod üretir.
Komut Seti uzantıları. Varsayılan -mno-vis.
-mvis2
-mno-vis2
İle -mvis2, GCC, UltraSPARC'ın 2.0 sürümünden yararlanan kod üretir
Görsel Komut Seti uzantıları. Varsayılan -mvis2 bir işlemciyi hedeflerken
UltraSPARC-III ve sonraki sürümler gibi bu tür talimatları destekler. Ayar -mvis2 Ayrıca
setleri -mvis.
-mvis3
-mno-vis3
İle -mvis3, GCC, UltraSPARC'ın 3.0 sürümünden yararlanan kod üretir
Görsel Komut Seti uzantıları. Varsayılan -mvis3 bir işlemciyi hedeflerken
niagara-3 ve sonrası gibi talimatları destekler. Ayar -mvis3 ayrıca ayarlar
-mvis2 ve -mvis.
-mcbcond
-mno-cbcond
İle -mcbcond, GCC, karşılaştır ve dallandır özelliğinden yararlanan kod oluşturur
Sparc Architecture 2011'de tanımlandığı gibi talimatlar. Varsayılan, -mcbcond ne zaman
niagara-4 ve sonraki sürümleri gibi bu tür talimatları destekleyen bir işlemciyi hedefleme.
-mpopc
-mno-popc
İle -mpopc, GCC, UltraSPARC popülasyonundan yararlanan kod üretir
sayma talimatı Varsayılan -mpopc bunu destekleyen bir işlemciyi hedeflerken
Niagara-2 ve sonrası gibi talimatlar.
-mfmaf
-mno-fmaf
İle -mfmaf, GCC, UltraSPARC Fused Multiply'den yararlanan kod üretir.
Kayan nokta uzantıları ekleyin. Varsayılan -mfmaf bir işlemciyi hedeflerken
Niagara-3 ve sonraki sürümler gibi bu tür talimatları destekler.
-mfix-at697f
Atmel AT697F işlemcinin tek hata hatası için belgelenmiş geçici çözümü etkinleştirin
(AT13E işlemcisinin 697 numaralı hata hatasına karşılık gelir).
-mfix-ut699
Kayan nokta hataları ve veri önbelleği için belgelenmiş geçici çözümleri etkinleştirin
UT699 işlemcinin hatalarını geçersiz kılar.
Bunlar -m 9-bit SPARC-V64 işlemcilerde yukarıdakilere ek olarak seçenekler desteklenir
ortamları:
-m32
-m64
32 bit veya 64 bit ortam için kod oluşturun. 32 bit ortam int'yi ayarlar,
uzun ve işaretçi 32 bit. 64 bit ortam, int'yi 32 bit olarak ayarlar ve uzun ve
64 bit işaretçisi.
-mcmodel=hangi
Kod modelini aşağıdakilerden birine ayarlayın
orta
Orta/Düşük kod modeli: 64 bit adresler, programlar düşük 32'de bağlanmalıdır
bit bellek. Programlar statik veya dinamik olarak bağlanabilir.
medyum
Orta/Orta kod modeli: 64 bit adresler, programlar düşük
44 bit bellek, metin ve veri bölümlerinin boyutu 2 GB'den küçük olmalı ve
veri bölümü, metin bölümünün 2 GB'ı içinde yer almalıdır.
medani
Orta/Her Yerde kod modeli: 64 bit adresler, programlar herhangi bir yere bağlanabilir
bellekte, metin ve veri bölümlerinin boyutu 2 GB'tan küçük olmalıdır ve veriler
segmenti, metin segmentinin 2 GB'ı içinde bulunmalıdır.
gömme
Gömülü sistemler için Orta/Her Yerde kod modeli: 64 bit adresler, metin
ve veri bölümlerinin boyutu 2 GB'den küçük olmalıdır, her ikisi de bellekte herhangi bir yerden başlar
(bağlantı zamanında belirlenir). Küresel kayıt %g4 veri tabanına işaret ediyor
segment. Programlar statik olarak bağlantılıdır ve PIC desteklenmez.
-mbellek-modeli=bellek modeli
İşlemcide yürürlükte olan bellek modelini aşağıdakilerden birine ayarlayın.
varsayılan
İşlemci ve işletim sistemi için varsayılan bellek modeli.
rmo Rahat Hafıza Düzeni
PSO Kısmi Mağaza Siparişi
tso Toplam Mağaza Siparişi
sc Sıralı Tutarlılık
Bu bellek modelleri, Sparc V9 mimarisinin Ek D'sinde resmi olarak tanımlanmıştır.
kılavuzu, işlemcinin "PSATE.MM" alanında ayarlandığı şekilde.
-mstack-bias
-mno-yığın önyargısı
İle -mstack-bias, GCC, yığın işaretçisinin ve varsa çerçeve işaretçisinin,
yığın çerçeve referansları yapılırken geri eklenmesi gereken -2047 ile dengelenir. Bu
64 bit modunda varsayılandır. Aksi takdirde, böyle bir ofsetin bulunmadığını varsayın.
SPU Opsiyonlar
Bunlar -m seçenekler SPU'da desteklenir:
-mwarn-reloc
-merror-reloc
SPU için yükleyici, dinamik yer değiştirmeleri işlemez. Varsayılan olarak, GCC bir
dinamik bir yer değiştirme gerektiren kod oluşturduğunda hata. -mno-hata-reloc
hatayı devre dışı bırakır, -mwarn-reloc bunun yerine bir uyarı oluşturur.
-msafe-dma
-munsafe-dma
DMA'yı başlatan veya tamamlamayı test eden talimatlar,
erişilmekte olan belleğin yüklerine ve depolarına göre. İle birlikte -munsafe-dma
bellek erişimlerini korumak için "uçucu" anahtar sözcüğünü kullanmalısınız, ancak bu
hafızanın değişmediği bilinen yerlerde verimsiz kod. işaretlemek yerine
geçici olarak bellek, kullanabilirsiniz -msafe-dma derleyiciye DMA'yı tedavi etmesini söylemek
tüm belleği potansiyel olarak etkileyen talimatlar.
-mbranch-ipuçları
Varsayılan olarak, GCC, boru hattı duraklamalarını önlemek için bir dal ipucu talimatı oluşturur.
her zaman alınan veya muhtemelen alınan dallar. 8'den daha yakın bir ipucu oluşturulmaz
talimatları şubesinden uzakta. dışında onları devre dışı bırakmak için çok az neden var
hata ayıklama amacıyla veya bir nesneyi biraz daha küçültmek için.
-msmall-mem
-mlarge-mem
Varsayılan olarak, GCC, adreslerin hiçbir zaman 18 bitten büyük olmadığını varsayarak kod üretir.
İle -mlarge-mem tam bir 32-bit adresi varsayan kod oluşturulur.
-mstdmain
Varsayılan olarak, GCC, SPU tarzı ana işlevi üstlenen başlangıç koduna bağlanır
arabirim (geleneksel olmayan bir parametre listesine sahiptir). İle birlikte -mstdmain, GCC bağlantıları
programınız, "main" olarak C99 tarzı bir arayüz varsayan başlangıç koduna karşı,
"argv" dizelerinin yerel bir kopyası dahil.
-mfixed-aralık=kayıt aralığı
Verilen kayıt aralığını sabit kayıtlar olarak ele alan kod oluşturun. Sabit bir kayıt
kayıt ayırıcının kullanamayacağı bir tanesidir. Bu, çekirdeği derlerken kullanışlıdır.
kod. Bir kayıt aralığı, bir tire ile ayrılmış iki kayıt olarak belirtilir. çoklu
kayıt aralıkları virgülle ayrılarak belirtilebilir.
-mea32
-mea64
"__ea" aracılığıyla erişilen PPU adres alanını işaret ettiğini varsayarak kodu derleyin
adlandırılmış adres alanı niteleyicisi 32 veya 64 bit genişliğindedir. Varsayılan 32 bittir.
Bu, ABI'yi değiştiren bir seçenek olduğundan, yürütülebilir dosyadaki tüm nesne kodu derlenmelidir
aynı ayar ile.
-madress-space-dönüşüm
-mno-adres-alanı-dönüşüm
"__ea" adres alanının genel adresin üst kümesi olarak ele alınmasına izin ver/izin verme
Uzay. Bu, "__ea" ile genel işaretçi arasında açık tip yayınların yanı sıra
genel işaretçilerin "__ea" işaretçilerine örtük dönüşümleri. Varsayılan izin vermektir
adres alanı işaretçisi dönüşümleri.
-mcache-boyutu=önbellek boyutu
Bu seçenek, derleyicinin yürütülebilir bir dosyaya bağladığı libgcc sürümünü kontrol eder.
ve "__ea" adresindeki değişkenlere erişmek için yazılım tarafından yönetilen bir önbellek seçer
belirli bir önbellek boyutuna sahip alan. Olası seçenekler önbellek boyutu vardır 8, 16, 32, 64
ve 128. Varsayılan önbellek boyutu 64KB'dir.
-matomik-güncellemeler
-mno-atomik-güncellemeler
Bu seçenek, derleyicinin yürütülebilir bir dosyaya bağladığı libgcc sürümünü kontrol eder.
ve PPU tarafı değişkenlerinin yazılım tarafından yönetilen önbelleğinde atomik güncellemelerin yapılıp yapılmayacağını seçer
kullanılmış. Atomik güncellemeleri kullanırsanız, kullanarak SPU kodundan bir PPU değişkenine değişir.
"__ea" adlı adres alanı niteleyicisi, diğer PPU'larda yapılan değişiklikleri engellemez
PPU kodundan aynı önbellek satırında bulunan değişkenler. atomik kullanmazsanız
güncellemeler, bu tür parazitler meydana gelebilir; ancak, önbellek satırlarını geri yazmak daha
verimli. Varsayılan davranış, atomik güncellemeleri kullanmaktır.
-mdual-nops
-mdual-nops=n
Varsayılan olarak, GCC, artmasını beklediğinde ikili sorunu artırmak için nops ekler
performans. n 0 ile 10 arasında bir değer olabilir. Daha küçük n daha az nops ekler. 10
varsayılan, 0 ile aynıdır -mno-çift-nops. ile devre dışı -İşletim sistemi.
-mint-max-nops=n
Dal ipucu için eklenecek maksimum nops sayısı. Dal ipucu en az 8 olmalıdır
etkilediği şubeden uzak talimatlar. GCC ekler n hayır
bunu uygula, aksi halde dal ipucunu oluşturmaz.
-mint-max-mesafe=n
Dal ipucu talimatının kodlaması, ipucunu 256 içinde olacak şekilde sınırlar.
etkilediği şubenin talimatları. Varsayılan olarak, GCC,
125
-msafe-ipuçları
SPU'nun süresiz olarak durmasına neden olan bir donanım hatasını giderin. Varsayılan olarak, GCC
bu duraklamanın olmayacağından emin olmak için "hbrp" talimatını ekler.
Opsiyonlar için sistem V
Bu ek seçenekler, diğerleriyle uyumluluk için System V Sürüm 4'te mevcuttur.
bu sistemlerdeki derleyiciler:
-G Paylaşılan bir nesne oluşturun. tavsiye edilir -simgesel or -paylaşılan yerine kullanılabilir.
-Qy Bir ".ident" derleyicisinde derleyici tarafından kullanılan her aracın sürümlerini tanımlayın
çıktıdaki yönerge.
-Qn Çıktı dosyasına ".ident" yönergeleri eklemekten kaçının (bu varsayılandır).
-YP,dirs
dizinleri ara dirsile belirtilen kitaplıklar için ve diğerleri değil -l.
-Ym,dir
dizine bak dir M4 önişlemcisini bulmak için. Montajcı bunu kullanır
seçeneği.
KARO-Gx Opsiyonlar
Bunlar -m seçenekler TILE-Gx'te desteklenir:
-mcmodel=küçük
Küçük model için kod oluşturun. Doğrudan aramalar için mesafe 500M ile sınırlıdır
her iki yönde. PC'ye bağlı adresler 32 bittir. Mutlak adres desteği
tam adres aralığı.
-mcmodel=büyük
Büyük model için kod oluşturun. Çağrı mesafesi sınırlaması yoktur, pc-
göreli adresler veya mutlak adresler.
-mcpu=isim
Hedeflenecek CPU türünü seçer. Şu anda desteklenen tek tür kiremit.
-m32
-m64
32 bit veya 64 bit ortam için kod oluşturun. 32 bit ortam int'yi ayarlar,
uzun ve işaretçi 32 bit. 64 bit ortam, int'yi 32 bit olarak ayarlar ve uzun ve
64 bit işaretçisi.
TILEPro Opsiyonlar
Bunlar -m seçenekler TILEPro'da desteklenir:
-mcpu=isim
Hedeflenecek CPU türünü seçer. Şu anda desteklenen tek tür kiremit.
-m32
32 bitlik bir ortam için int, long ve işaretçiyi 32 bit olarak ayarlayan kod oluşturun.
Bu, desteklenen tek davranıştır, bu nedenle bayrak esasen yoksayılır.
V850 Opsiyonlar
Bunlar -m V850 uygulamaları için seçenekler tanımlanmıştır:
-mlong-çağrıları
-çok uzun aramalar
Tüm aramaları uzakta (yakın) olarak kabul edin. Çağrıların uzak olduğu varsayılırsa,
derleyici her zaman işlevin adresini bir kayıt defterine yükler ve dolaylı olarak çağırır
işaretçi aracılığıyla.
-mno-ep
-mep
Aynı indeks işaretçisi 4 veya daha fazlasını kullanan temel blokları optimize etmeyin (optimize etmeyin)
işaretçiyi "ep" kaydına kopyalamak ve daha kısa olan "sld" ve "sst"yi kullanmak için
Talimatlar. NS -mep optimize ederseniz, seçenek varsayılan olarak açıktır.
-mno-prolog-fonksiyonu
-mprolog-fonksiyonu
Giriş bölümündeki kayıtları kaydetmek ve geri yüklemek için harici işlevleri kullanmayın (kullanmayın).
ve bir fonksiyonun epilogu. Harici işlevler daha yavaştır, ancak daha az kod kullanır
birden fazla işlev aynı sayıda kayıt kaydediyorsa boşluk. NS
-mprolog-fonksiyonu optimize ederseniz, seçenek varsayılan olarak açıktır.
-mspace
Kodu mümkün olduğunca küçük yapmaya çalışın. Şu anda, bu sadece -mep
ve -mprolog-fonksiyonu seçenekleri.
-mtda=n
Boyutu olan statik veya global değişkenleri koyun n küçük veri alanına bayt veya daha az
Bu kayıt "ep" işaret eder. Küçük veri alanı toplamda 256 bayta kadar tutabilir
(bayt referansları için 128 bayt).
-msda=n
Boyutu olan statik veya global değişkenleri koyun n küçük veri alanına bayt veya daha az
Bu kayıt "gp" işaret eder. Küçük veri alanı 64 kilobayta kadar tutabilir.
-mzda=n
Boyutu olan statik veya global değişkenleri koyun n ilk 32'ye bayt veya daha az
kilobayt bellek.
-mv850
Hedef işlemcinin V850 olduğunu belirtin.
-mv850e3v5
Hedef işlemcinin V850E3V5 olduğunu belirtin. önişlemci sabiti
__v850e3v5__ Bu seçenek kullanılırsa tanımlanır.
-mv850e2v4
Hedef işlemcinin V850E3V5 olduğunu belirtin. Bu bir takma addır
-mv850e3v5 seçeneği.
-mv850e2v3
Hedef işlemcinin V850E2V3 olduğunu belirtin. önişlemci sabiti
__v850e2v3__ Bu seçenek kullanılırsa tanımlanır.
-mv850e2
Hedef işlemcinin V850E2 olduğunu belirtin. önişlemci sabiti __v850e2__
Bu seçenek kullanılırsa tanımlanır.
-mv850e1
Hedef işlemcinin V850E1 olduğunu belirtin. önişlemci sabitleri
__v850e1__ ve __v850e__ Bu seçenek kullanılırsa tanımlanır.
-mv850es
Hedef işlemcinin V850ES olduğunu belirtin. Bu bir takma addır -mv850e1
seçeneği.
-mv850e
Hedef işlemcinin V850E olduğunu belirtin. önişlemci sabiti __v850e__
Bu seçenek kullanılırsa tanımlanır.
eğer hiçbiri -mv850 ne de -mv850e ne de -mv850e1 ne de -mv850e2 ne de -mv850e2v3 ne de -mv850e3v5
tanımlanır, ardından varsayılan bir hedef işlemci seçilir ve ilgili __v850*__
önişlemci sabiti tanımlanır.
önişlemci sabitleri __v850 ve __v851__ ne olursa olsun her zaman tanımlanır
işlemci varyantı hedeftir.
-mdisable-çağrı
-mno-devre dışı-çağrı
Bu seçenek, v850e, v850e1 için "CALLT" komutunun oluşturulmasını engeller.
v850 mimarisinin v2e850, v2e3v850 ve v3e5v850 lezzetleri.
Bu seçenek, RH850 ABI kullanımdayken varsayılan olarak etkindir (bkz. -mrh850-abi), Ve
GCC ABI kullanımdayken varsayılan olarak devre dışıdır. "ÇAĞRI" talimatları yapılıyorsa
oluşturulduktan sonra C önişlemci sembolü "__V850_CALLT__" tanımlanacaktır.
-mrelax
-mno-rahatla
iletmek (veya geçmemek) -mrelax derleyiciye komut satırı seçeneği.
-mlong-zıplamalar
-mno-uzun atlamalar
PC'ye göre atlama talimatlarının oluşturulmasını devre dışı bırakın (veya yeniden etkinleştirin).
-msoft-float
-mhard-şamandıra
Donanım kayan nokta yönergelerinin oluşturulmasını devre dışı bırakın (veya yeniden etkinleştirin). Bu
seçenek yalnızca hedef mimari olduğunda önemlidir V850E2V3 veya daha yüksek. Eğer
donanım kayan nokta talimatları oluşturuluyor, ardından C önişlemcisi
"__FPU_OK__" sembolü tanımlanacak, aksi takdirde "__NO_FPU__" sembolü olacak
tanımladı.
-loop
e3v5 LOOP komutunun kullanımını etkinleştirir. Bu talimatın kullanımı,
e3v5 mimarisi seçildiğinde varsayılan olarak etkindir, çünkü kullanımı hala devam etmektedir
deneysel.
-mrh850-abi
-mghs
V850 ABI'nin RH850 sürümü için desteği etkinleştirir. Bu varsayılandır. İle birlikte
ABI'nin bu versiyonunda aşağıdaki kurallar geçerlidir:
· Tamsayı boyutlu yapılar ve birleşimler, yerine bir bellek işaretçisi aracılığıyla döndürülür.
bir kayıt.
· Büyük yapılar ve birleşimler (boyut olarak 8 bayttan fazla) değere göre iletilir.
· Fonksiyonlar 16 bitlik sınırlara göre ayarlanmıştır.
· -m8bayt hizalama komut satırı seçeneği desteklenir.
· -mdisable-çağrı komut satırı seçeneği varsayılan olarak etkindir. NS
-mno-devre dışı-çağrı komut satırı seçeneği desteklenmiyor.
ABI'nin bu sürümü etkinleştirildiğinde, C önişlemci sembolü "__V850_RH850_ABI__"
tanımlandı.
-mgcc-abi
V850 ABI'nin eski GCC sürümü için desteği etkinleştirir. ABI'nin bu sürümü ile
aşağıdaki kurallar geçerlidir:
· Tamsayı boyutlu yapılar ve birleşimler "r10" kaydında döndürülür.
· Büyük yapılar ve birleşimler (8 bayttan büyük) referans ile geçirilir.
· Boyut için optimize edilmedikçe, işlevler 32-bit sınırlarına göre hizalanır.
· -m8bayt hizalama komut satırı seçeneği desteklenmiyor.
· -mdisable-çağrı komut satırı seçeneği desteklenir ancak varsayılan olarak etkinleştirilmez.
ABI'nin bu sürümü etkinleştirildiğinde, "__V850_GCC_ABI__" C önişlemci sembolü
tanımlandı.
-m8bayt hizalama
-mno-8bayt hizalama
8 bayt üzerinde hizalanacak "çift" ve "uzun uzun" türler için desteği sağlar
sınırlar. Varsayılan, tüm nesnelerin hizalamasını en fazla
4 bayt. Ne zaman -m8bayt hizalama aslında C önişlemci sembolüdür
"__V850_8BYTE_ALIGN__" tanımlanacaktır.
-big-anahtar
Büyük anahtar tabloları için uygun kod oluşturun. Bu seçeneği yalnızca,
montajcı/bağlayıcı, bir anahtar tablosundaki aralık dışı dallardan şikayet eder.
-mapp-reg'ler
Bu seçenek, derleyici tarafından oluşturulan kodda r2 ve r5'in kullanılmasına neden olur. Bu
ayar varsayılandır.
-mno-app-regs
Bu seçenek, r2 ve r5'in sabit kayıtlar olarak ele alınmasına neden olur.
VAX Opsiyonlar
Bunlar -m VAX için seçenekler tanımlanmıştır:
-munix
Unix derleyicisinin erişemeyeceği belirli atlama talimatlarını ("aobleq" vb.)
VAX için uzun mesafelerde işleyemez.
-mgnu
GNU derleyicisinin şu anda olduğu varsayımıyla, bu atlama talimatlarının çıktısını alın.
Kullanılmış.
-mg D-biçimi yerine G-biçimli kayan noktalı sayılar için çıktı kodu.
VMS Opsiyonlar
Bunlar -m VMS uygulamaları için seçenekler tanımlanmıştır:
-mvms-dönüş-kodları
"Ana"dan VMS koşul kodlarını döndürün. Varsayılan, POSIX tarzı koşulu döndürmektir
(örn. hata) kodları.
-mdebug-ana=önek
Adı ile başlayan ilk rutini işaretleyin önek için ana rutin olarak
ayıklayıcı.
-mmalloc64
Varsayılan olarak 64 bit bellek ayırma rutinleri.
-mpointer-boyutu=boyut
İşaretçilerin varsayılan boyutunu ayarlayın. Olası seçenekler boyut vardır 32 or kısa 32 biti için
işaretçileri, 64 or ve kazandırdı 64 bit işaretçiler için ve yok hayır yalnızca 32 bit işaretçileri desteklemek için.
Sonraki seçenek "pragma pointer_size" öğesini devre dışı bırakır.
VxWorks Opsiyonlar
Bu bölümdeki seçenekler tüm VxWorks hedefleri için tanımlanmıştır. Özel seçenekler
hedef donanım, o hedef için diğer seçeneklerle birlikte listelenir.
-mrtp
GCC, hem VxWorks çekirdekleri hem de gerçek zamanlı işlemler (RTP'ler) için kod üretebilir. Bu
seçenek birinciden ikinciye geçer. Ayrıca önişlemci makrosunu da tanımlar.
"__RTP__".
-statik olmayan
Yürütülebilir bir RTP dosyasını statik kitaplıklar yerine paylaşılan kitaplıklara bağlayın. NS
seçenekleri -statik ve -paylaşılan RTP'ler için de kullanılabilir; -statik varsayılandır.
-Bstatik
-Bdinamik
Bu seçenekler bağlayıcıya aktarılır. Uyumluluk için tanımlanırlar
Diyab.
-Xbind-tembel
İşlev çağrılarının tembel bağlanmasını etkinleştirin. Bu seçenek eşdeğerdir -Wl,-z,şimdi ve bir
Diab ile uyumluluk için tanımlanmıştır.
-Xbind-şimdi
İşlev çağrılarının tembel bağlanmasını devre dışı bırakın. Bu seçenek varsayılandır ve şu şekilde tanımlanmıştır:
Diab ile uyumluluk.
x86-64 Opsiyonlar
Bunlar aşağıda listelenmiştir
Xstormy16 Opsiyonlar
Bu seçenekler Xstormy16 için tanımlanmıştır:
-msim
Simülatöre uygun başlangıç dosyalarını ve bağlayıcı komut dosyasını seçin.
Xtensa Opsiyonlar
Bu seçenekler, Xtensa hedefleri için desteklenir:
-mconst16
-mno-const16
Sabit değerleri yüklemek için "CONST16" talimatlarının kullanımını etkinleştirin veya devre dışı bırakın. NS
"CONST16" komutu şu anda Tensilica'dan standart bir seçenek değildir. Ne zaman
etkinleştirildiğinde, "CONST16" komutları her zaman standart "L32R" yerine kullanılır
Talimatlar. "CONST16" kullanımı varsayılan olarak yalnızca "L32R"
talimat mevcut değildir.
-mfused-deli
-mno-kaynaşmış-madd
Birleştirilmiş çarpma/toplama ve çarpma/çıkarma talimatlarının kullanımını etkinleştirin veya devre dışı bırakın.
kayan nokta seçeneği. Kayan nokta seçeneği de değilse, bunun bir etkisi yoktur.
etkinleştirilmiş. Birleştirilmiş çarpma/toplama ve çarpma/çıkarma talimatlarının devre dışı bırakılması,
çarpma ve toplama/çıkarma işlemleri için ayrı yönergeler kullanmak için derleyici.
Bu, katı IEEE 754 uyumlu sonuçların geçerli olduğu bazı durumlarda istenebilir.
gerekli: kaynaşmış çarpma toplama/çıkarma talimatları ara noktayı yuvarlamaz
sonuç, böylece sonuçlar üreten Daha tarafından belirtilenden daha hassas bitler
IEEE standardı. Birleştirilmiş çarpma ekleme/çıkarma talimatlarının devre dışı bırakılması, aynı zamanda şunu da sağlar:
program çıktısı, derleyicinin çarpma ve birleştirme yeteneğine duyarlı değildir.
toplama/çıkarma işlemleri.
-mserialize-uçucu
-mno-seri hale getir-uçucu
Bu seçenek etkinleştirildiğinde, GCC, "geçici" bellekten önce "MEMW" talimatlarını ekler.
sıralı tutarlılığı garanti etmek için referanslar. Varsayılan -mserialize-uçucu.
kullanım -mno-seri hale getir-uçucu "MEMW" talimatlarını atlamak için.
-mforce-no-resim
GNU/Linux gibi, tüm kullanıcı modu Xtensa kodunun konumsal olması gereken hedefler için
bağımsız kod (PIC), bu seçenek çekirdek kodunu derlemek için PIC'yi devre dışı bırakır.
-mtext-bölüm değişmezleri
-mno-metin-bölümü-harf değerleri
Değişmez havuzların tedavisini kontrol edin. Varsayılan -mno-metin-bölümü-harf değerleri,
bu, değişmezleri çıktı dosyasında ayrı bir bölüme yerleştirir. Bu,
bir veri RAM/ROM'una yerleştirilecek değişmez bilgi havuzu ve ayrıca bağlayıcının birleştirilmesine izin verir.
gereksiz değişmezleri kaldırmak ve kodu iyileştirmek için ayrı nesne dosyalarından sabit bilgi havuzları
boy. İle birlikte -mtext-bölüm değişmezleri, değişmezler metin bölümünde serpiştirilmiş
onları referanslarına mümkün olduğunca yakın tutmak için. Bu gerekli olabilir
büyük montaj dosyaları için.
-mtarget-hizalama
-mno-hedef hizalama
Bu seçenek etkinleştirildiğinde, GCC, montajcıya otomatik olarak hizalama talimatı verir.
bazı kod yoğunluğu pahasına şube cezalarını azaltmaya yönelik talimatlar. NS
montajcı, dal hedeflerini hizalamak için yoğunluk talimatlarını genişletmeye çalışır ve
çağrı talimatlarını takip eden talimatlar. Yeterli ön kasa yoksa
bir hedefi hizalamak için yoğunluk talimatları, genişletme yapılmaz. Varsayılan
-mtarget-hizalama. Bu seçenekler, otomatik hizalamanın tedavisini etkilemez.
montajcının her zaman genişleterek hizaladığı "LOOP" gibi talimatlar
yoğunluk talimatlarını veya NOP talimatlarını ekleyerek.
-mlongcall'lar
-mno-uzun aramalar
Bu seçenek etkinleştirildiğinde, GCC, montajcıya doğrudan çağrıları şuraya çevirmesi talimatını verir:
bir doğrudan aramanın hedefinin
çağrı talimatının izin verdiği aralık. Bu çeviri genellikle
diğer kaynak dosyalardaki işlevler. Özellikle, montajcı doğrudan bir
"CALL" talimatını bir "L32R"ye ve ardından bir "CALLX" talimatına. Varsayılan
-mno-uzun aramalar. Bu seçenek, çağrı hedefinin kullanılabildiği programlarda kullanılmalıdır.
potansiyel olarak kapsama alanı dışında olabilir. Bu seçenek, montajcıda değil, montajcıda uygulanır.
derleyici, bu nedenle GCC tarafından oluşturulan derleme kodu hala doğrudan çağrıyı gösteriyor
talimatlar --- gerçek talimatları görmek için demonte nesne koduna bakın.
Derleyicinin, yalnızca dosyalar arası arama için değil, her çapraz dosya araması için dolaylı bir arama kullandığını unutmayın.
gerçekten menzil dışında olanlar.
zSerisi Opsiyonlar
Bunlar aşağıda listelenmiştir
Opsiyonlar için Kod nesil konvansiyonlar
Bu makineden bağımsız seçenekler, kodda kullanılan arayüz kurallarını kontrol eder.
nesil.
Çoğunun hem olumlu hem de olumsuz biçimleri vardır; olumsuz biçimi -ffoo is
-fno-foo. Aşağıdaki tabloda, formlardan yalnızca biri listelenmiştir---
varsayılan. Kaldırarak diğer formu anlayabilirsiniz. yok hayır- veya ekleyerek.
-fbounds-kontrol
Bunu destekleyen ön uçlar için, kullanılan dizinleri kontrol etmek için ek kod oluşturun.
erişim dizileri beyan edilen aralık içindedir. Bu, şu anda yalnızca
Bu seçeneğin varsayılan olarak doğru ve yanlış olduğu Java ve Fortran ön uçları
respectivamente.
-fstack-yeniden kullanım=yeniden kullanım düzeyi
Bu seçenek, kullanıcı tarafından tanımlanan yerel/otomatik değişkenler için yığın alanının yeniden kullanımını kontrol eder ve
derleyici tarafından oluşturulan geçiciler. yeniden kullanım_seviyesi olabilir herşey, name_varsya da Yok. herşey
tüm yerel değişkenler ve geçiciler için yığının yeniden kullanılmasını sağlar, name_vars sağlar
yalnızca adları olan kullanıcı tanımlı yerel değişkenler için yeniden kullanın ve Yok yığın yeniden kullanımını devre dışı bırakır
tamamen. Varsayılan değer herşey. Program genişletildiğinde seçenek gereklidir
Kapsamlı bir yerel değişkenin ömrü veya ötesinde geçici olarak oluşturulan bir derleyici
dil tarafından tanımlanan bitiş noktası. Bir değişkenin ömrü sona erdiğinde ve
değişken bellekte yaşar, optimize eden derleyici yığınını yeniden kullanma özgürlüğüne sahiptir
canlı aralığı olmayan diğer geçici veya kapsamlı yerel değişkenlerle boşluk
onunla örtüşür. Yerel kullanım ömrünü uzatan eski kod, büyük olasılıkla
yığın yeniden kullanım optimizasyonu.
Örneğin,
int *p;
{
int yerel1;
p = &yerel1;
yerel1 = 10;
....
}
{
int yerel2;
yerel2 = 20;
Kendi ID’n ile mağazalarını oluştur
}
if (*p == 10) // local1'in kapsam dışı kullanımı
{
}
Başka bir örnek:
yapı A
{
A(int k) : i(k), j(k) { }
int ben;
intj;
};
bir *ap;
void foo(const A& ar)
{
ap = &ar;
}
boşluk çubuğu()
{
foo (A(10)); // temp nesnesinin ömrü, foo döndüğünde sona erer
{
A a(20);
....
}
ap->i+= 10; // ap, alanı temp kapsamı dışında olan başvurular
// a ile yeniden kullanılır. ap->i'nin değeri nedir?
}
Geçici olarak oluşturulan bir derleyicinin ömrü, C++ standardı tarafından iyi tanımlanmıştır.
Geçici bir ömür sona erdiğinde ve geçici olan bellekte yaşıyorsa,
derleyiciyi optimize etmek, yığın alanını diğer geçici programlarla veya
canlı aralığı kendisiyle örtüşmeyen kapsamlı yerel değişkenler. Ancak bazı
eski kod, geçicilerin yığınının bulunduğu eski derleyicilerin davranışına dayanır.
alan yeniden kullanılmaz, agresif yığın yeniden kullanımı çalışma zamanı hatalarına neden olabilir. Bu
seçeneği, geçici yığın yeniden kullanım optimizasyonunu kontrol etmek için kullanılır.
-ftrapv
Bu seçenek, toplama, çıkarma ve çıkarma işlemlerinde imzalı taşma için tuzaklar oluşturur.
çarpma işlemleri.
-fwrapv
Bu seçenek, derleyiciye, işaretli aritmetik taşmanın
toplama, çıkarma ve çarpma ikişerli tamamlayıcı kullanarak sarmalar
temsil. Bu bayrak, bazı optimizasyonları etkinleştirir ve diğerlerini devre dışı bırakır. Bu
seçenek, Java dilinin gerektirdiği şekilde Java ön ucu için varsayılan olarak etkindir
Şartname.
-istisnalar
İstisna işlemeyi etkinleştirin. İstisnaları yaymak için gereken ekstra kodu üretir. İçin
bazı hedefler, bu GCC'nin tüm işlevler için çerçeve çözme bilgisi oluşturduğu anlamına gelir,
etkilemese de, önemli miktarda veri boyutu ek yükü üretebilir
uygulamak. Bu seçeneği belirlemezseniz GCC, diller için varsayılan olarak etkinleştirir.
normalde istisna işleme gerektiren ve aşağıdaki gibi diller için devre dışı bırakan C++ gibi
Normalde gerektirmeyen C. Ancak, aşağıdaki durumlarda bu seçeneği etkinleştirmeniz gerekebilir.
yazılı istisna işleyicileri ile düzgün bir şekilde birlikte çalışması gereken C kodunu derlemek
C++'da. Daha eski C++ derliyorsanız, bu seçeneği devre dışı bırakmak da isteyebilirsiniz.
istisna işleme kullanmayan programlar.
-fnon-çağrı-istisnaları
Özel durumlar oluşturmak için bindirme talimatlarına izin veren kod oluşturun. unutmayın ki bu
her yerde bulunmayan platforma özel çalışma zamanı desteği gerektirir. Dahası,
sadece izin verir yakalama istisnalar, yani bellek referansları veya
kayan nokta komutları. İstisnaların keyfi olarak atılmasına izin vermez.
"SIGALRM" gibi sinyal işleyiciler.
-fdelete-ölü-istisnalar
İstisnalar oluşturabilecek ancak başka türlü katkıda bulunmayan talimatları göz önünde bulundurun.
programın yürütülmesi optimize edilebilir. Bu seçenek varsayılan olarak etkindir
Ada dili belirtiminin izin verdiği şekilde Ada ön ucu için. optimizasyon
ölü istisnaların kaldırılmasına neden olan geçişler, farklı noktalarda bağımsız olarak etkinleştirilir.
optimizasyon seviyeleri.
-funwind-tabloları
Benzer -istisnalar, yalnızca gerekli statik verileri oluşturması dışında, ancak
oluşturulan kodu başka hiçbir şekilde etkilemez. normalde gerek yok
bu seçeneği etkinleştirin; bunun yerine, bu işleme ihtiyaç duyan bir dil işlemcisi bunu sağlar
sizin adınıza.
-fasenkronize-çözme-tabloları
Hedef makine tarafından destekleniyorsa, çözme tablosunu DWARF 2 formatında oluşturun. tablo
her talimat sınırında kesindir, bu nedenle yığının çözülmesi için kullanılabilir
zaman uyumsuz olaylar (hata ayıklayıcı veya çöp toplayıcı gibi).
-fno-gnu-benzersiz
En son GNU derleyicisi ve C kitaplığı olan sistemlerde, C++ derleyicisi aşağıdakileri kullanır:
Şablon statik veri üyelerinin tanımlarının yapıldığından emin olmak için "STB_GNU_UNIQUE" bağlaması
ve satır içi işlevlerdeki statik yerel değişkenler, varlığında bile benzersizdir.
"RTLD_YEREL"; bu, iki farklı kitaplık tarafından kullanılan bir kitaplıkla ilgili sorunlardan kaçınmak için gereklidir.
Birindeki tanıma bağlı olarak "RTLD_LOCAL" eklentileri ve bu nedenle
sembolün bağlanması konusunda diğeriyle anlaşamamak. Ama bu neden olur
"dlclose", etkilenen DSO'lar için yoksayılacak; programınız yeniden başlatmaya dayanıyorsa
"dlclose" ve "dlopen" aracılığıyla bir DSO'nun -fno-gnu-benzersiz.
-fpcc-yapı-dönüş
"Kısa" "yapı" ve "birlik" değerlerini bellekte değil, daha uzun olanlar gibi bellekte döndürün
kayıtlar. Bu sözleşme daha az verimlidir, ancak izin verme avantajına sahiptir.
GCC tarafından derlenen dosyalar ve diğer derleyicilerle derlenen dosyalar arasındaki karşılıklı çağrılabilirlik,
özellikle Portable C Compiler (pcc).
Bellekteki yapıları döndürmek için kesin kural, hedefe bağlıdır.
yapılandırma makroları.
Kısa yapılar ve birlikler, boyutları ve hizaları bazılarınınkiyle eşleşen yapılardır.
tamsayı türü.
Uyarı: ile derlenen kod -fpcc-yapı-dönüş anahtar ikili uyumlu değil
ile derlenmiş kod ile -freg-struct-dönüş değiştirmek. olmayan bir şeye uymak için kullanın.
varsayılan uygulama ikili arabirimi.
-freg-struct-dönüş
Mümkün olduğunda kayıtlarda "struct" ve "union" değerlerini döndürün. Bu daha verimli
daha küçük yapılar için -fpcc-yapı-dönüş.
Hiçbirini belirtmezseniz -fpcc-yapı-dönüş ne de -freg-struct-dönüş, GCC varsayılan olarak
hedef için standart hangisiyse. Standart bir sözleşme yoksa,
GCC varsayılanları -fpcc-yapı-dönüş, GCC'nin asıl olduğu hedefler hariç
derleyici. Bu gibi durumlarda standardı seçebiliriz ve daha verimli olanı seçtik.
dönüş alternatifini kaydedin.
Uyarı: ile derlenen kod -freg-struct-dönüş anahtar ikili uyumlu değil
ile derlenmiş kod ile -fpcc-yapı-dönüş değiştirmek. olmayan bir şeye uymak için kullanın.
varsayılan uygulama ikili arabirimi.
-fshort-enumlar
Bir "enum" türüne yalnızca belirtilen aralık için ihtiyaç duyduğu kadar bayt ayırın.
olası değerler. Spesifik olarak, "enum" türü en küçük tam sayıya eşdeğerdir.
yeterli alana sahip tür.
Uyarı: the -fshort-enumlar anahtar, GCC'nin ikili olmayan kod oluşturmasına neden olur
bu anahtar olmadan oluşturulan kodla uyumludur. olmayan bir şeye uymak için kullanın.
varsayılan uygulama ikili arabirimi.
-fshort-double
"Double" için "float" ile aynı boyutu kullanın.
Uyarı: the -fshort-double anahtar, GCC'nin ikili olmayan kod oluşturmasına neden olur
bu anahtar olmadan oluşturulan kodla uyumludur. olmayan bir şeye uymak için kullanın.
varsayılan uygulama ikili arabirimi.
-fshort-wchar
için temel alınan türü geçersiz kıl wchar_t'den olduğu kısa imzasız int onun yerine
hedef için varsayılan. Bu seçenek, altında çalışacak programlar oluşturmak için kullanışlıdır.
ŞARAP.
Uyarı: the -fshort-wchar anahtar, GCC'nin ikili olmayan kod oluşturmasına neden olur
bu anahtar olmadan oluşturulan kodla uyumludur. olmayan bir şeye uymak için kullanın.
varsayılan uygulama ikili arabirimi.
-fno-ortak
C kodunda, başlatılmamış global değişkenlerin yerleşimini kontrol eder. Unix C derleyicileri
geleneksel olarak bu tür değişkenlerin farklı şekillerde çoklu tanımlarına izin vermiştir.
değişkenleri ortak bir bloğa yerleştirerek derleme birimleri. bu davranış
tarafından belirtilen -fortak, ve çoğu hedefte GCC için varsayılandır. Diğer yandan,
bu davranış ISO C tarafından gerekli değildir ve bazı hedeflerde bir hız veya kod taşıyabilir
değişken referanslarda boyut cezası. NS -fno-ortak seçeneği belirtir
derleyici, başlatılmamış global değişkenleri nesnenin veri bölümüne yerleştirmelidir
onları ortak bloklar olarak oluşturmak yerine dosya. Bunun etkisi vardır ki, eğer
aynı değişken ("harici" olmadan) iki farklı derlemede bildirilirse, bir
bağladığınızda çoklu tanım hatası. Bu durumda, ile derlemeniz gerekir
-fortak Bunun yerine. ile derleme -fno-ortak olduğu hedeflerde faydalıdır.
daha iyi performans sağlar veya programın üzerinde çalışacağını doğrulamak istiyorsanız
her zaman başlatılmamış değişken bildirimlerini bu şekilde ele alan diğer sistemler.
-fno-kimliği
Görmezden gel #kimlik Direktif.
-finhibit-size-direktifi
Bir ".size" montajcı yönergesi veya sorun yaratacak başka bir şey çıkarmayın
fonksiyon ortadan bölünmüşse ve iki yarı uzak yerlere yerleştirilmişse
hafızada ayrı. Bu seçenek derlerken kullanılır crtstuff.c; ihtiyacın olmamalı
başka bir şey için kullanmak için.
-fverbose-asm
Daha fazla hale getirmek için oluşturulan derleme koduna ekstra yorum bilgileri koyun
okunabilir. Bu seçenek genellikle sadece gerçekten okuması gerekenler için kullanılır.
oluşturulan derleme kodu (belki derleyicinin kendisinde hata ayıklarken).
-fno-ayrıntılı-asm, varsayılan, ek bilgilerin atlanmasına neden olur ve
iki assembler dosyasını karşılaştırırken kullanışlıdır.
-frecord-gcc-anahtarları
Bu anahtar, derleyiciyi çağırmak için kullanılan komut satırının
oluşturulmakta olan nesne dosyası. Bu anahtar yalnızca bazılarında uygulanır
hedefler ve kaydın tam biçimi hedef ve ikili dosya biçimidir
bağlıdır, ancak genellikle ASCII metni içeren bir bölüm şeklini alır. Bu
anahtarı ile ilgilidir -fverbose-asm geçiş, ancak bu geçiş yalnızca kayıtları
derleyici çıktı dosyasındaki bilgiler yorum olarak, bu nedenle asla nesneye ulaşmaz
dosya. Ayrıca bakınız -grecord-gcc-anahtarları derleyici seçeneklerini saklamanın başka bir yolu için
nesne dosyası.
-fpic
Aşağıdaki durumlarda, paylaşılan bir kitaplıkta kullanıma uygun konumdan bağımsız kod (PIC) oluşturun.
hedef makine için desteklenir. Bu kod, tüm sabit adreslere bir
küresel ofset tablosu (GOT). Dinamik yükleyici, aşağıdaki durumlarda GOT girişlerini çözer.
program başlar (dinamik yükleyici GCC'nin bir parçası değildir; işletim sisteminin bir parçasıdır)
sistem). Bağlantılı yürütülebilir dosyanın GOT boyutu makineye özel bir maksimum değeri aşarsa
boyutunda, bağlayıcıdan şunu belirten bir hata mesajı alırsınız. -fpic çalışmıyor; içinde
bu durumda, ile yeniden derleyin -fPIC Bunun yerine. (Bu maksimum değerler SPARC'ta 8k ve 32k'dir.
m68k ve RS/6000'de. 386'nın böyle bir sınırı yoktur.)
Konumdan bağımsız kod özel destek gerektirir ve bu nedenle yalnızca
belirli makineler. 386 için GCC, System V için PIC'yi destekler, ancak Sun için desteklemez
386i. IBM RS/6000 için oluşturulan kod her zaman konumdan bağımsızdır.
Bu bayrak ayarlandığında, "__pic__" ve "__PIC__" makroları 1 olarak tanımlanır.
-fPIC
Hedef makine için destekleniyorsa, aşağıdakiler için uygun konumdan bağımsız kod yayınlayın.
dinamik bağlama ve global ofset tablosunun boyutunda herhangi bir sınırlamadan kaçınma. Bu
seçeneği m68k, PowerPC ve SPARC'ta fark yaratır.
Konumdan bağımsız kod özel destek gerektirir ve bu nedenle yalnızca
belirli makineler.
Bu bayrak ayarlandığında, "__pic__" ve "__PIC__" makroları 2 olarak tanımlanır.
-fpie
-fPIE
Bu seçenekler benzer -fpic ve -fPIC, ancak oluşturulan konumdan bağımsız kod
yalnızca yürütülebilir dosyalara bağlanabilir. Genellikle bu seçenekler şu durumlarda kullanılır: -turta GCC
seçeneği bağlantı sırasında kullanılır.
-fpie ve -fPIE her ikisi de "__pie__" ve "__PIE__" makrolarını tanımlar. Makroların sahip olduğu
için değer 1 -fpie Ve için 2 -fPIE.
-fno-atlama-tabloları
Daha verimli olacağı yerlerde bile switch ifadeleri için atlama tabloları kullanmayın
diğer kod oluşturma stratejilerinden daha fazla. Bu seçenek aşağıdakilerle birlikte kullanılır:
-fpic or -fPIC dinamik bir bağlayıcının parçasını oluşturan ve yapamayan kod oluşturmak için
bir atlama tablosunun adresini referans alın. Bazı hedeflerde, atlama tabloları için bir
GOT ve bu seçeneğe gerek yok.
-sabitlenmiş-reg
adlı kaydı tedavi et reg sabit kayıt olarak; oluşturulan kod asla başvurmamalıdır
(belki bir yığın işaretçisi, çerçeve işaretçisi veya başka bir sabit rol dışında).
reg bir kaydın adı olmalıdır. Kabul edilen kayıt adları makineye özeldir
ve makine açıklama makro dosyasındaki "REGISTER_NAMES" makrosunda tanımlanır.
Bu bayrağın negatif bir formu yoktur, çünkü üç yönlü bir seçim belirtir.
-fcall-kullanılmış-reg
adlı kaydı tedavi et reg işlev tarafından engellenen tahsis edilebilir bir kayıt olarak
aramalar. Bir bölgede yaşamayan geçiciler veya değişkenler için tahsis edilebilir.
Arama. Bu şekilde derlenen işlevler kaydı kaydetmez ve geri yüklemez reg.
Bu bayrağı çerçeve işaretçisi veya yığın işaretçisi ile kullanmak bir hatadır. Bunun kullanımı
makinenin yürütülmesinde sabit yaygın rollere sahip diğer kayıtlar için bayrak
model feci sonuçlar doğurur.
Bu bayrağın negatif bir formu yoktur, çünkü üç yönlü bir seçim belirtir.
-fcall-kaydedildi-reg
adlı kaydı tedavi et reg işlevler tarafından kaydedilen tahsis edilebilir bir kayıt olarak. Olabilir
bir çağrı boyunca yaşayan geçiciler veya değişkenler için bile tahsis edilmiştir. Fonksiyonlar
bu şekilde derlenmiş, kaydı kaydedin ve geri yükleyin reg eğer kullanırlarsa.
Bu bayrağı çerçeve işaretçisi veya yığın işaretçisi ile kullanmak bir hatadır. Bunun kullanımı
makinenin yürütülmesinde sabit yaygın rollere sahip diğer kayıtlar için bayrak
model feci sonuçlar doğurur.
Bu bayrağın bir kayıt için kullanılmasından farklı bir felaket türü ortaya çıkar.
fonksiyon değerleri döndürülebilir.
Bu bayrağın negatif bir formu yoktur, çünkü üç yönlü bir seçim belirtir.
-fpack-yapısı[=n]
Belirtilen bir değer olmadan, tüm yapı elemanlarını deliksiz olarak paketleyin. Zaman
değer belirtilir (ikinin küçük bir kuvveti olmalıdır), paket yapı elemanları
maksimum hizalamayı temsil eden bu değere göre (yani,
bundan daha büyük varsayılan hizalama gereksinimleri, potansiyel olarak hizalanmamış çıktılardır
sonraki montaj yeri.
Uyarı: the -fpack-yapı anahtar, GCC'nin ikili olmayan kod oluşturmasına neden olur
bu anahtar olmadan oluşturulan kodla uyumludur. Ek olarak, kodu yapar
standart altı. Varsayılan olmayan bir uygulama ikili arabirimine uymak için kullanın.
-enstrüman-fonksiyonları
Fonksiyonlara giriş ve çıkış için enstrümantasyon çağrıları oluşturun. fonksiyondan hemen sonra
giriş ve işlev çıkışından hemen önce, aşağıdaki profil oluşturma işlevleri şu şekilde çağrılır:
geçerli işlevin adresi ve çağrı sitesi. (Bazı platformlarda,
"__builtin_return_address" mevcut işlevin ötesinde çalışmıyor, bu nedenle çağrı sitesi
aksi takdirde profil oluşturma işlevleri için bilgi mevcut olmayabilir.)
geçersiz __cyg_profile_func_enter (geçersiz *this_fn,
geçersiz *call_site);
geçersiz __cyg_profile_func_exit (geçersiz *this_fn,
geçersiz *call_site);
İlk argüman, geçerli işlevin başlangıcının adresidir.
tam olarak sembol tablosuna baktı.
Bu enstrümantasyon, diğer işlevlerde satır içi genişletilmiş işlevler için de yapılır.
Profil oluşturma çağrıları, kavramsal olarak satır içi işlevin nereye girildiğini ve
çıktı. Bu, bu tür işlevlerin adreslenebilir sürümlerinin mevcut olması gerektiği anlamına gelir. Eğer
bir işlevi tüm kullanımlarınız satır içi olarak genişletilir, bu ek bir genişletme anlamına gelebilir
kod boyutunda. Eğer kullanırsan stajyer doktor inline C kodunuzda, bunun adreslenebilir bir versiyonu
fonksiyonları sağlanmalıdır. (Normalde durum böyledir ama şansınız yaver giderse
ve optimize edici her zaman işlevleri satır içi olarak genişletir, kaçmış olabilirsiniz
statik kopyalar sağlamadan.)
Bir işleve "no_instrument_function" niteliği verilebilir, bu durumda bu
enstrümantasyon yapılmaz. Bu, örneğin profil oluşturma için kullanılabilir.
yukarıda listelenen işlevler, yüksek öncelikli kesme rutinleri ve hangi işlevlerden
profil oluşturma işlevleri güvenli bir şekilde çağrılamaz (eğer
profil oluşturma rutinleri çıktı üretir veya bellek ayırır).
-finstrument-fonksiyonlar-hariç tutma-dosya listesi=dosya,dosya, ...
Enstrümantasyondan hariç tutulan işlevlerin listesini ayarlayın (açıklamaya bakın)
"-finstrument-fonksiyonları"). Bir işlev tanımını içeren dosya eşleşirse
bunlardan biriyle dosya, o zaman bu işlev aletli değildir. maç yapılır
alt dizeler: eğer dosya parametre dosya adının bir alt dizisidir,
maç ol.
Örneğin:
-finstrument-functions-exclude-file-list=/bits/stl,include/sys
yol adları "/bits/stl" içeren dosyalarda tanımlanan herhangi bir satır içi işlevi hariç tutar veya
"dahil/sys".
Herhangi bir nedenle, ',' harfini aşağıdakilerden birine eklemek isterseniz, sym, yazı yazmak ','. İçin
örneğin, "-finstrument-functions-exclude-file-list=',,tmp'" (tek alıntıya dikkat edin
seçeneği çevreleyen).
-finstrument-fonksiyonları-hariç tutma-fonksiyonu-listesi=sym,sym, ...
Bu, "-finstrument-functions-exclude-file-list"e benzer, ancak bu seçenek
enstrümantasyondan hariç tutulacak fonksiyon adlarının listesi. işlev adı
eşleştirilmesi, "vektör" gibi kullanıcı tarafından görülebilen adıdır. falan(sabit vektör &)",
dahili karışık ad değil (örneğin, "_Z4blahRSt6vectorIiSaIiEE"). maç bitti
alt dizelerde: eğer sym parametre, işlev adının bir alt dizesidir,
maç olarak kabul edilir. C99 ve C++ genişletilmiş tanımlayıcıları için işlev adı
evrensel karakter adları kullanılmadan UTF-8'de verilmelidir.
-fstack-kontrol
Yığın sınırlarının ötesine geçmediğinizi doğrulamak için kod oluşturun. Sen
birden çok iş parçacığına sahip bir ortamda çalışıyorsanız bu bayrağı belirtmelisiniz,
ancak yığından beri tek iş parçacıklı bir ortamda nadiren belirtmeniz gerekir.
yalnızca bir yığın varsa, taşma hemen hemen tüm sistemlerde otomatik olarak algılanır.
Bu anahtarın aslında kontrolün yapılmasına neden olmadığına dikkat edin; işletim
sistem veya dil çalışma zamanı bunu yapmalıdır. Anahtar, kod üretilmesine neden olur
yığının uzatıldığını görmelerini sağlayın.
Ek olarak bir dize parametresi belirleyebilirsiniz: "no" kontrol yok anlamına gelir, "jenerik"
eski tarz kontrol kullanımını zorlamak anlamına gelir, "özel" en iyi kontrolü kullanmak anlamına gelir
yöntem ve çıplak eşdeğerdir -fstack-kontrol.
Eski tarz kontrol, belirli bir hedef desteği gerektirmeyen genel bir mekanizmadır.
derleyici ancak aşağıdaki dezavantajlarla birlikte gelir:
1. Büyük nesneler için değiştirilmiş tahsis stratejisi: her zaman tahsis edilirler
boyutları sabit bir eşiği aşarsa dinamik olarak.
2. Statik fonksiyon çerçevesinin boyutundaki sabit sınır: tepesinde bir
belirli bir işlev, yığın denetimi güvenilir değildir ve sistem tarafından bir uyarı verilir.
derleyici.
3. Verimsizlik: hem değiştirilmiş tahsis stratejisi hem de genel
uygulama, kod performansı engellenir.
Eski tarz yığın denetiminin aynı zamanda "belirli" için geri dönüş yöntemi olduğunu unutmayın.
derleyiciye hedef desteği eklendi.
-fstack-limit-kayıt=reg
-fstack-limit-sembol=sym
-fno-yığın limiti
Yığının belirli bir değerin ötesine geçmemesini sağlamak için kod oluşturun.
bir kaydın değeri veya bir sembolün adresi. Daha büyük bir yığın gerekirse, bir
sinyal çalışma zamanında yükseltilir. Çoğu hedef için, sinyal yığından önce yükseltilir.
sınırı aşar, bu nedenle özel sinyal almadan sinyali yakalamak mümkündür.
önlemler.
Örneğin, yığın mutlak adreste başlarsa 0x80000000 ve aşağı doğru büyür,
bayrakları kullanabilirsin -fstack-limit-symbol=__stack_limit ve
-Wl,--defsym,__stack_limit=0x7ffe0000 128 KB yığın sınırını zorlamak için. Bunu not et
bu sadece GNU linker ile çalışabilir.
-fsplit-yığın
Yığını taşmadan önce otomatik olarak bölmek için kod oluşturun. Sonuç
program, yalnızca program yapamıyorsa taşabilen bitişik olmayan bir yığına sahiptir.
daha fazla bellek ayırın. Bu, en çok iş parçacıklı programları çalıştırırken kullanışlıdır, çünkü
her bir iş parçacığı için kullanılacak iyi bir yığın boyutunu hesaplamak artık gerekli değildir. Bu
şu anda yalnızca GNU/Linux çalıştıran i386 ve x86_64 arka uçları için uygulanmaktadır.
Kod ile derlendiğinde -fsplit-yığın olmadan derlenmiş kodu çağırır -fsplit-yığın, Orada
ikinci kodun çalışması için fazla yığın alanı olmayabilir. hepsini derlerseniz
kütüphane kodu da dahil olmak üzere kod, -fsplit-yığın bir seçenek değilse, bağlayıcı
bu çağrıları düzeltin, böylece kod derlenmeden -fsplit-yığın her zaman büyük
yığın. Bunun için destek, GNU binutils sürümündeki altın bağlayıcıda uygulanmaktadır.
2.21 ve sonrası.
-geçen-alt çizgi
Bu seçenek ve karşılığı, -fno-önde gelen-alt çizgi, C yolunu zorla değiştir
semboller nesne dosyasında temsil edilir. Bir kullanım, eski ile bağlantı kurmaya yardımcı olmaktır
montaj kodu.
Uyarı: the -geçen-alt çizgi anahtarı, GCC'nin olmayan kod oluşturmasına neden olur
bu anahtar olmadan oluşturulan kodla ikili uyumlu. Bir
varsayılan olmayan uygulama ikili arabirimi. Tüm hedefler tam destek sağlamaz
bu anahtar için.
-ftls-modeli=model
Kullanılacak iş parçacığı yerel depolama modelini değiştirin. NS model argüman şunlardan biri olmalı
"global-dinamik", "yerel-dinamik", "ilk-yürütme" veya "yerel-yürütme".
olmadan varsayılan -fpic "ilk-yürütme" dir; ile birlikte -fpic varsayılan
"küresel-dinamik".
-fgörünürlük=varsayılan|dahili|gizli|korumalı
Varsayılan ELF görüntü sembolü görünürlüğünü belirtilen seçeneğe ayarlayın --- tüm semboller
kod içinde geçersiz kılınmadıkça bununla işaretlenir. Bu özelliği kullanmak çok
paylaşılan nesne kitaplıklarının bağlantı ve yükleme sürelerini önemli ölçüde iyileştirin, daha fazlasını üretin
optimize edilmiş kod, mükemmele yakın API dışa aktarımı sağlar ve sembol çakışmalarını önler. Bu
şiddetle bunu dağıttığınız tüm paylaşılan nesnelerde kullanmanız önerilir.
Adlandırmaya rağmen, "varsayılan" her zaman genel anlamına gelir; yani, bağlantı kurulabilir
paylaşılan nesnenin dışından karşı. "korumalı" ve "dahili" oldukça işe yaramaz
gerçek dünya kullanımında, bu nedenle yaygın olarak kullanılan diğer tek seçenek "gizli" dir. Varsayılan
if -görünürlük belirtilmemiş "varsayılan"dır, yani her sembolü genel yapın --- bu
GCC'nin önceki sürümleriyle aynı davranışa neden olur.
ELF sembollerinin doğru değerlere sahip olmasını sağlamanın sunduğu faydaların iyi bir açıklaması
görünürlük, Ulrich Drepper tarafından yazılan "Paylaşılan Kitaplıklar Nasıl Yazılır" (ki bu
bulunanhttp://people.redhat.com/~drepper/>>)---ancak üstün bir çözüm yapılmış
bu seçenek ile mümkün olan şeyleri gizli olarak işaretlemek varsayılan olduğunda genel yapmaktır.
varsayılan gizli ve her şeyi herkese açık olarak işaretleyin. Bu, Windows'ta DLL'lerle ilgili normdur ve
ile -fvisibility=gizli ve "__attribute__ ((visibility("varsayılan")))" yerine
"__declspec(dllexport)" ile aynı sözdizimi ile neredeyse aynı anlambilimi elde edersiniz.
Bu, platformlar arası projelerle çalışanlar için büyük bir nimet.
Mevcut koda görünürlük desteği ekleyenler için şunları bulabilirsiniz: #pragma GCC
görünürlük kullanım. Bu, ayarlamak istediğiniz bildirimleri ekleyerek sizin tarafınızdan çalışır.
ile görünürlük (örneğin) #pragma GCC görünürlük itmek(gizli) ve #pragma GCC
görünürlük pop. Sembol görünürlüğünün görülmesi gerektiğini unutmayın as Bölüm of the
API arayüzey sözleşme ve bu nedenle tüm yeni kodlar her zaman görünürlüğü belirtmelidir.
varsayılan değil; yani, yalnızca yerel DSO içinde kullanım için bildirimler her zaman
PLT dolaylı yüklerinden kaçınmak için açıkça gizli olarak işaretlenmelidir --- bunu yapmak
çok net ayrıca kodun okunabilirliğine ve kendi kendine belgelenmesine yardımcı olur. Bunu not et
ISO C++ spesifikasyon gereksinimleri nedeniyle, "operatör yeni" ve "operatör silme"
her zaman varsayılan görünürlükte olun.
Projenizin dışından gelen başlıkların, özellikle sistem başlıklarının ve
kullandığınız diğer herhangi bir kitaplıktan gelen başlıklar ile derlenmeyi beklemeyebilir
varsayılan dışındaki görünürlük. Açıkça söylemeniz gerekebilir #pragma GCC
görünürlük it (varsayılan) bu tür başlıkları eklemeden önce.
stajyer doktor beyannameler etkilenmez -görünürlük, bu yüzden çok fazla kod olabilir
ile yeniden derlenmiş -fvisibility=gizli hiçbir değişiklik olmadan. Ancak bunun anlamı şudur:
açık bir görünürlüğü olmayan "harici" işlevlere yapılan çağrılar PLT'yi kullanır, bu nedenle daha
anlatmak için "__attribute ((görünürlük))" ve/veya "#pragma GCC görünürlüğü" kullanmak için etkilidir
"harici" bildirimlerin gizli olarak ele alınması gereken derleyici.
Bunu not et -görünürlük C++ belirsiz bağlantı varlıklarını etkiler. Bunun anlamı,
örneğin, DSO'lar arasında oluşturulan bir istisna sınıfı açıkça işaretlenmelidir.
varsayılan görünürlük ile type_info düğümler DSO'lar arasında birleştirilir.
Bu tekniklere, faydalarına ve nasıl kullanılacağına ilişkin genel bir bakış şu adrestedir:
<http://gcc.gnu.org/wiki/Visibility>.
-fstrict-uçucu-bit alanları
Bu seçenek, geçici bit alanlarına (veya diğer yapılara) erişim varsa kullanılmalıdır.
alanlar, derleyici genellikle bu türleri zaten kabul etse de) tek bir
mümkünse doğal bir hizalamaya hizalanmış alan türünün genişliğine erişim.
Örneğin, bellek eşlemeli çevresel kayıtlara sahip hedefler, bu tür tüm işlemleri gerektirebilir.
16 bit genişliğe erişim; bu bayrakla tüm çevresel bit alanlarını bildirebilirsiniz
GCC'yi kullanmaya zorlamak için "imzasız kısa" olarak (kısa olduğu varsayılarak bu hedeflerde 16 bit)
Belki daha verimli bir 16-bit erişim yerine 32-bit erişim.
Bu seçenek devre dışı bırakılırsa, derleyici en verimli talimatı kullanır. İçinde
önceki örnekte, bu erişime rağmen 32 bitlik bir yükleme talimatı olabilir.
bit alanının herhangi bir bölümünü içermeyen baytlar veya bellek eşlemeli kayıtlar
güncellenenle alakası yok.
Hedef katı bir hizalama gerektiriyorsa ve alan türünü onurlandırmak için
bu hizalamayı ihlal eden bir uyarı verilir. Alanın "paketlenmiş" özelliği varsa,
erişim, alan türü dikkate alınmadan yapılır. alan yoksa
"paketlenmiş" özniteliği, erişim alan türü dikkate alınarak yapılır. Her iki durumda da GCC
kullanıcının hedef donanım hakkında bilmediği bir şey bildiğini varsayar.
Bu seçeneğin varsayılan değeri, uygulama ikili arabirimi tarafından belirlenir.
hedef işlemci
-fsync-libçağrıları
Bu seçenek, "__sync" ailesinin herhangi bir hat dışı örneğinin olup olmadığını kontrol eder.
işlevler, C++11 "__atomic" işlev ailesini uygulamak için kullanılabilir.
Bu seçeneğin varsayılan değeri etkindir, bu nedenle seçeneğin tek yararlı biçimi
is -fno-sync-libçağrıları. Bu seçenek, uygulamanın uygulanmasında kullanılır. libatom
çalışma zamanı kitaplığı.
ÇEVRE
Bu bölüm, GCC'nin nasıl çalıştığını etkileyen birkaç ortam değişkenini açıklar. Biraz
bunların çoğu, çeşitli türleri ararken kullanılacak dizinleri veya önekleri belirleyerek çalışır.
dosya sayısı. Bazıları derleme ortamının diğer yönlerini belirtmek için kullanılır.
gibi seçenekleri kullanarak aranacak yerleri de belirtebileceğinizi unutmayın. -B, -I ve -L.
Bunlar, ortam değişkenleri kullanılarak belirtilen yerlere göre önceliklidir, bu da sırayla
GCC yapılandırması tarafından belirtilenlere göre önceliklidir.
DİL
LC_CTYPE
LC_MESSAGES
LC_ALL
Bu ortam değişkenleri, GCC'nin yerelleştirme bilgilerini kullanma şeklini kontrol eder.
Bu, GCC'nin farklı ulusal sözleşmelerle çalışmasına izin verir. GCC yerel ayarı inceler
kategoriler LC_CTYPE ve LC_MESSAGES bunu yapmak için yapılandırılmışsa. Bu yerel ayarlar
kategoriler, kurulumunuz tarafından desteklenen herhangi bir değere ayarlanabilir. Tipik bir değer
en_GB.UTF-8 UTF-8 ile kodlanmış Birleşik Krallık'taki İngilizce için.
The LC_CTYPE ortam değişkeni karakter sınıflandırmasını belirtir. GCC bunu kullanır
bir dizideki karakter sınırlarını belirlemek; bu bazı çok baytlar için gereklidir
olarak yorumlanan alıntı ve kaçış karakterlerini içeren kodlamalar.
dize sonu veya kaçış.
The LC_MESSAGES ortam değişkeni, tanılamada kullanılacak dili belirtir
mesajları.
Eğer LC_ALL ortam değişkeni ayarlandığında, değerini geçersiz kılar LC_CTYPE ve
LC_MESSAGES; aksi takdirde, LC_CTYPE ve LC_MESSAGES varsayılan değere DİL
Çevre değişkeni. Bu değişkenlerden hiçbiri ayarlanmazsa, GCC varsayılan olarak geleneksel
C İngilizce davranışı.
TMPDIR
If TMPDIR ayarlanırsa, geçici dosyalar için kullanılacak dizini belirtir. GCC kullanır
olarak kullanılacak olan bir derleme aşamasının çıktısını tutan geçici dosyalar
bir sonraki aşamaya girdi: örneğin, önişlemcinin çıktısı, yani
derleyiciye uygun girdi.
GCC_COMPARE_DEBUG
ayar GCC_COMPARE_DEBUG geçmekle neredeyse eşdeğerdir -fcompare-hata ayıklama için
derleyici sürücüsü. Daha fazla ayrıntı için bu seçeneğin belgelerine bakın.
GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX ayarlanırsa, adlarında kullanılacak bir önek belirtir.
derleyici tarafından yürütülen alt programlar. Bu önek birleştirildiğinde eğik çizgi eklenmez
bir alt programın adıyla, ancak aşağıdaki durumlarda eğik çizgi ile biten bir önek belirtebilirsiniz.
diliyorum.
If GCC_EXEC_PREFIX ayarlanmadıysa, GCC kullanılacak uygun bir önek bulmaya çalışır.
çağrıldığı yol adına göre.
GCC, belirtilen öneki kullanarak alt programı bulamazsa,
alt program için olağan yerler.
varsayılan değeri GCC_EXEC_PREFIX is önek/lib/gcc/ nerede önek önek
yüklü derleyici. Çoğu durumda önek çalıştırdığınızda "ön ek" değeridir
yapılandırmak komut.
ile belirtilen diğer önekler -B bu önek üzerinde öncelik alır.
Bu önek aynı zamanda aşağıdaki gibi dosyaları bulmak için de kullanılır. crt0.o bağlamak için kullanılanlardır.
Ayrıca önek, aranacak dizinleri bulmada alışılmadık bir şekilde kullanılır.
başlık dosyaları için. Adı normalde başlayan standart dizinlerin her biri için
ile /usr/yerel/lib/gcc (daha doğrusu, değeri ile GCC_INCLUDE_DIR), GCC denemeleri
alternatif bir dizin oluşturmak için bu başlangıcı belirtilen önekle değiştirmek
isim. Böylece, -bfoo/, GCC aramaları foo/çubuk standardı aramadan hemen önce
rehber /usr/yerel/lib/bar. Standart bir dizin yapılandırılan ile başlarsa
önek o zaman değeri önek tarafından değiştirilir GCC_EXEC_PREFIX başlık ararken
dosyaları.
Derleyici_PATH
Değeri Derleyici_PATH iki nokta üst üste ayrılmış bir dizin listesidir, tıpkı PATH.
GCC, alt programları ararken bu şekilde belirtilen dizinleri dener, eğer yapamazsa
kullanarak alt programları bulun GCC_EXEC_PREFIX.
KÜTÜPHANE_PATH
Değeri KÜTÜPHANE_PATH iki nokta üst üste ayrılmış bir dizin listesidir, tıpkı PATH.
Yerel bir derleyici olarak yapılandırıldığında, GCC, aşağıdaki durumlarda belirtilen dizinleri dener:
kullanarak bulamazsa, özel bağlayıcı dosyaları aramak GCC_EXEC_PREFIX.
GCC kullanarak bağlama, sıradan kitaplıkları ararken de bu dizinleri kullanır.
için -l seçeneği (ancak ile belirtilen dizinler -L önce gel).
DİL
Bu değişken, yerel ayar bilgilerini derleyiciye iletmek için kullanılır. Bunun bir yolu
Bu bilgi karakter kullanıldığında kullanılacak karakter setini belirlemek içindir.
değişmez değerler, dize değişmezleri ve yorumlar C ve C++'da ayrıştırılır. derleyici olduğunda
çok baytlı karakterlere izin verecek şekilde yapılandırılmış, aşağıdaki değerler DİL vardır
tanınan:
C-JIS
JIS karakterlerini tanır.
C-SJIS
SJIS karakterlerini tanır.
C-EUCJP
EUCJP karakterlerini tanır.
If DİL tanımlı değil veya başka bir değeri varsa, derleyici "mblen" kullanır.
ve "mbtowc", varsayılan yerel ayar tarafından çok baytları tanımak ve çevirmek için tanımlandığı şekilde
karakterler.
Bazı ek ortam değişkenleri, önişlemcinin davranışını etkiler.
CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
Her değişkenin değeri, özel bir karakterle ayrılmış dizinlerin bir listesidir.
sevmek PATH, başlık dosyalarının aranacağı yer. Özel karakter,
"PATH_SEPARATOR", hedefe bağlıdır ve GCC oluşturma zamanında belirlenir. Microsoft için
Windows tabanlı hedefler bir noktalı virgüldür ve neredeyse tüm diğer hedefler için bir
kolon.
CPATH ile belirtilmiş gibi aranacak dizinlerin bir listesini belirtir. -I, fakat
ile verilen herhangi bir yoldan sonra -I komut satırındaki seçenekler. Bu ortam değişkeni
hangi dilin önceden işlendiğine bakılmaksızın kullanılır.
Kalan ortam değişkenleri yalnızca belirli bir önişleme yapılırken geçerlidir.
belirtilen dil. Her biri, sanki aranacak dizinlerin bir listesini belirtir.
ile belirtilen -isistem, ancak verilen herhangi bir yoldan sonra -isistem seçenekleri
Komut satırı.
Tüm bu değişkenlerde, boş bir öğe derleyiciye mevcut değerini aramasını söyler.
çalışma dizini. Boş öğeler bir yolun başında veya sonunda görünebilir. İçin
örneğin, eğer değeri CPATH ile aynı etkiye sahip olan ":/özel/include"
-BEN. -I/özel/dahil.
DEPENDENCECIES_OUTPUT
Bu değişken ayarlanırsa, değeri, Make tabanlı için bağımlılıkların nasıl çıktı alınacağını belirtir.
derleyici tarafından işlenen sistem dışı başlık dosyalarında. Sistem başlık dosyaları
bağımlılık çıktısında yoksayılır.
Değeri DEPENDENCECIES_OUTPUT sadece bir dosya adı olabilir, bu durumda Yap kuralları
kaynak dosya adından hedef adını tahmin ederek o dosyaya yazılır. Ya da
değer forma sahip olabilir dosya hedef, bu durumda kurallar dosyaya yazılır dosya
kullanma hedef hedef adı olarak
Başka bir deyişle, bu ortam değişkeni seçenekleri birleştirmeye eşdeğerdir. -MM
ve -MF, isteğe bağlı -MT de geçiş yapın.
SUNPRO_DEPENDERCIES
Bu değişken aynı DEPENDENCECIES_OUTPUT (yukarıya bakın), bu sistem hariç
başlık dosyaları göz ardı edilmez, bu nedenle -M ziyade -MM. Bununla birlikte,
ana girdi dosyasına bağımlılık atlanır.
onworks.net hizmetlerini kullanarak aarch64-linux-gnu-g++-4.8'i çevrimiçi kullanın