Đây là lệnh aarch64-linux-gnu-g ++ - 4.8 có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
gcc - trình biên dịch C và C ++ của dự án GNU
SYNOPSIS
gcc [-c|-S|-E] [-std =Tiêu chuẩn]
[-g] [-pg] [-Ocấp]
[-Wcảnh báo...] [-Quảng cáo]
[-Idir...] [-Ldir...]
[-Dvĩ mô[=định nghĩa] ...] [-Uvĩ mô]
[-ftùy chọn...] [-mtùy chọn máy...]
[-o ô uế] [@hồ sơ] trong tập tin...
Chỉ những tùy chọn hữu ích nhất được liệt kê ở đây; xem phần còn lại bên dưới. g ++ chấp nhận
chủ yếu là các tùy chọn giống như gcc.
MÔ TẢ
Khi bạn gọi GCC, nó thường thực hiện tiền xử lý, biên dịch, lắp ráp và liên kết.
"Các tùy chọn tổng thể" cho phép bạn dừng quá trình này ở giai đoạn trung gian. Vì
ví dụ -c tùy chọn cho biết không chạy trình liên kết. Sau đó, đầu ra bao gồm đối tượng
các tệp do trình hợp dịch xuất ra.
Các tùy chọn khác được chuyển sang một giai đoạn xử lý. Một số tùy chọn kiểm soát
bộ tiền xử lý và các bộ biên dịch khác. Tuy nhiên, các tùy chọn khác kiểm soát trình lắp ráp và
người liên kết; hầu hết trong số này không được ghi lại ở đây, vì bạn hiếm khi cần sử dụng bất kỳ cái nào trong số chúng.
Hầu hết các tùy chọn dòng lệnh mà bạn có thể sử dụng với GCC đều hữu ích cho các chương trình C; khi nào
một tùy chọn chỉ hữu ích với một ngôn ngữ khác (thường là C ++), giải thích cho biết như vậy
một cách rõ ràng. Nếu mô tả cho một tùy chọn cụ thể không đề cập đến nguồn
ngôn ngữ, bạn có thể sử dụng tùy chọn đó với tất cả các ngôn ngữ được hỗ trợ.
Sản phẩm gcc chương trình chấp nhận các tùy chọn và tên tệp là toán hạng. Nhiều lựa chọn có nhiều
tên chữ cái; do đó nhiều tùy chọn gồm một chữ cái có thể không được nhóm lại: -đv rất là
khác nhau từ -d -v.
Bạn có thể kết hợp các tùy chọn và các đối số khác. Đối với hầu hết các phần, thứ tự bạn sử dụng không
Vân đê. Thứ tự không quan trọng khi bạn sử dụng một số tùy chọn cùng loại; ví dụ, nếu
bạn chỉ định -L nhiều hơn một lần, các thư mục được tìm kiếm theo thứ tự được chỉ định. Cũng,
vị trí của -l tùy chọn là đáng kể.
Nhiều tùy chọn có tên dài bắt đầu bằng -f Hoặc với -W---Ví dụ,
-fmove-loop-bất biến, - Định dạng và như thế. Hầu hết trong số này có cả tích cực và tiêu cực
các hình thức; dạng phủ định của -foo is -fno-foo. Tài liệu hướng dẫn này chỉ một trong những
hai biểu mẫu, chọn biểu mẫu nào không phải là biểu mẫu mặc định.
LỰA CHỌN
Tùy chọn Tổng kết
Đây là bản tóm tắt của tất cả các tùy chọn, được nhóm theo loại. Giải thích ở phần sau
phần.
Tổng thể Các lựa chọn
-c -S -E -o hồ sơ -no-canonical-tiền tố -ống -pass-exit-mã -x Ngôn ngữ -v
- ### --Cứu giúp[=tốt nghiệp lớp XNUMX[, ...]] - mục tiêu-trợ giúp --phiên bản -vỏ bánh @hồ sơ -fplugin =hồ sơ
-fplugin-arg-tên=arg -fdump-ada-spec[-mảnh khảnh] -fada-spec-parent =đơn vị
-fdump-go-spec =hồ sơ
C Ngôn ngữ Các lựa chọn
-ansi -std =Tiêu chuẩn -fgnu89-nội tuyến -aux-thông tin tên tập tin
-fallow-parameterless-variadic-hàm -fno-asm -fno-nội trang -fno-nội trang-chức năng
-Fhosted -chỉ cần -fopenmp -fms-phần mở rộng -fplan9-phần mở rộng -trigraphs
-truyên thông -truyền thống-cpp -fallow-độ chính xác đơn -fcond-không khớp
-flax-vector-chuyển đổi -fsigned-bitfield -signed-char -funsigned-bitfields
-funsigned-char
C + + Ngôn ngữ Các lựa chọn
-fabi-phiên bản =n -fno-kiểm soát truy cập -fcheck-mới -fconstexpr-depth =n
-bạn gái-tiêm -fno-elide-constructor -fno-thi hành-eh-specs -for-scope
-fno-cho-phạm vi -fno-gnu-từ khóa -fno-implicit-template
-fno-implicit-inline-template -fno-triển khai-nội tuyến -fms-phần mở rộng
-fno-nonansi-nội trang -fnothrow-opt -fno-toán tử-tên -fno-tùy chọn-đường chéo
-dễ dàng -fno-đẹp-mẫu -frepo -fno-rtti -fstats
-ftemplate-backtrace-limit =n -ftemplate-depth =n -fno-threadsafe-statics
-cầu chì-cxa-atexit -không-yếu -nostdinc ++ -fno-mặc định-nội tuyến
-fvisibility-inlines-hidden -fvisibility-ms-compat -fext-số-chữ -Wabi
-Wconversion-null -Wctor-dtor-Privacy -Xóa-không-ảo-dtor Hậu tố -Wliteral
-Răng mọc -Không ngoại trừ -Wnon-ảo-dtor -Đặt hàng -Weffc ++ -Wstrict-null-sentinel
-Wno-non--template-friend -Phim kiểu vàng -Quá tải-ảo -Không-pmf-chuyển đổi
-Quảng cáo thiết kế
Mục tiêu-C và Objective-C ++ Ngôn ngữ Các lựa chọn
-fconstant-string-class =tên lớp -fgnu-thời gian chạy -fnext-thời gian chạy -fno-nil-receiver
-fobjc-abi-version =n -fobjc-gọi-cxx-cdtor -fobjc-direct-send -fobjc-ngoại lệ
-fobjc-gc -fobjc-nilcheck -fobjc-std = objc1 -freplace-objc-class -fzero-liên kết
-gen-decls -Giao-chặn -Không giao thức -Máy đục - Đối sánh với bộ chọn giới hạn
-Wundeclared-selector
Ngôn ngữ Độc lập Các lựa chọn
-fmessage-length =n -fdiagnostics-show-location =[hàng loạt|Mỗi dòng]
-fno-chẩn đoán-hiển thị-tùy chọn -fno-chẩn đoán-hiển thị-dấu mũ
Cảnh báo Các lựa chọn
-chỉ tổng hợp -fmax-error =n -Quảng cáo -pedantic-error -w -Wextra -Tường
-Quần áo -Tổng hợp-lợi nhuận -Tối ưu hóa vòng lặp vi phạm -Warray-giới hạn
-Không thuộc tính -Wno-builtin-macro-xác định lại -Wc ++ - tính toán -Wc ++ 11-compat -Wcast-căn chỉnh
-Chất lượng phát sóng -Wchar-đăng ký -Vòng bọc -Nhận xét -Chuyển đổi -Phù hợp-không phù hợp
-Wno-cpp -Không bị phản đối -Không được sử dụng-khai báo -Tối ưu hóa-vô hiệu hóa
-Wno-div-by-zero -Khuyến mãi nhân đôi -Vân đẹp -Wenum-so sánh -Không-endif-nhãn
- Lỗi -Werror = * -Watal-error - Bằng phẳng - Định dạng -Wformat = 2
-Wno-format-chứa-nul -Wno-format-extra-args -Wformat-không chữ - Định dạng-bảo mật
-Wformat-y2k -Wframe-large-than =len -Wno-free-nonheap-đối tượng -Wjump-miss-init
- Vòng loại được đánh giá cao -Gợi ý -Khai báo-chức năng rõ ràng -Wimplicit-int
-Đơn vị tự -Mạch -Có thể chưa được khởi tạo -Wno-int-to-con trỏ-cast
-Không-không hợp lệ-bù trừ -Winvalid-pch -Wlarger-than =len -Tối ưu hóa vòng lặp an toàn
-Op-op - Dài -Chính -Có thể chưa được khởi tạo -Kẹp niềng răng
-Wmissing-field-khởi tạo -Chạy-bao-gồm-dirs -Không có bãi bồi -Wno-multihar
-Wonnull -Không tràn -Chiều dài-dây -Đóng gói -Wpack-bitfield-compat
-Đánh giá - Dấu ngoặc đơn -Dạng đại dương-ms-định dạng -Không có định dạng pedantic-ms-định dạng -Wpointer-arith
-Wno-con trỏ tới int-cast -Wredundant-từ chối -Wno-return-local-addr -Kiểu quay
-Điểm trình tự -Chụp xuống -Sign-so sánh -Chuyển đổi-ký hiệu
-Wsizeof-con trỏ-memaccess -Bộ bảo vệ bao -Wstack-use =len -Giá răng cưa
-Wstrict-aliasing = n -Ngăn tràn -Wstrict-tràn =n
-Wsuggest-thuộc tính =[tinh khiết|const|không trở lại|định dạng] - Thuộc tính-format -missing -Wswitch
-Wswitch-mặc định -wswitch-enum -Wsync-nand -Các tiêu đề hệ thống -Trampolines
-Tranh -Giới hạn loại -Wundef -Được vệ sinh -Wunknown-pragmas -Wno-pragmas
-Wunsuffixed-float-hằng số -Không sử dụng -Chức năng sử dụng -Không sử dụng-nhãn
-Wunused-local-typedefs -Không sử dụng-tham số -Không-không-sử-dụng-kết quả -Giá trị không sử dụng
-Không sử dụng-biến -Không sử dụng-nhưng-đặt-tham số -Wunused-but-set-biến -Không sử dụng-cast
-Wvariadic-macro - Hiệu suất hoạt động-điều hành -wvla -Wvolpose-register-var
-Viết-chuỗi -Wzero-as-null-pointer-hằng số
C và Mục tiêu-C-chỉ Cảnh báo Các lựa chọn
-Wad-function-cast -Khai báo-khai báo -Wmissing-tham số-type
- Nguyên mẫu thử nghiệm -Wnested-externs -Khai báo kiểu vàng -Định nghĩa phong cách vàng
- Nguyên mẫu hạn chế -Điều kiện -Chuyển đổi-chuyển đổi
-Khai báo-sau-tuyên bố -Kí hiệu con trỏ
Gỡ lỗi Các lựa chọn
-dbức thư -dumpspecs -máy đổ rác -dumpversion -sanized =phong cách -fdbg-cnt-list
-fdbg-cnt =danh sách phản giá trị -fdisable-ipa-pass_name -fdisable-rtl-pass_name
-fdisable-rtl-mật khẩu=danh sách phạm vi -fdisable-cây-pass_name -fdisable-cây-đi qua-
tên=danh sách phạm vi -fdump-noaddr -fdump-không đánh số -fdump-unnered-links
-fdump-dịch-đơn vị[-n] -fdump-class-phân cấp[-n] -fdump-ipa-tất cả
-fdump-ipa-cgraph -fdump-ipa-nội tuyến -fdump-pass -fdump-thống kê -fdump-cây-tất cả
-fdump-cây-gốc[-n] -fdump-tree-tối ưu hóa[-n] -fdump-cây-cfg -fdump-tree-bí danh
-fdump-cây-ch -fdump-tree-ssa[-n] -fdump-cây-pre[-n] -fdump-cây-ccp[-n]
-fdump-cây-dce[-n] -fdump-tree-gimple[-nguyên] -fdump-tree-bùn[-n]
-fdump-cây-dom[-n] -fdump-cây-dse[-n] -fdump-cây-phiprop[-n] -fdump-cây-phiopt[-n]
-fdump-cây-forwprop[-n] -fdump-cây-copyrename[-n] -fdump-cây-nrv -fdump-cây-vect
-fdump-cây-bồn rửa -fdump-cây-sra[-n] -fdump-cây-forwprop[-n] -fdump-cây-fre[-n]
-fdump-cây-vrp[-n] -ftree-vectorizer-verbose =n -fdump-tree-storeccp[-n]
-fdump-final-insns =hồ sơ -fcompare-gỡ lỗi[=lựa chọn] -fcompare-debug-giây
-feliminate-lùn2-dups -fno-loại bỏ-không sử dụng-loại gỡ lỗi
-feliminate-không sử dụng-gỡ lỗi-ký hiệu -femit-class-gỡ lỗi-luôn luôn -có thể-loại-vượt qua
-có thể-loại-vượt qua=danh sách phạm vi -fdebug-type-section -fmem-báo cáo-wpa -fmem-báo cáo
-fpre-ipa-mem-báo cáo -fpost-ipa-mem-báo cáo -fprofile-arc -fopt-thông tin
-fopt-thông tin-lựa chọn[=hồ sơ] -frandom-seed =chuỗi -fsched-verbose =n -fsel-Sched-verbose
-fsel-Sched-dump-cfg -fsel-Sched-pipelining-verbose -fstack-sử dụng -phải bảo hiểm tốt nhất
-ftime-báo cáo -fvar-theo dõi -fvar-theo dõi-phân công
-fvar-theo dõi-phân công-chuyển đổi -g -gcấp -gtoggle -gcoff -gdwarf-phiên bản -ggdb
-grecord-gcc-switch -gno-record-gcc-switch -gstab -gstabs + -gstrict-lùn
-gno-nghiêm-ngặt-lùn -gvms -gxcoff -gxcoff + -fno-merge-debug-string
-fno-lùn2-cfi-asm -fdebug-prefix-map =xưa=mới -femit-struct-debug-baseonly
-femit-struct-debug-Reduce -femit-struct-debug-chi tiết[=danh sách đặc tả] -p -pg
-print-file-name =thư viện -print-libgcc-tên tệp -print-đa thư mục
-print-multi-lib -print-multi-os-thư mục -print-prog-name =chương trình
-print-search-dirs -Q -print-sysroot hậu tố -print-sysroot-headers- -save-temps
-save-temps = cwd -save-temps = obj -thời gian[=hồ sơ]
Tối ưu hóa Các lựa chọn
-faggressive-vòng lặp-tối ưu hóa -falign-functions [=n] -falign-jumps [=n]
-falign-label [=n] -falign-vòng [=n] -fassociative-toán học -fauto-inc-dec
-fbranch-xác suất -fbranch-target-load-tối ưu hóa -fbranch-target-load-Optimization2
-fbtr-bb-độc quyền -fcaller-tiết kiệm -fcheck-data-deps -fcombine-stack-điều chỉnh
-fbảo tồn-stack -fso sánh-elim -fcprop-đăng ký -nhảy qua -fcse-theo-nhảy
-fcse-bỏ qua-khối -fcx-fortran-quy tắc -fcx-phạm vi giới hạn -fdata-section -fdce
-chi nhánh trả chậm -fdelete-null-con trỏ-kiểm tra -fdevirtualize -fdse -cao-trong-nội-tuyến
-fipa-sra -féxpensive-tối ưu hóa -ffat-lto-đối tượng -ffast-toán -ffinite-math-chỉ
-cửa hàng vải thô -fexcess-precision =phong cách -fforward-tuyên truyền -ffp-hợp đồng =phong cách
-ffunction-section -fgcse -fgcse-sau khi tải lại -fgcse-las -fgcse-lm
-fgraphite-nhận dạng -fgcse-sm -fhoist-liền kề-tải -fif-chuyển đổi -fif-chuyển đổi2
-findirect-inline -finline-các chức năng -finline-hàm-được gọi-một lần -finline-limit =n
-finline-chức năng nhỏ -fipa-cp -fipa-cp-clone -fipa-pta -fipa-hồ sơ
-fipa-thuần-const -fipa-tham khảo thuật toán -fira =thuật toán -fira-region =khu
-fira-palăng-áp suất -fira-loop-áp suất -fno-ira-share-save-slot
-fno-ira-share-tràn-slot -fira-verbose =n -fivopts -fkeep-inline-chức năng
-fkeep-static-const -floop-khối -floop-trao đổi -floop-dải-của tôi
-floop-nest-tối ưu hóa -floop-song song-tất cả -flto -flto-nén-mức
-flto-partition =loài rong -flo-báo cáo -fmerge-all-hằng số -fmerge-hằng số
-fmodulo-lịch trình -fmodulo-Schedule-allow-regmoves -fmove-loop-bất biến fmudflap
-fmudflapir -fmudflapth -fno-nhánh-đếm-reg -fno-mặc định-nội tuyến -fno-defer-pop
-fno-hàm-cse -fno-đoán-nhánh-xác suất -fno-nội tuyến -fno-toán-errno
-fno-lỗ nhìn trộm -fno-lỗ nhìn trộm2 -fno-lịch trình-interblock -fno-Sched-spec -fno-ký-số không
-fno-toplevel-sắp xếp lại -fno-bẫy-toán học -fno-zero-khởi tạo-trong-bss
-fomit-frame-con trỏ -foptimize-đăng ký-di chuyển -foptimize-anh chị em-cuộc gọi
-fpartial-inline -fpeel-loop -fpredive-commoning -fprefetch-loop-mảng
-fprofile-báo cáo -fprofile-Correction -fprofile-dir =con đường -fprofile-create
-fprofile-create =con đường -fprofile-sử dụng -fprofile-use =con đường -fprofile-giá trị
-freciprocal-toán -miễn phí -fregmove -frename-đăng ký -freorder-khối
-freorder-khối-và-phân vùng -freorder-chức năng -frerun-cse-sau-vòng lặp
-freschedule-modulo-Schedule-loop -nền tảng-toán học -fsched2-use-siêu khối
-sched-áp suất -sched-spec-load -fched-spec-load-nguy hiểm
-fsched-sted-insns-dep [=n] -fsched-sted-insns [=n] -fsched-nhóm-heuristic
-sched-critical-path-heuristic -fsched-spec-insn-heuristic -sched-rank-heuristic
-fsched-last-insn-heuristic -fsched-dep-count-heuristic -fschedule-insns
-fschedule-insns2 -fsection-anchor -chọn lọc-lập lịch trình -selective-Scheduling2
-fel-lịch trình-pipelining -fsel-Sched-pipelining-ngoài-vòng -fshrink-quấn
-fsignaling-nans -fsingle-chính xác-hằng số -fsplit-ivs-in-unroller
-fsplit-rộng-các loại -fstack-protectionor -fstack-bảo vệ-tất cả -fstrict-aliasing
-fstrict-tràn -fthread-nhảy -ftracer -ftree-bit-ccp -ftree-buildin-call-dce
-ftree-ccp -ftree-ch -ftree-thanesce-inline-vars -ftree-thanesce-vars -ftree-copy-prop
-ftree-copyrename -ftree-dce -sree-Dominator-opts -ftree-dse -ftree-forwprop
- miễn phí -ftree-loop-if-chuyển đổi -ftree-loop-if-convert-store -ftree-loop-im
-ftree-phiprop -phân phối vòng lặp tự do -ftree-loop-phân phối-các mẫu
-ftree-loop-ivcanon -ftree-loop-tuyến tính -cung cấp-vòng lặp-tối ưu hóa -ftree-song song-vòng lặp =n
-phải trước -ftree-một phần-pre -ftree-pta -ftree-hợp lý -sắp chìm -ftree-slsr
-ftree-sra -phải-chuyển-đổi-chuyển-đổi -đa-đuôi-hợp nhất -độ ba -vectơ hóa miễn phí
-ftree-vrp -funit-at-a-time -funroll-all-loop -funroll-vòng
-funsafe-loop-tối ưu hóa -funsafe-math-Optimizations -funswitch-vòng
-fvariable-extension-in-unroller -fvect-chi phí-mô hình -fvpt -fweb -fwhole-chương trình -fwpa
-fuse-ld =Liên kết -fuse-linker-plugin --param tên=giá trị -O -O0 -O1 -O2 -O3 -Bạn
-Ăn sáng -Og
Bộ tiền xử lý Các lựa chọn
-Acâu hỏi=trả lời -MỘT-câu hỏi[=trả lời] -C -dD -dI -dM -dN -Dvĩ mô[=định nghĩa] -E -H
-đi sau dir bao gồm hồ sơ -imacro hồ sơ -iprefix hồ sơ -iwithprefix dir
-iwithprefixb Before dir -hệ thống dir -imultilib dir -isysroot dir -M -MM -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-mở rộng -fworking-thư mục
-bản đồ -trigraphs -nằm -Uvĩ mô -wp,tùy chọn -Xtiền xử lý tùy chọn -không tích hợp-cpp
Nhà lắp ráp Tùy chọn
-À,tùy chọn -Xassembler tùy chọn
Linker Các lựa chọn
tên-tệp-đối-tượng -lthư viện -nostartfiles -nodedefaultlibs -nostdlib -Bàn Chân -rđộng -s
-mặt đứng -static-libgcc -static-libstdc ++ -static-libasan -static-libtsan -chia sẻ
-shared-libgcc -biểu tượng -T kịch bản - Tôi,tùy chọn -Xlinker tùy chọn -u biểu tượng
thư mục Các lựa chọn
-Btiếp đầu ngữ -Idir -iplugindir =dir -cài dẫndir -Ldir -specs =hồ sơ -TÔI- --sysroot =dir
hậu tố --no-sysroot-
Phụ thuộc Các lựa chọn
AAArch64 Các lựa chọn -mbig-endian -mlittle-endian -mGeneral-regs-chỉ -mcmodel = nhỏ
-mcmodel = nhỏ -mcmodel = lớn -mstrict-căn chỉnh -momit-lá-khung-con trỏ
-mno-omit-leaf-frame-con trỏ -mtls-dialect = desc -mtls-dialect = truyền thống
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -march =tên -mcpu =tên
-mtune =tên
Adapteva Epiphany Các lựa chọn -mhalf-reg-tệp -mprefer-ngắn-insn-regs -mbranch-chi phí =num
-mcmove -mnops =num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-sửa đổi
-mstack-offset =num -mround-gần nhất -các cuộc gọi dài -cuộc gọi ngắn hạn -msmall16 -mfp-mode =chế độ
-mvect-gấp đôi -max-vect-align =num -msplit-vecmove-sớm -m1reg-reg
ARM Các lựa chọn -mapcs-khung -mno-apc-frame -mabi =tên -mapcs-stack-kiểm tra
-mno-apcs-stack-kiểm tra -mapc-float -mno-apc-float -mapcs-reentrant
-mno-apc-reentrant -msched-prolog -mno-Schedule-prolog -mlittle-endian -mbig-endian
-mwords-Little-endian -mfloat-abi =tên -mfp16-format =tên -mthumb-interwork
-mno-ngón tay cái-tương tác -mcpu =tên -march =tên -mfpu =tên -m cấu trúc-kích thước-ranh giới =n
-mabort-on-noreturn -các cuộc gọi dài -các cuộc gọi không dài -msingle-pic-base
-mno-đơn-pic-cơ sở -mpic-register =reg -mnop-fun-dllimport -mpoke-tên-hàm
-mngón tay cái -marm -mtpc-frame -mtpcs-lá-khung -mcaller-siêu liên kết
-mcallee-siêu liên kết -mtp =tên -mtls-phương ngữ =phương ngữ -mword-thay đổi vị trí
-mfix-vỏ não-m3-ldrd -truy cập munaligned -mneon-cho-64bits -mrestrict-nó
AVR Các lựa chọn -mmcu =mcu -maccumulate-args -mbranch-chi phí =chi phí -mcall-prologues -bạc hà8
-không gián đoạn -mthư giãn -mstrict-X -mtiny-stack -Waddr-không gian-chuyển đổi
Cá mập đen Các lựa chọn -mcpu =cpu[-sự thay đổi] -msim -momit-lá-khung-con trỏ
-mno-omit-leaf-frame-con trỏ -mspecld-dị thường -mno-specld-dị thường -mcsync-dị thường
-mno-csync-dị thường -mlow-64k -mno-thấp64k -mstack-check-l1 -giữa-thư viện chia sẻ
-mno-id-shared-thư viện -mshared-library-id =n -mleaf-id-shared-thư viện
-mno-leaf-id-shared-thư viện -msep-dữ liệu -mno-sep-data -các cuộc gọi dài -các cuộc gọi không dài
-mfast-fp -minline-plt -multicore -mcorea -mcoreb -msdram -micplb
C6X Các lựa chọn -mbig-endian -mlittle-endian -march =cpu -msim -msdata =kiểu sdata
CRIS Các lựa chọn -mcpu =cpu -march =cpu -mtune =cpu -mmax-stack-frame =n
-melinux-stacksize =n -metrax4 -metrax100 -mpdebug -mcc-init -mno-tác dụng phụ
-mstack-căn chỉnh -mdata-căn chỉnh -mconst-căn chỉnh -m32-bit -m16-bit -m8-bit
-mno-mở đầu-phần kết -mno-gotplt -chính mình -maout -melinux -mlinux -sim -sim2
-mmul-lỗi-cách giải quyết -mno-mul-lỗi-cách giải quyết
CR16 Các lựa chọn -ừm -mcr16cplus -mcr16c -msim -bạc hà32 -mbit-ops -mdata-model =kiểu mẫu
Darwin Các lựa chọn -all_load -allowable_client -sao -arch_errors_fatal -arch_only
-bind_at_load -bùm -bundle_loader -tên khách hàng -tương thích_version
-Phiên bản hiện tại -dead_strip -tập tin phụ thuộc -dylib_file -dylinker_install_name
-động lực học -dynamiclib -exported_symbols_list -nhà phim -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -công việc
-image_base -trong đó -tên cài đặt -keep_private_externs -multi_module
-multiply_define -multiply_define_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebined -nomultidefs -noprebind
-noseglinkedit -pagezero_size -liên kết trước -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -căn chỉnh -sectobjectbiểu tượng -tại sao tải -seg1addr -secttạo
-sectobjectbiểu tượng - máy quay phim -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkchỉnh sửa -segprot -segs_read_only_addr
-segs_read_write_addr -single_module -mặt đứng -sub_thư viện -sub_ô
-twolevel_namespace -ô -không xác định -unexported_symbols_list
-weak_reference_mismatches -có gì đã tải -F -người thích -đầy đủ -mmacosx-version-min =phiên bản
-mkernel -mone-byte-bool
Tháng mười hai Alpha Các lựa chọn -mno-fp-reg -msoft-phao -mieee -mieee-với-không chính xác
-mieee-tuân thủ -mfp-trap-mode =chế độ -mfp-rounding-mode =chế độ -mtrap-precision =chế độ
-hằng số xây dựng -mcpu =loại cpu -mtune =loại cpu -mbwx -max -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-dữ liệu -mlarge-dữ liệu -msmall-văn bản
-mlarge-văn bản -mmemory-latency =thời gian
FR30 Các lựa chọn -mô hình nhỏ -mno-lsim
cuộc sống Các lựa chọn -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-phao -msoft-phao
-malloc-cc -mfixed-cc -mdword -mno-dword -mđôi -mno-gấp đôi -mmedia -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro -multilib-thư viện-pic
-mlinked-fp -các cuộc gọi dài -malign-nhãn -mlibrary-pic -macc-4 -macc-8 -mpack
-mno-gói -mno-eflags -mcond-di chuyển -mno-cond-di chuyển -moptimize-thành viên
-mno-tối ưu hóa-ghi nhớ -mscc -mno-scc -mcond-executive -mno-cond-executive -mvliw-chi nhánh
-mno-vliw-chi nhánh -multi-cond-executive -mno-multi-cond-executive -mnested-cond-executive
-mno-nested-cond-executive -mtomcat-thống kê -mTLS -mtls -mcpu =cpu
GNU / Linux Các lựa chọn -mglibc -muclibc -môi trường -mandroid -tno-android-cc -tno-android-ld
H8 / 300 Các lựa chọn -mthư giãn -ừm -bệnh đa xơ cứng -mn -mexr -mno-exr -bạc hà32 -ác tính-300
HPPA Các lựa chọn -march =kiểu kiến trúc -mbig-switch -mdisable-fpregs
-mdisable-lập chỉ mục -các cuộc gọi nhanh-gián tiếp -mgas -mgnu-ld -mhp-ld
-mfixed-range =phạm vi đăng ký -mjump-in-delay -mlinker-opt -các cuộc gọi dài
-mlong-tải-cửa hàng -mno-big-switch -mno-vô hiệu hóa-fpregs -mno-vô hiệu hóa-lập chỉ mục
-mno-nhanh-gián tiếp-cuộc gọi -không khí -mno-jump-in-delay -mno-long-load-store
-mno-portable-runtime -mno-mềm-phao -mno-space-reg -msoft-phao -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -mportable-thời gian chạy -mschedule =loại cpu -mspace-reg
-msio -mwsio -munix =unix-std -nolibdld -mặt đứng -threads
i386 và x86-64 Các lựa chọn -mtune =loại cpu -march =loại cpu -mfpmath =đơn vị -masm =phương ngữ
-mno-ưa-thích-toán-387 -mno-fp-ret-in-387 -msoft-phao -mno-rộng-nhân -mrtd
-ác tính-gấp đôi -mpreferred-stack-ranh giới =num -mincoming-stack-ranh giới =num -mcld
-mcx16 -msahf -mmovbe -mcrc32 -đề nghị -mrecip =opt -mvzeroupper -mprefer-avx128 -mmx
-msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mẹ -mpclmul
-mfsgsbase -mrdrnd -mf16c -mfma -msse4a -m3dnow -mpopcnt -mừm -mbmi -mtbm -mfma4
-mxốp -mlzcnt -mbmi2 -mrtm -mlwp -mthread -mno-align-stringops
-minline-all-stringops -minline-stringops-dynamic -mstringop-chiến lược =loài rong
-mpush-args -maccumulate-đi-args -m128bit-dài-đôi -m96bit-dài-đôi
-mlong-đôi-64 -mlong-đôi-80 -mregparm =num -msseregparm -mveclibabi =kiểu
-mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealalign -momit-lá-khung-con trỏ
-mno-đỏ-vùng -mno-tls-direct-seg-refs -mcmodel =mô hình mã -mabi =tên
-maddress-mode =chế độ -m32 -m64 -mx32 -mlarge-data-ngưỡng =num -msse2avx -mfentry
-m8bit-idiv -mavx256-split-unaligned-tải -mavx256-split-unalign-store
i386 và x86-64 Windows Các lựa chọn -mconsole -mcygwin -mno-cygwin -mdll
-mnop-fun-dllimport -mthread -municode -mwin32 -mwindows -fno-set-ngăn xếp-thực thi
IA-64 Các lựa chọn -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -đăng ký-tên -msdata -mno-sdata -mconstant-gp -mauto-pic
-mfused-mad -minline-float-split-min-latency -minline-float-split-max-throughput
-mno-inline-float-split -minline-int-split-min-latency
-minline-int-split-max-throughput -mno-inline-int-chia -minline-sqrt-min-độ trễ
-minline-sqrt-max-thông lượng -mno-nội tuyến-sqrt -mdwarf2-asm -mearly-stop-bit
-mfixed-range =phạm vi đăng ký -mtls-size =kích thước tls -mtune =loại cpu -milp32 -mlp64
-msched-br-data-spec -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bit-sau-mỗi-chu kỳ
-msched-count-spec-in-quan trọng-path -msel-Sched-dont-check-control-spec
-msched-fp-mem-deps-zero-chi phí -msched-max-memory-insns-hard-limit
-msched-max-memory-insns =tối đa
LM32 Các lựa chọn -mbarrel-shift-enable -mdivide-bật -multiply-cho phép
-msign-mở rộng-đã bật -muser-enable
M32R / D Các lựa chọn -m32r2 -m32rx -m32r -mdebug -malign-vòng -mno-align-vòng
-missue-rate =con số -mbranch-chi phí =con số -model =mã-kích thước-mô hình-loại -msdata =sdata-
kiểu -mno-xả-func -mflush-func =tên -mno-flush-bẫy -mflush-trap =con số -G num
M32C Các lựa chọn -mcpu =cpu -msim -memregs =con số
M680x0 Các lựa chọn -march =arch -mcpu =cpu -mtune =điều chỉnh -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mới -không ngắn -mhard-phao -m68881 -msoft-phao -mprel
-malign-int -mstrict-căn chỉnh -msep-dữ liệu -mno-sep-data -mshared-library-id = n
-giữa-thư viện chia sẻ -mno-id-shared-thư viện -mxgot -mno-xgot
Mcore Các lựa chọn -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-ngay lập tức
-mno-thư giãn-ngay lập tức -mwide-bitfield -mno-wide-bitfield -m4byte-các chức năng
-mno-4byte-chức năng -mcallgraph-dữ liệu -mno-callgraph-data -mslow-byte
-mno-chậm-byte -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-tăng
MeP Các lựa chọn -mabsdiff -trung tâm mua sắm -dung dịch -based =n -mbitops -mc =n -mclip
-mconfig =tên -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio dễ bay hơi -ml
-mleadz -ừm -mminmax -ừm -mno-opt -mrepeat -bệnh đa xơ cứng -msatur -msdram -msim -msimnovec
-mtf -mtiny =n
MicroBlaze Các lựa chọn -msoft-phao -mhard-phao -m nhỏ-chia -mcpu =cpu -mmemcpy
-mxl-mềm-mul -mxl-soft-div -mxl-thùng-shift -mxl-pattern-so sánh -mxl-stack-kiểm tra
-mxl-gp-opt -mno-clearbss -mxl-nhân-cao -mxl-float-chuyển đổi -mxl-float-sqrt
-mbig-endian -mlittle-endian -mxl-sắp xếp lại -mxl-chế độ-mô hình ứng dụng
MIPS Các lựa chọn -CÁC -EB -march =arch -mtune =arch -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-liên kết-mips16 -mabi =aBI -mabiccalls -mno-abicalls
-mshared -mno-chia sẻ -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-phao -msoft-phao -mno-phao -msingle-float -mdouble-float -mdsp
-mno-dsp -mdspr2 -mno-dspr2 -ừm -mmno-mcu -mfpu =kiểu fpu -msmartmips
-mno-smartmips -cặp đôi-độc thân -mno-cặp-đơn -mdmx -mno-mdmx -mips3d
-mno-mips3d -ừm -mno-mt -mllsc -mno-llsc -mlong64 -mlong32 -mym32 -mno-sym32
-Gnum -mlocal-sdata -mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt
-mno-gopt -membedded-dữ liệu -mno-nhúng-dữ liệu -muninit-const-in-rodata
-mno-uninit-const-in-rodata -mcode-readable =thiết lập -msplit-địa chỉ
-mno-split-address -mexplicit-relocs -mno-rõ ràng-relocs -mcheck-zero-chia
-mno-séc-không-chia -mdivide-trap -mdivide-break -mmemcpy -mno-memcpy
-các cuộc gọi dài -các cuộc gọi không dài -ừm -không điên -mfused-mad -mno-fused-madd -nocpp
-mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400
-mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130
-mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 -mflush-func =chức năng -mno-xả-func
-mbranch-chi phí =num -mbranch-có khả năng -mno-chi nhánh-có khả năng -mfp-ngoại lệ
-mno-fp-ngoại lệ -mvr4130-căn chỉnh -mno-vr4130-căn chỉnh -msynci -mno-synci
-mrelax-pic-call -mno-thư giãn-pic-gọi -mcount-ra-address
MIMIX Các lựa chọn -mlibfunc -mno-libfuncs -mepsilon -mno-epsilon -mabi = gnu
-mabi = mmixware -mzero-mở rộng -mknuthdiv -mtoplevel-ký hiệu -chính mình -mbranch-dự đoán
-mno-chi nhánh-dự đoán -mbase-address -mno-base-address -msingle-thoát
-mno-lối ra đơn
MN10300 Các lựa chọn -mult-bug -mno-đa-lỗi -mno-am33 -mẹ33 -mẹ33-2 -mẹ34 -mtune =CPU-
kiểu -mreturn-con trỏ-trên-d0 -mno-crt0 -mthư giãn -mliw -msetlb
Moxie Các lựa chọn -meb -mel -mno-crt0
PDP-11 Các lựa chọn -mfpu -msoft-phao -mac0 -mno-ac0 -m40 -m45 -m10 -bình soi
-mbcopy-nội trang -bạc hà32 -mno-int16 -bạc hà16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi -mbranch-đắt -mbranch-giá rẻ
-munix-asm -mdec-asm
picochip Các lựa chọn -mẹ =ae_type -mvliw-lookahead =N -msymbol-as-địa chỉ
-mno-không hiệu quả-cảnh báo
PowerPC Các lựa chọn Xem Tùy chọn RS / 6000 và PowerPC.
RL78 Các lựa chọn -msim -mmul = không -mmul = g13 -mmul = rl78
RS / 6000 và PowerPC Các lựa chọn -mcpu =loại cpu -mtune =loại cpu -mcmodel =mô hình mã
-mpowerpc64 -maltivec -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmpgpr -mno-mfpgpr
-mhard-dfp -mno-hard-dfp -mfull-toc -tối thiểu-toc -mno-fp-in-toc -mno-sum-in-toc
-m64 -m32 -mxl-tương thích -mno-xl-tương thích -mpe -mang-điện -đen-tự nhiên
-msoft-phao -mhard-phao -nhiều -mno-nhiều -msingle-float -mdouble-float
-msimple-fpu -mstring -mno-chuỗi -cập nhật -mno-cập nhật -mavoid-indexed-address
-mno-tránh-địa chỉ được lập chỉ mục -mfused-mad -mno-fused-madd -mbit-căn chỉnh
-mno-bit-căn chỉnh -mstrict-căn chỉnh -mno-nghiêm ngặt-căn chỉnh -có thể phân bổ -không thể di dời
-mrelocatable-lib -mno-configure-lib -mtoc -mno-toc -mít -mlittle-endian
-mbig -mbig-endian -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base
-mpriorifying-limited-insns =ưu tiên -msched-cost-dep =phụ thuộc_type
-minsert-Sched-nops =Đề án -mcall-sysv -mcall-netbsd -maix-struct-return
-msvr4-struct-return -mabi =kiểu abi -msecure-plt -mbss-plt
-mblock-move-inline-limit =num -miseel -mno-isel -misel = vâng -misel = không -mspe -mno-speech
-mspe = vâng -mspe = không -cửa hàng -mgen-cell-microcode -mwarn-cell-microcode -mvrsave
-mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs = vâng -mfloat-gprs = không
-mfloat-gprs = single -mfloat-gprs = gấp đôi -mprototype -mno-nguyên mẫu -msim -mmvme
-mẹ -yellowknife -thành viên -msdata -msdata =opt -mvxworks -G num -pthread -đề nghị
-mrecip =opt -mno-người nhận -mrecip-độ chính xác -mno-đối-chính xác -mveclibabi =kiểu -mfriz
-mno-friz -mpointers-to-nested-hàm -mno-con trỏ-đến-hàm lồng nhau
-msave-toc-gián tiếp -mno-save-toc-gián tiếp -mpower8-hợp nhất -mno-mpower8-hợp nhất
-mpower8-vector -mno-power8-vector -mcrypto -mno-crypto -mdirect-di chuyển -mno-trực tiếp-di chuyển
-mquad-bộ nhớ -mno-quad-bộ nhớ -mquad-bộ nhớ-nguyên tử -mno-quad-memory-nguyên tử
-mcompat-align-parm -mno-compat-align-parm
RX Các lựa chọn -m64bit-nhân đôi -m32bit-nhân đôi -fpu -nofpu -mcpu = -mbig-endian-dữ liệu
-mlittle-endian-data -msmall-dữ liệu -msim -mno-sim -mas100-cú pháp -mno-as100-cú pháp
-mthư giãn -mmax-hằng số-kích thước = -mint-register = -mpid -mno-cảnh báo-nhiều-gián đoạn nhanh
-msave-acc-in-interrupt
S / 390 và zSeries Các lựa chọn -mtune =loại cpu -march =loại cpu -mhard-phao -msoft-phao
-mhard-dfp -mno-hard-dfp -mlong-đôi-64 -mlong-đôi-128 -mbackchain
-mno-backchain -mpack-stack -mno-pack-stack -msmall-executive -mno-small-executive
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-gỡ lỗi -mesa -mzarch -mtpf-dấu vết
-mno-tpf-dấu vết -mfused-mad -mno-fused-madd -mwarn-frameize -mwarn-dynamicstack
-mstack-kích thước -mstack-Guard -mhotpatch =nửa chữ,nửa chữ
Điểm số Các lựa chọn -meb -mel -mnhwloop -muls -ừm -mcore5 -mscore5u -mcore7 -mscore7d
SH Các lựa chọn -m1 -m2 -m2e -m2a-nofpu -m2a-duy nhất -m2a-đơn -m2a -m3 -m3e
-m4-nofpu -m4-duy nhất -m4-đơn -m4 -m4a-nofpu -m4a-duy nhất -m4a-đơn
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-nhỏ gọn
-m5-nhỏ gọn-nofpu -mb -ml -mdalign -mthư giãn -bigtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -mieee -mno-ieee -mbitops -kích thước nhỏ -minline-ic_invalidate
-mpadstruct -mspace -mprefergot -musermode -multcost =con số -mdiv =chiến lược
-mdivsi3_libfunc =tên -mfixed-range =phạm vi đăng ký -mindexed-địa chỉ
-mgettrcost =con số -mpt-đã sửa -maccumulate-đi-args -minvalid-ký hiệu
-matomic-model =mô hình nguyên tử -mbranch-chi phí =num -mzdcchi nhánh -mno-zdcbranch -mcbranchdi
-mcmpeqdi -mfused-mad -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
-giả vờ-cmove -mtas
Solaris 2 Các lựa chọn -văn bản giả -mno-không tinh khiết-văn bản -pthread -pthread
SPARC Các lựa chọn -mcpu =loại cpu -mtune =loại cpu -mcmodel =mô hình mã -mmemory-model =nhớ-
kiểu mẫu -m32 -m64 -mapp-reg -mno-app-reg -mfaster-cấu trúc -mno-nhanh hơn-cấu trúc
-mphẳng -mno-phẳng -mfpu -mno-fpu -mhard-phao -msoft-phao -mhard-quad-float
-msoft-quad-float -mstack-thiên vị -mno-stack-thiên vị -munaligned-đôi
-mno-unaligned-double -chế độ người dùng -mno-chế độ người dùng -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 Các lựa chọn -mwarn-tái định cư -merror-tái định cư -msafe-dma -munsafe-dma -mbranch-gợi ý
-msmall-mem -mlarge-mem -mstdmain -mfixed-range =phạm vi đăng ký -mea32 -mea64
-maddress-space-convert -mno-địa chỉ-không gian-chuyển đổi -mcache-size =kích thước bộ nhớ cache
-matomic-update -mno-nguyên tử-cập nhật
WELFARE V Các lựa chọn -Quý -Qn -Y P,đường dẫn -Ừm,dir
NGÓI-Gx Các lựa chọn -mcpu =cpu -m32 -m64 -mcmodel =mô hình mã
TILEPro Các lựa chọn -mcpu =cpu -m32
V850 Các lựa chọn -các cuộc gọi dài -các cuộc gọi không dài -mép -mno-ep -mprolog-chức năng
-mno-prolog-chức năng -mspace -mtda =n -msda =n -mzda =n -mapp-reg -mno-app-reg
-mdisable-callt -mno-vô hiệu hóa-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -mloop -mthư giãn -sau-nhảy -msoft-phao -mhard-phao -mgcc-abi
-mrh850-abi -mbig-switch
VAX Các lựa chọn -mg -mgnu -munix
VMS Các lựa chọn -mvms-return-mã -mdebug-main =tiếp đầu ngữ -mmalloc64 -mpointer-size =kích thước
VxWorks Các lựa chọn -mrtp -không tĩnh -Bình tĩnh - Động lực học -Xbind-lười biếng -Xbind-bây giờ
x86-64 Các lựa chọn Xem Tùy chọn i386 và x86-64.
Xbão16 Các lựa chọn -msim
Xtensa Các lựa chọn -mconst16 -mno-const16 -mfused-mad -mno-fused-madd -mforce-no-pic
-mserialize-dễ bay hơi -mno-serialize-dễ bay hơi -mtext-section-Lites
-mno-text-section-Lites -mtarget-căn chỉnh -mno-mục tiêu-căn chỉnh -mlongcalls
-mno-cuộc gọi dài
zSeries Các lựa chọn Xem Tùy chọn S / 390 và zSeries.
Mã Thế hệ Các lựa chọn
-fcall-lưu-reg -fcall-đã sử dụng-reg -sửa chữa-reg -cảm giác -fnon-call-ngoại lệ
-fdelete-dead-ngoại lệ -funwind-bàn -fasynchronous-unwind-table -fno-gnu-duy nhất
-finression-size-chỉ thị -chức năng kinh nguyệt
-fi Kinh-hàm-loại-trừ-chức-năng-danh-sách =sym,sym, ...
-firical-functions -lude-file-list =hồ sơ,hồ sơ, ... -không phổ biến -fno-danh tính
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-table -frecord-gcc-switch
-freg-struct-return -fshort-enums -short-đôi -fshort-wchar -fverbose-asm
-fpack-struct [=n] -séc bao -fstack-limit-register =reg -fstack-giới hạn-biểu tượng =sym
-fno-stack-giới hạn -fsplit-ngăn xếp -fleading-gạch dưới -ftls-model =kiểu mẫu
-fstack-tái sử dụng =tái sử dụng_level -ftrapv -fwrapv -fbounds-kiểm tra -sự tàng hình
-fstrict-variable-bitfields -fsync-libcalls
Các lựa chọn Kiểm soát các Loại of Đầu ra
Quá trình biên dịch có thể bao gồm tối đa bốn giai đoạn: tiền xử lý, biên dịch thích hợp, lắp ráp và
liên kết, luôn luôn theo thứ tự đó. GCC có khả năng xử lý trước và biên dịch một số
các tệp thành một số tệp đầu vào trình hợp dịch hoặc vào một tệp đầu vào trình hợp dịch; sau đó
mỗi tệp đầu vào của trình hợp dịch tạo ra một tệp đối tượng và liên kết kết hợp tất cả các đối tượng
các tệp (những tệp mới được biên dịch và những tệp được chỉ định làm đầu vào) vào một tệp thực thi.
Đối với bất kỳ tệp đầu vào nhất định nào, hậu tố tên tệp xác định loại biên dịch là
xong:
hồ sơ.c
Mã nguồn C phải được xử lý trước.
hồ sơ.i
Mã nguồn C không được xử lý trước.
hồ sơ.ii
Mã nguồn C ++ không được xử lý trước.
hồ sơ.m
Mã nguồn Objective-C. Lưu ý rằng bạn phải liên kết với libobjc thư viện để làm một
Chương trình Objective-C làm việc.
hồ sơ.mi
Mã nguồn Objective-C không được xử lý trước.
hồ sơ.mm
hồ sơ.M
Mã nguồn Objective-C ++. Lưu ý rằng bạn phải liên kết với libobjc thư viện để làm
một chương trình Objective-C ++. Lưu ý rằng .M đề cập đến chữ M viết hoa theo nghĩa đen.
hồ sơ.mii
Mã nguồn Objective-C ++ không được xử lý trước.
hồ sơ.h
Tệp tiêu đề C, C ++, Objective-C hoặc Objective-C ++ sẽ được chuyển thành tệp được biên dịch trước
tiêu đề (mặc định) hoặc tệp tiêu đề C, C ++ sẽ được chuyển thành thông số Ada (thông qua
-fdump-ada-spec chuyển).
hồ sơ. Cc
hồ sơ.cp
hồ sơ.cxx
hồ sơ.cpp
hồ sơ.CPP
hồ sơ.c ++
hồ sơ.C
Mã nguồn C ++ phải được xử lý trước. Lưu ý rằng trong .cxx, hai chữ cái cuối cùng
cả hai đều phải theo nghĩa đen x. Tương tự, .C dùng để chỉ chữ C viết hoa theo nghĩa đen.
hồ sơ.mm
hồ sơ.M
Mã nguồn Objective-C ++ phải được xử lý trước.
hồ sơ.mii
Mã nguồn Objective-C ++ không được xử lý trước.
hồ sơ.H H
hồ sơ.H
hồ sơ.hp
hồ sơ.hxx
hồ sơ.hpp
hồ sơ.HPP
hồ sơ.h ++
hồ sơ.tcc
Tệp tiêu đề C ++ sẽ được chuyển thành tiêu đề được biên dịch trước hoặc thông số Ada.
hồ sơ.f
hồ sơ.cho
hồ sơ.ftn
Mã nguồn Fortran dạng cố định không được xử lý trước.
hồ sơ.F
hồ sơ.VÌ
hồ sơ.fpp
hồ sơ.FPP
hồ sơ.FTN
Mã nguồn Fortran dạng cố định phải được xử lý trước (với mã nguồn truyền thống
bộ tiền xử lý).
hồ sơ.f90
hồ sơ.f95
hồ sơ.f03
hồ sơ.f08
Mã nguồn Fortran biểu mẫu miễn phí không được xử lý trước.
hồ sơ.F90
hồ sơ.F95
hồ sơ.F03
hồ sơ.F08
Mã nguồn Fortran biểu mẫu miễn phí phải được xử lý trước (với mã nguồn truyền thống
bộ tiền xử lý).
hồ sơ.đi
Đi mã nguồn.
hồ sơ.Quảng cáo
Tệp mã nguồn Ada có chứa khai báo đơn vị thư viện (khai báo
gói, chương trình con, hoặc chung chung, hoặc một bản khởi tạo chung), hoặc một đơn vị thư viện
khai báo đổi tên (khai báo đổi tên gói, chung hoặc chương trình con). Như là
các tập tin cũng được gọi là thông số kỹ thuật.
hồ sơ.adb
Tệp mã nguồn Ada chứa phần thân đơn vị thư viện (chương trình con hoặc phần thân gói).
Các tệp như vậy còn được gọi là cơ quan.
hồ sơ.d
D tệp mã nguồn.
hồ sơ.di
D tệp mã giao diện.
hồ sơ.đ
D tệp mã tài liệu.
hồ sơ.s
Mã bộ lắp ráp.
hồ sơ.S
hồ sơ.sx
Mã bộ lắp ráp phải được xử lý trước.
khác
Một tệp đối tượng sẽ được đưa thẳng vào liên kết. Bất kỳ tên tệp nào không được công nhận
hậu tố được xử lý theo cách này.
Bạn có thể chỉ định ngôn ngữ đầu vào một cách rõ ràng với -x tùy chọn:
-x Ngôn ngữ
Chỉ định rõ ràng Ngôn ngữ cho các tệp đầu vào sau (thay vì để
trình biên dịch chọn một mặc định dựa trên hậu tố tên tệp). Tùy chọn này áp dụng cho tất cả
sau các tệp đầu vào cho đến tệp tiếp theo -x Lựa chọn. Các giá trị có thể có cho Ngôn ngữ là:
c c-header cpp-đầu ra
c ++ c ++ - tiêu đề c ++ - cpp-output
mục tiêu-c mục tiêu-c-tiêu đề mục tiêu-c-cpp-đầu ra
mục tiêu-c ++ mục tiêu-c ++ - mục tiêu tiêu đề-c ++ - cpp-đầu ra
trình lắp ráp lắp ráp-với-cpp
ada
d
f77 f77-cpp-đầu vào f95 f95-cpp-đầu vào
go
Java
-x không ai
Tắt bất kỳ thông số kỹ thuật nào của một ngôn ngữ để các tệp tiếp theo được xử lý
theo các hậu tố tên tệp của chúng (như chúng -x đã không được sử dụng ở tất cả).
-pass-exit-mã
Thông thường gcc chương trình thoát với mã là 1 nếu bất kỳ giai đoạn nào của trình biên dịch trả về
một mã trả lại không thành công. Nếu bạn chỉ định -pass-exit-mã, Các gcc chương trình thay thế
trả về với lỗi số cao nhất được tạo ra bởi bất kỳ giai đoạn nào trả về lỗi
sự chỉ dẫn. Giao diện người dùng C, C ++ và Fortran trả về 4 nếu lỗi trình biên dịch nội bộ
đang gặp phải.
Nếu bạn chỉ muốn một số giai đoạn biên dịch, bạn có thể sử dụng -x (hoặc các hậu tố tên tệp)
nói gcc bắt đầu từ đâu và một trong các tùy chọn -c, -S, hoặc là -E nói ở đâu gcc là
ngừng lại. Lưu ý rằng một số kết hợp (ví dụ: -x đầu ra cpp -E) dạy gcc làm
không có gì đâu.
-c Biên dịch hoặc tập hợp các tệp nguồn, nhưng không liên kết. Giai đoạn liên kết đơn giản là
không được thực hiện. Đầu ra cuối cùng ở dạng tệp đối tượng cho mỗi tệp nguồn.
Theo mặc định, tên tệp đối tượng cho tệp nguồn được tạo bằng cách thay thế hậu tố .c,
.i, .s, v.v., với .o.
Các tệp đầu vào không được công nhận, không yêu cầu biên dịch hoặc lắp ráp, sẽ bị bỏ qua.
-S Dừng lại sau giai đoạn biên dịch thích hợp; không lắp ráp. Đầu ra là trong
dạng tệp mã trình hợp dịch cho từng tệp đầu vào không phải trình hợp dịch được chỉ định.
Theo mặc định, tên tệp trình hợp dịch cho tệp nguồn được tạo bằng cách thay thế hậu tố
.c, .i, v.v., với .s.
Các tệp đầu vào không yêu cầu biên dịch sẽ bị bỏ qua.
-E Dừng lại sau giai đoạn tiền xử lý; không chạy trình biên dịch thích hợp. Đầu ra ở
dạng mã nguồn được xử lý trước, được gửi đến đầu ra tiêu chuẩn.
Các tệp đầu vào không yêu cầu xử lý trước sẽ bị bỏ qua.
-o hồ sơ
Đặt đầu ra trong tệp hồ sơ. Điều này áp dụng cho bất kỳ loại đầu ra nào đang được sản xuất,
cho dù đó là tệp thực thi, tệp đối tượng, tệp trình hợp dịch hay tệp C được xử lý trước
Mã.
If -o không được chỉ định, mặc định là đặt một tệp thực thi vào a.ra, đối tượng
nộp cho nguồn.suffix in nguồn.o, tệp trình hợp dịch của nó trong nguồn.s, một biên dịch trước
tệp tiêu đề trong nguồn.suffix.gch, và tất cả nguồn C được xử lý trước trên đầu ra tiêu chuẩn.
-v In (trên đầu ra lỗi tiêu chuẩn) các lệnh được thực thi để chạy các giai đoạn của
biên dịch. Đồng thời in số phiên bản của chương trình trình điều khiển trình biên dịch và của
bộ tiền xử lý và bộ biên dịch thích hợp.
- ###
Như -v ngoại trừ các lệnh không được thực thi và các đối số được trích dẫn trừ khi chúng
chỉ chứa các ký tự chữ và số hoặc "./-_". Điều này rất hữu ích cho các tập lệnh shell để
nắm bắt các dòng lệnh do trình điều khiển tạo.
-ống
Sử dụng các đường ống thay vì các tệp tạm thời để liên lạc giữa các giai đoạn khác nhau của
biên dịch. Điều này không hoạt động trên một số hệ thống mà trình hợp dịch không thể đọc
từ một đường ống; nhưng trình hợp dịch GNU không gặp khó khăn gì.
--Cứu giúp
In (trên đầu ra tiêu chuẩn) mô tả về các tùy chọn dòng lệnh được hiểu bởi
gcc. Nếu -v tùy chọn cũng được chỉ định sau đó --Cứu giúp cũng được truyền cho các
các quy trình được gọi bởi gcc, để họ có thể hiển thị các tùy chọn dòng lệnh mà họ
Chấp nhận. Nếu -Wextra tùy chọn cũng đã được chỉ định (trước --Cứu giúp Lựa chọn),
thì các tùy chọn dòng lệnh không có tài liệu liên quan đến chúng cũng
hiển thị.
- mục tiêu-trợ giúp
In (trên đầu ra tiêu chuẩn) mô tả về các tùy chọn dòng lệnh cụ thể cho mục tiêu
cho mỗi công cụ. Đối với một số mục tiêu, thông tin bổ sung về mục tiêu cụ thể cũng có thể
đã in.
--help = {tốt nghiệp lớp XNUMX|[^]đủ điều kiện}[, ...]
In (trên đầu ra tiêu chuẩn) mô tả về các tùy chọn dòng lệnh được hiểu bởi
trình biên dịch phù hợp với tất cả các lớp và vòng loại được chỉ định. Đây là những
các lớp được hỗ trợ:
người tối ưu hóa
Hiển thị tất cả các tùy chọn tối ưu hóa được hỗ trợ bởi trình biên dịch.
cảnh báo
Hiển thị tất cả các tùy chọn kiểm soát các thông báo cảnh báo do trình biên dịch tạo ra.
mục tiêu
Hiển thị các tùy chọn mục tiêu cụ thể. Không giống như - mục tiêu-trợ giúp tùy chọn tuy nhiên, target-
các tùy chọn cụ thể của trình liên kết và trình hợp dịch không được hiển thị. Điều này là bởi vì
những công cụ đó hiện không hỗ trợ mở rộng --help = cú pháp.
thông số
Hiển thị các giá trị được công nhận bởi --param tùy chọn.
Ngôn ngữ
Hiển thị các tùy chọn được hỗ trợ cho Ngôn ngữ, Nơi Ngôn ngữ là tên của một trong số
các ngôn ngữ được hỗ trợ trong phiên bản GCC này.
chung
Hiển thị các tùy chọn phổ biến cho tất cả các ngôn ngữ.
Đây là những vòng loại được hỗ trợ:
không có giấy tờ
Chỉ hiển thị những tùy chọn không có giấy tờ.
gia nhập
Tùy chọn hiển thị lấy một đối số xuất hiện sau dấu bằng trong cùng một
đoạn văn bản liên tục, chẳng hạn như: --help = target.
riêng biệt
Tùy chọn hiển thị lấy một đối số xuất hiện dưới dạng một từ riêng biệt theo sau
tùy chọn ban đầu, chẳng hạn như: -o tập tin đầu ra.
Do đó, ví dụ: để hiển thị tất cả các công tắc dành riêng cho mục tiêu không có tài liệu được hỗ trợ bởi
trình biên dịch, sử dụng:
--help = mục tiêu, không có tài liệu
Có thể đảo ngược ý nghĩa của một bộ định lượng bằng cách thêm tiền tố vào ^ nhân vật, vì vậy
ví dụ để hiển thị tất cả các tùy chọn cảnh báo nhị phân (tức là những tùy chọn bật hoặc tắt
và điều đó không cần đối số) có mô tả, hãy sử dụng:
--help = cảnh báo, ^ đã tham gia, ^ không có tài liệu
Đối số để --help = không nên chỉ bao gồm các vòng loại ngược.
Có thể kết hợp nhiều lớp, mặc dù điều này thường hạn chế đầu ra
nhiều mà không có gì để hiển thị. Tuy nhiên, một trường hợp mà nó hoạt động là khi
một trong những lớp học là mục tiêu. Ví dụ: để hiển thị tất cả các mục tiêu cụ thể
các tùy chọn tối ưu hóa, sử dụng:
--help = target, trình tối ưu hóa
Sản phẩm --help = tùy chọn có thể được lặp lại trên dòng lệnh. Mỗi lần sử dụng kế tiếp sẽ hiển thị
lớp tùy chọn được yêu cầu của nó, bỏ qua những tùy chọn đã được hiển thị.
Nếu -Q tùy chọn xuất hiện trên dòng lệnh trước --help = tùy chọn, sau đó
văn bản mô tả được hiển thị bởi --help = bị thay đổi. Thay vì mô tả
tùy chọn, một dấu hiệu được đưa ra về việc tùy chọn được bật, tắt hoặc đặt
đến một giá trị cụ thể (giả sử rằng trình biên dịch biết điều này tại điểm mà
--help = tùy chọn được sử dụng).
Đây là một ví dụ được cắt ngắn từ cổng ARM của gcc:
% gcc -Q -mabi = 2 --help = target -c
Các tùy chọn sau là mục tiêu cụ thể:
-mabi = 2
-mabort-on-noreturn [đã tắt]
-mapcs [bị vô hiệu hóa]
Đầu ra nhạy cảm với tác động của các tùy chọn dòng lệnh trước đó, vì vậy
ví dụ, có thể tìm ra những tối ưu hóa nào được kích hoạt tại -O2 bằng cách sử dụng:
-Q -O2 --help = trình tối ưu hóa
Ngoài ra, bạn có thể khám phá những tối ưu hóa nhị phân nào được kích hoạt bởi -O3 bằng cách sử dụng:
gcc -c -Q -O3 --help = tối ưu hóa> / tmp / O3-opts
gcc -c -Q -O2 --help = tối ưu hóa> / tmp / O2-opts
diff / tmp / O2-opts / tmp / O3-opts | bật grep
-no-canonical-tiền tố
Không mở rộng bất kỳ liên kết tượng trưng nào, giải quyết các tham chiếu đến /../ or /. /hoặc tạo ra con đường
tuyệt đối khi tạo tiền tố tương đối.
--phiên bản
Hiển thị số phiên bản và bản quyền của GCC được gọi.
-vỏ bánh
Gọi tất cả các lệnh con trong một chương trình trình bao bọc. Tên của chương trình trình bao bọc và
các tham số của nó được chuyển dưới dạng danh sách được phân tách bằng dấu phẩy.
gcc -c tc -wrapper gdb, - args
Điều này gọi tất cả các chương trình con của gcc Dưới gdb --args, do đó lời kêu gọi của Cc1 is
gdb --args Cc1 ....
-fplugin =tên.vì thế
Tải mã plugin trong tệp tên.so, giả sử là một đối tượng được chia sẻ sẽ được
trình biên dịch. Tên cơ sở của tệp đối tượng được chia sẻ được sử dụng để xác định plugin
cho mục đích phân tích cú pháp đối số (Xem -fplugin-arg-tên-chính=giá trị phía dưới). Mỗi
plugin nên xác định các chức năng gọi lại được chỉ định trong API plugin.
-fplugin-arg-tên-chính=giá trị
Xác định một đối số được gọi là chính với giá trị là giá trị cho plugin được gọi là tên.
-fdump-ada-spec[-mảnh khảnh]
Đối với nguồn C và C ++ và bao gồm các tệp, hãy tạo thông số Ada tương ứng.
-fada-spec-parent =đơn vị
Kết hợp với -fdump-ada-spec[-mảnh khảnh] ở trên, tạo thông số Ada dưới dạng các đơn vị con của
cha mẹ đơn vị.
-fdump-go-spec =hồ sơ
Đối với các tệp đầu vào bằng bất kỳ ngôn ngữ nào, hãy tạo các khai báo Go tương ứng trong hồ sơ. Điều này
tạo các khai báo Go "const", "type", "var" và "func" có thể là một cách hữu ích
để bắt đầu viết giao diện Đi tới mã được viết bằng một số ngôn ngữ khác.
@hồ sơ
Đọc các tùy chọn dòng lệnh từ hồ sơ. Các tùy chọn đã đọc được chèn vào vị trí của
nguyên bản @hồ sơ Lựa chọn. Nếu như hồ sơ không tồn tại, hoặc không thể đọc được, thì tùy chọn
sẽ được xử lý theo nghĩa đen, và không bị xóa.
Tùy chọn trong hồ sơ được phân tách bằng khoảng trắng. Một ký tự khoảng trắng có thể được bao gồm
trong một tùy chọn bằng cách đặt toàn bộ tùy chọn trong dấu ngoặc kép hoặc đơn. Không tí nào
ký tự (bao gồm cả dấu gạch chéo ngược) có thể được thêm vào bằng cách thêm tiền tố vào ký tự là
bao gồm một dấu gạch chéo ngược. Các hồ sơ bản thân nó có thể chứa @ bổ sunghồ sơ tùy chọn; không tí nào
các tùy chọn như vậy sẽ được xử lý một cách đệ quy.
Biên dịch C + + Khóa Học
Các tệp nguồn C ++ thường sử dụng một trong các hậu tố .C, . Cc, .cpp, .CPP, .c ++, .cp, hoặc là
.cxx; Tệp tiêu đề C ++ thường sử dụng .H H, .hpp, .Hhoặc (đối với mã mẫu được chia sẻ) .tcc; Và
các tệp C ++ được xử lý trước sử dụng hậu tố .ii. GCC nhận dạng các tệp có những tên này và
biên dịch chúng dưới dạng chương trình C ++ ngay cả khi bạn gọi trình biên dịch giống như cách biên dịch
Chương trình C (thường có tên gcc).
Tuy nhiên, việc sử dụng gcc không thêm thư viện C ++. g ++ là một chương trình gọi GCC và
tự động chỉ định liên kết chống lại thư viện C ++. Nó xử lý .c, .h và .i các tập tin như
Tệp nguồn C ++ thay vì tệp nguồn C trừ khi -x Được sử dụng. Chương trình này cũng hữu ích
khi biên dịch trước tệp tiêu đề C với .h phần mở rộng để sử dụng trong các biên dịch C ++. Trên
nhiều hệ thống, g ++ cũng được cài đặt với tên c ++.
Khi bạn biên dịch các chương trình C ++, bạn có thể chỉ định nhiều tùy chọn dòng lệnh giống nhau
bạn sử dụng để biên dịch các chương trình bằng bất kỳ ngôn ngữ nào; hoặc các tùy chọn dòng lệnh có ý nghĩa đối với C
và các ngôn ngữ liên quan; hoặc các tùy chọn chỉ có ý nghĩa đối với các chương trình C ++.
Các lựa chọn Kiểm soát C Phương ngữ
Các tùy chọn sau kiểm soát phương ngữ của C (hoặc các ngôn ngữ bắt nguồn từ C, chẳng hạn như C ++,
Objective-C và Objective-C ++) mà trình biên dịch chấp nhận:
-ansi
Trong chế độ C, điều này tương đương với -std = c90. Trong chế độ C ++, nó tương đương với
-std = c ++ 98.
Thao tác này sẽ tắt một số tính năng nhất định của GCC không tương thích với ISO C90 (khi
biên dịch mã C) hoặc C ++ chuẩn (khi biên dịch mã C ++), chẳng hạn như "asm" và
từ khóa "typeof" và macro được xác định trước chẳng hạn như "unix" và "vax" xác định
loại hệ thống bạn đang sử dụng. Nó cũng cho phép ISO không mong muốn và hiếm khi được sử dụng
tính năng tam giác. Đối với trình biên dịch C, nó vô hiệu hóa nhận dạng kiểu C ++ //
nhận xét cũng như từ khóa "nội tuyến".
Các từ khóa thay thế "__asm__", "__extension__", "__inline__" và "__typeof__"
tiếp tục làm việc mặc dù -ansi. Bạn sẽ không muốn sử dụng chúng trong chương trình ISO C,
tất nhiên, nhưng sẽ hữu ích nếu đặt chúng trong các tệp tiêu đề có thể được đưa vào
biên dịch được thực hiện với -ansi. Các macro được xác định trước thay thế, chẳng hạn như "__unix__" và
"__vax__" cũng có sẵn, có hoặc không -ansi.
Sản phẩm -ansi tùy chọn không khiến các chương trình không phải ISO bị từ chối vô cớ. Vì
điều đó, -Quảng cáo được yêu cầu ngoài -ansi.
Macro "__STRICT_ANSI__" được xác định trước khi -ansi tùy chọn được sử dụng. Một số tiêu đề
các tệp có thể nhận thấy macro này và không khai báo một số chức năng hoặc định nghĩa
một số macro nhất định mà tiêu chuẩn ISO không yêu cầu; điều này là để tránh can thiệp
với bất kỳ chương trình nào có thể sử dụng những tên này cho những thứ khác.
Các hàm thường được tích hợp sẵn nhưng không có ngữ nghĩa do ISO C xác định (chẳng hạn
như "alloca" và "ffs") không phải là các hàm tích hợp khi -ansi Được sử dụng.
-std =
Xác định tiêu chuẩn ngôn ngữ. Tùy chọn này hiện chỉ được hỗ trợ khi
biên dịch C hoặc C ++.
Trình biên dịch có thể chấp nhận một số tiêu chuẩn cơ sở, chẳng hạn như c90 or c ++ 98, và phương ngữ GNU
trong số các tiêu chuẩn đó, chẳng hạn như gnu90 or gnu ++ 98. Khi một tiêu chuẩn cơ sở được chỉ định,
trình biên dịch chấp nhận tất cả các chương trình tuân theo tiêu chuẩn đó cộng với những chương trình sử dụng phần mở rộng GNU
điều đó không mâu thuẫn với nó. Ví dụ, -std = c90 tắt các tính năng nhất định của GCC
không tương thích với ISO C90, chẳng hạn như từ khóa "asm" và "typeof", nhưng không
các phần mở rộng GNU khác không có ý nghĩa trong ISO C90, chẳng hạn như bỏ qua
số hạng giữa của biểu thức "?:". Mặt khác, khi phương ngữ GNU của một tiêu chuẩn
được chỉ định, tất cả các tính năng được trình biên dịch hỗ trợ đều được bật, ngay cả khi những
các tính năng thay đổi ý nghĩa của tiêu chuẩn cơ sở. Do đó, một số tuân thủ nghiêm ngặt
chương trình có thể bị từ chối. Tiêu chuẩn cụ thể được sử dụng bởi -Quảng cáo để xác định
những tính năng nào là phần mở rộng GNU với phiên bản đó của tiêu chuẩn. Ví dụ
-std = gnu90 -Quảng cáo cảnh báo về kiểu C ++ // nhận xét, trong khi -std = gnu99 -Quảng cáo
không làm.
Giá trị cho tùy chọn này phải được cung cấp; giá trị có thể là
c90
c89
iso9899: 1990
Hỗ trợ tất cả các chương trình ISO C90 (một số phần mở rộng GNU nhất định xung đột với ISO C90
bị vô hiệu hóa). Giống như -ansi cho mã C.
iso9899: 199409
ISO C90 được sửa đổi trong bản sửa đổi 1.
c99
c9x
iso9899: 1999
iso9899: 199x
ISO C99. Lưu ý rằng tiêu chuẩn này vẫn chưa được hỗ trợ đầy đủ; Thấy chưa
<http://gcc.gnu.org/c99status.html> để biết thêm thông tin. Tên c9x và
iso9899: 199x không được dùng nữa.
c11
c1x
iso9899: 2011
ISO C11, bản sửa đổi năm 2011 của tiêu chuẩn ISO C. Hỗ trợ không đầy đủ và
thực nghiệm. Tên c1x không được dùng nữa.
gnu90
gnu89
Phương ngữ GNU của ISO C90 (bao gồm một số tính năng của C99). Đây là mặc định cho C
Mã.
gnu99
gnu9x
Phương ngữ GNU của ISO C99. Khi ISO C99 được triển khai đầy đủ trong GCC, điều này sẽ
trở thành mặc định. Tên gnu9x không được dùng nữa.
gnu11
gnu1x
Phương ngữ GNU của ISO C11. Hỗ trợ chưa đầy đủ và đang thử nghiệm. Tên gnu1x
không được dùng nữa.
c ++ 98
c ++ 03
Tiêu chuẩn ISO C ++ 1998 cùng với kiến thức kỹ thuật năm 2003 và một số bổ sung
báo cáo khiếm khuyết. Giống như -ansi cho mã C ++.
gnu ++ 98
gnu ++ 03
Phương ngữ GNU của -std = c ++ 98. Đây là mặc định cho mã C ++.
c ++ 11
c ++ 0x
Tiêu chuẩn ISO C ++ 2011 cùng với các sửa đổi. Hỗ trợ cho C ++ 11 vẫn còn
thử nghiệm và có thể thay đổi theo những cách không tương thích trong các bản phát hành trong tương lai. Tên
c ++ 0x không được dùng nữa.
gnu ++ 11
gnu ++ 0x
Phương ngữ GNU của -std = c ++ 11. Hỗ trợ cho C ++ 11 vẫn đang thử nghiệm và có thể thay đổi
theo những cách không tương thích trong các bản phát hành trong tương lai. Tên gnu ++ 0x không được dùng nữa.
c ++ 1y
Bản sửa đổi tiếp theo của tiêu chuẩn ISO C ++, được lên kế hoạch dự kiến cho năm 2017. Hỗ trợ
mang tính thử nghiệm cao và gần như chắc chắn sẽ thay đổi theo những cách không tương thích trong
bản phát hành trong tương lai.
gnu ++ 1y
Phương ngữ GNU của -std = c ++ 1y. Hỗ trợ mang tính thử nghiệm cao và hầu như sẽ
chắc chắn thay đổi theo những cách không tương thích trong các bản phát hành trong tương lai.
-fgnu89-nội tuyến
Tùy chọn -fgnu89-nội tuyến yêu cầu GCC sử dụng ngữ nghĩa GNU truyền thống cho "nội tuyến"
các chức năng khi ở chế độ C99.
Tùy chọn này được chấp nhận và bỏ qua bởi GCC phiên bản 4.1.3 lên đến nhưng không bao gồm
4.3. Trong GCC phiên bản 4.3 trở lên, nó thay đổi hành vi của GCC trong chế độ C99. Sử dụng
tùy chọn này gần tương đương với việc thêm thuộc tính hàm "gnu_inline" vào tất cả
các hàm nội tuyến.
Tùy chọn -fno-gnu89-nội tuyến yêu cầu GCC sử dụng ngữ nghĩa C99 một cách rõ ràng cho
"nội tuyến" khi ở chế độ C99 hoặc gnu99 (tức là nó chỉ định hành vi mặc định). Cái này
lần đầu tiên được hỗ trợ trong GCC 4.3. Tùy chọn này không được hỗ trợ trong -std = c90 or
-std = gnu90 chế độ.
Có thể sử dụng các macro của bộ xử lý trước "__GNUC_GNU_INLINE__" và "__GNUC_STDC_INLINE__"
để kiểm tra ngữ nghĩa nào có hiệu lực đối với các hàm "nội tuyến".
-aux-thông tin tên tập tin
Xuất ra các khai báo nguyên mẫu tên tệp đã cho cho tất cả các hàm được khai báo và / hoặc
được xác định trong một đơn vị dịch, bao gồm cả những người trong tệp tiêu đề. Tùy chọn này là
im lặng bỏ qua bằng bất kỳ ngôn ngữ nào khác ngoài C.
Bên cạnh các tờ khai, trong phần chú thích, tập tin cho biết nguồn gốc của mỗi tờ khai
(tệp nguồn và dòng), cho dù tuyên bố là ẩn, nguyên mẫu hay
không có khuôn mẫu (I, N cho mới hoặc O cho cũ, tương ứng, trong ký tự đầu tiên sau
số dòng và dấu hai chấm), và liệu nó đến từ một khai báo hay một định nghĩa
(C or F, tương ứng, trong ký tự sau đây). Trong trường hợp của chức năng
định nghĩa, danh sách các đối số kiểu K & R theo sau các khai báo của chúng cũng là
cung cấp, bình luận bên trong, sau khi tuyên bố.
-fallow-parameterless-variadic-hàm
Chấp nhận các chức năng khác nhau mà không có tham số được đặt tên.
Mặc dù có thể xác định một chức năng như vậy, nhưng điều này không hữu ích lắm vì nó là
không thể đọc các đối số. Điều này chỉ được hỗ trợ cho C vì cấu trúc này là
được phép bởi C ++.
-fno-asm
Không nhận dạng "asm", "inline" hoặc "typeof" là một từ khóa, để mã có thể sử dụng những
từ làm định danh. Bạn có thể sử dụng các từ khóa "__asm__", "__inline__" và
"__typeof__" thay vào đó. -ansi ngụ ý -fno-asm.
Trong C ++, chuyển đổi này chỉ ảnh hưởng đến từ khóa "typeof", vì "asm" và "inline" là
từ khóa chuẩn. Bạn có thể muốn sử dụng -fno-gnu-từ khóa thay vào đó cờ, có
cùng hiệu quả. Ở chế độ C99 (-std = c99 or -std = gnu99), công tắc này chỉ ảnh hưởng đến
từ khóa "asm" và "typeof", vì "nội tuyến" là từ khóa tiêu chuẩn trong ISO C99.
-fno-nội trang
-fno-nội trang-chức năng
Không nhận ra các chức năng tích hợp không bắt đầu bằng __được xây dựng trong_ như tiền tố.
GCC thường tạo mã đặc biệt để xử lý một số chức năng tích hợp sẵn hơn
hiệu quả; ví dụ: các lệnh gọi đến "alloca" có thể trở thành các lệnh đơn lẻ
điều chỉnh ngăn xếp trực tiếp và các lệnh gọi tới "memcpy" có thể trở thành các vòng sao chép nội tuyến. Các
mã kết quả thường nhỏ hơn và nhanh hơn, nhưng vì hàm này gọi không
còn xuất hiện như vậy, bạn không thể đặt điểm ngắt trên các cuộc gọi đó, cũng như không thể thay đổi
hoạt động của các chức năng bằng cách liên kết với một thư viện khác. Ngoài ra, khi
một chức năng được công nhận là một chức năng tích hợp, GCC có thể sử dụng thông tin về
chức năng cảnh báo về các sự cố với các lệnh gọi đến chức năng đó hoặc để tạo thêm
mã hiệu quả, ngay cả khi mã kết quả vẫn chứa các lệnh gọi đến hàm đó. Vì
ví dụ, các cảnh báo được đưa ra với - Định dạng đối với các cuộc gọi không hợp lệ đến "printf" khi "printf" là
được xây dựng trong và "strlen" được biết là không sửa đổi bộ nhớ chung.
Với -fno-nội trang-chức năng chỉ tùy chọn chức năng tích hợp sẵn chức năng bị vô hiệu hóa.
chức năng không được bắt đầu bằng __được xây dựng trong_. Nếu một hàm được đặt tên không được tích hợp sẵn
trong phiên bản GCC này, tùy chọn này bị bỏ qua. Không có tương ứng
-fxây dựng-chức năng Lựa chọn; nếu bạn muốn bật các chức năng tích hợp một cách chọn lọc khi
sử dụng -fno-nội trang or -chỉ cần, bạn có thể xác định các macro như:
#define abs (n) __builtin_abs ((n))
#define strcpy (d, s) __builtin_strcpy ((d), (s))
-Fhosted
Khẳng định rằng quá trình biên dịch nhắm mục tiêu đến một môi trường được lưu trữ. Điều này nghĩa là -fxây dựng. Một
môi trường được lưu trữ là một trong đó toàn bộ thư viện tiêu chuẩn có sẵn và trong
mà "main" có kiểu trả về là "int". Các ví dụ là gần như tất cả mọi thứ ngoại trừ một
hạt nhân. Điều này tương đương với -fno-tự do.
-chỉ cần
Khẳng định rằng quá trình biên dịch nhắm mục tiêu đến một môi trường tự do. Điều này nghĩa là
-fno-nội trang. Môi trường tự do là môi trường mà trong đó thư viện tiêu chuẩn có thể không
tồn tại và khởi động chương trình có thể không nhất thiết phải ở "chính". Ví dụ rõ ràng nhất
là một nhân hệ điều hành. Điều này tương đương với -fno được lưu trữ.
-fopenmp
Cho phép xử lý các lệnh OpenMP "#pragma omp" trong C / C ++ và "! $ Omp" trong Fortran.
Thời Gian -fopenmp được chỉ định, trình biên dịch tạo mã song song theo
Giao diện chương trình ứng dụng OpenMP v3.0http://www.openmp.org/>. Tùy chọn này
ngụ ý -pthreadvà do đó chỉ được hỗ trợ trên các mục tiêu có hỗ trợ
-pthread.
-fgnu-tm
Khi tùy chọn -fgnu-tm được chỉ định, trình biên dịch tạo mã cho Linux
biến thể của tài liệu thông số kỹ thuật ABI Bộ nhớ Giao dịch hiện tại của Intel (Bản sửa đổi
1.1, ngày 6 tháng 2009 năm XNUMX). Đây là một tính năng thử nghiệm có giao diện có thể thay đổi trong
các phiên bản tương lai của GCC, khi đặc điểm kỹ thuật chính thức thay đổi. Xin lưu ý rằng không
tất cả các kiến trúc được hỗ trợ cho tính năng này.
Để biết thêm thông tin về sự hỗ trợ của GCC cho bộ nhớ giao dịch,
Lưu ý rằng tính năng bộ nhớ giao dịch không được hỗ trợ với các ngoại lệ không phải cuộc gọi
(-fnon-call-ngoại lệ).
-fms-phần mở rộng
Chấp nhận một số cấu trúc không chuẩn được sử dụng trong các tệp tiêu đề của Microsoft.
Trong mã C ++, điều này cho phép tên thành viên trong cấu trúc tương tự như các kiểu trước đó
các tờ khai.
typedef int UOW;
cấu trúc ABC {
UỐI UỐI;
};
Một số trường hợp các trường không có tên trong cấu trúc và liên hiệp chỉ được chấp nhận với điều này
tùy chọn.
-fplan9-phần mở rộng
Chấp nhận một số cấu trúc không chuẩn được sử dụng trong mã Kế hoạch 9.
Điều này cho phép -fms-phần mở rộng, cho phép chuyển con trỏ đến các cấu trúc ẩn danh
các trường đến các hàm mong đợi con trỏ đến các phần tử của loại trường và
cho phép tham chiếu đến các trường ẩn danh được khai báo bằng cách sử dụng typedef. Đây chỉ là
được hỗ trợ cho C, không phải C ++.
-trigraphs
Hỗ trợ đồ thị ISO C. Các -ansi tùy chọn (và -std các tùy chọn cho ISO C nghiêm ngặt
sự phù hợp) ngụ ý -trigraphs.
-truyên thông
-truyền thống-cpp
Trước đây, các tùy chọn này khiến GCC cố gắng mô phỏng một trình biên dịch C trước tiêu chuẩn.
Chúng hiện chỉ được hỗ trợ với -E chuyển. Bộ tiền xử lý tiếp tục hỗ trợ
một chế độ tiền tiêu chuẩn. Xem sổ tay GNU CPP để biết thêm chi tiết.
-fcond-không khớp
Cho phép biểu thức điều kiện có kiểu không khớp trong đối số thứ hai và thứ ba.
Giá trị của một biểu thức như vậy là vô hiệu. Tùy chọn này không được hỗ trợ cho C ++.
-flax-vector-chuyển đổi
Cho phép chuyển đổi ngầm giữa các vectơ có số lượng phần tử khác nhau và / hoặc
các loại phần tử không tương thích. Tùy chọn này không nên được sử dụng cho mã mới.
-funsigned-char
Đặt loại "char" là không dấu, như "unsigned char".
Mỗi loại máy có một mặc định cho "char" phải là gì. Nó giống như
"unsigned char" theo mặc định hoặc như "sign char" theo mặc định.
Tốt nhất, một chương trình di động phải luôn sử dụng "ký tự có dấu" hoặc "ký tự không dấu" khi nó
phụ thuộc vào tính ký của một đối tượng. Nhưng nhiều chương trình đã được viết để sử dụng
đơn giản là "char" và mong đợi nó được ký hoặc mong đợi nó không được ký, tùy thuộc vào
máy móc chúng được viết cho. Tùy chọn này và nghịch đảo của nó, cho phép bạn thực hiện một
chương trình hoạt động với mặc định ngược lại.
Loại "char" luôn là một loại khác biệt với mỗi loại "ký tự có dấu" hoặc "không dấu
char ”, mặc dù hành vi của nó luôn giống như một trong hai điều đó.
-signed-char
Hãy để kiểu "char" được ký, như "ký tự".
Lưu ý rằng điều này tương đương với -fno-unsign-char, đó là dạng phủ định của
-funsigned-char. Tương tự như vậy, tùy chọn -fno-ký-char tương đương với
-funsigned-char.
-fsigned-bitfield
-funsigned-bitfields
-fno-sign-bitfields
-fno-unsign-bitfield
Các tùy chọn này kiểm soát việc một trường bit được ký hay không có dấu, khi khai báo
không sử dụng "đã ký" hoặc "chưa ký". Theo mặc định, trường bit như vậy được ký,
bởi vì điều này nhất quán: các kiểu số nguyên cơ bản như "int" là kiểu có dấu.
Các lựa chọn Kiểm soát C + + Phương ngữ
Phần này mô tả các tùy chọn dòng lệnh chỉ có ý nghĩa đối với các chương trình C ++.
Bạn cũng có thể sử dụng hầu hết các tùy chọn trình biên dịch GNU bất kể ngôn ngữ chương trình của bạn là gì
là trong. Ví dụ: bạn có thể biên dịch một tệp "firstClass.C" như thế này:
g ++ -g -frepo -O -c firstClass.C
Trong ví dụ này, chỉ -frepo là một tùy chọn chỉ dành cho các chương trình C ++; bạn có thể dùng
các tùy chọn khác với bất kỳ ngôn ngữ nào được GCC hỗ trợ.
Đây là danh sách các tùy chọn có thể để biên dịch các chương trình C ++:
-fabi-phiên bản =n
Sử dụng phiên bản n của C ++ ABI. Mặc định là phiên bản 2.
Phiên bản 0 đề cập đến phiên bản phù hợp nhất với đặc tả C ++ ABI.
Do đó, ABI thu được bằng cách sử dụng phiên bản 0 sẽ thay đổi trong các phiên bản khác nhau của G ++
vì các lỗi ABI đã được sửa.
Phiên bản 1 là phiên bản C ++ ABI xuất hiện lần đầu trong G ++ 3.2.
Phiên bản 2 là phiên bản C ++ ABI xuất hiện lần đầu trong G ++ 3.4.
Phiên bản 3 sửa lỗi khi nhập địa chỉ hằng số làm đối số mẫu.
Phiên bản 4, lần đầu tiên xuất hiện trong G ++ 4.5, thực hiện một quy trình chuẩn cho vectơ
các loại.
Phiên bản 5, xuất hiện lần đầu trong G ++ 4.6, sửa lỗi sai của thuộc tính
const / variable trên các kiểu con trỏ hàm, kiểu khai báo thuần túy và sử dụng
tham số hàm trong phần khai báo một tham số khác.
Phiên bản 6, xuất hiện lần đầu trong G ++ 4.7, sửa hành vi xúc tiến của C ++ 11
phạm vi enums và sự trộn lẫn của các gói đối số mẫu, const / static_cast, tiền tố ++
và -, và một hàm phạm vi lớp được sử dụng làm đối số mẫu.
Xem thêm -Wabi.
-fno-kiểm soát truy cập
Tắt tất cả kiểm tra quyền truy cập. Công tắc này chủ yếu hữu ích để khắc phục các lỗi trong
mã kiểm soát truy cập.
-fcheck-mới
Kiểm tra xem con trỏ được trả về bởi "operator new" có phải là giá trị không trước khi thử
sửa đổi bộ nhớ được cấp phát. Việc kiểm tra này thường không cần thiết vì C ++
tiêu chuẩn chỉ định rằng "operator new" chỉ trả về 0 nếu nó được khai báo ném(), Trong
trong trường hợp đó, trình biên dịch luôn kiểm tra giá trị trả về ngay cả khi không có tùy chọn này. Trong
tất cả các trường hợp khác, khi "operator new" có đặc tả ngoại lệ không trống, bộ nhớ
cạn kiệt được báo hiệu bằng cách ném "std :: bad_alloc". Xem thêm mới (không ném).
-fconstexpr-depth =n
Đặt độ sâu đánh giá lồng nhau tối đa cho các hàm constexpr C ++ 11 thành n. Một giới hạn
là cần thiết để phát hiện đệ quy vô tận trong quá trình đánh giá biểu thức không đổi. Các
tối thiểu được quy định bởi tiêu chuẩn là 512.
-fdeduce-init-list
Cho phép khấu trừ tham số loại mẫu là "std :: initializer_list" khỏi dấu ngoặc nhọn-
danh sách trình khởi tạo kèm theo, tức là
bản mẫu tự động chuyển tiếp (T t) -> kiểu khai báo (realfn (t))
{
trả về realfn (t);
}
void f ()
{
chuyển tiếp ({1,2}); // chuyển tiếp cuộc gọi >
}
Khoản khấu trừ này được thực hiện như một phần mở rộng có thể có đối với khoản tiền được đề xuất ban đầu
ngữ nghĩa cho tiêu chuẩn C ++ 11, nhưng không phải là một phần của tiêu chuẩn cuối cùng, vì vậy nó
bị tắt theo mặc định. Tùy chọn này không được dùng nữa và có thể bị xóa trong tương lai
phiên bản của G ++.
-bạn gái-tiêm
Đưa các hàm bạn bè vào không gian tên bao quanh để chúng hiển thị bên ngoài
phạm vi của lớp mà chúng được khai báo. Chức năng bạn bè đã được ghi lại
để làm việc theo cách này trong Hướng dẫn sử dụng tham chiếu C ++ có chú thích cũ và các phiên bản của G ++ trước đây
4.1 luôn hoạt động theo cách đó. Tuy nhiên, trong ISO C ++, một hàm bạn bè không
được khai báo trong một phạm vi bao quanh chỉ có thể được tìm thấy bằng cách sử dụng tra cứu phụ thuộc đối số.
Tùy chọn này khiến bạn bè được tiêm giống như họ đã có trong các bản phát hành trước đó.
Tùy chọn này là để tương thích và có thể bị xóa trong bản phát hành G ++ trong tương lai.
-fno-elide-constructor
Tiêu chuẩn C ++ cho phép việc triển khai bỏ qua việc tạo tạm thời chỉ là
dùng để khởi tạo một đối tượng khác cùng kiểu. Chỉ định tùy chọn này sẽ vô hiệu hóa
tối ưu hóa đó và buộc G ++ phải gọi hàm tạo bản sao trong mọi trường hợp.
-fno-thi hành-eh-specs
Không tạo mã để kiểm tra xem có vi phạm các thông số kỹ thuật ngoại lệ trong thời gian chạy hay không.
Tùy chọn này vi phạm tiêu chuẩn C ++, nhưng có thể hữu ích để giảm kích thước mã trong
sản xuất xây dựng, giống như xác định LỖI NDEBUG. Điều này không cấp quyền cho mã người dùng
để ném các ngoại lệ vi phạm các thông số kỹ thuật ngoại lệ; trình biên dịch vẫn
tối ưu hóa dựa trên các thông số kỹ thuật, do đó, việc đưa ra một ngoại lệ không mong muốn dẫn đến
hành vi không xác định tại thời gian chạy.
-fextern-tls-init
-fno-extern-tls-init
Các tiêu chuẩn C ++ 11 và OpenMP cho phép thread_local và chủ đề riêng tư các biến để có
khởi tạo động (thời gian chạy). Để hỗ trợ điều này, bất kỳ việc sử dụng biến như vậy sẽ
thông qua một hàm wrapper thực hiện bất kỳ khởi tạo cần thiết nào. Khi sử dụng
và định nghĩa của biến nằm trong cùng một đơn vị dịch, chi phí này có thể là
được tối ưu hóa đi, nhưng khi sử dụng trong một đơn vị dịch khác thì có
chi phí đáng kể ngay cả khi biến không thực sự cần động
khởi tạo. Nếu người lập trình có thể chắc chắn rằng không sử dụng biến trong một
xác định TU cần phải kích hoạt khởi tạo động (vì biến là
được khởi tạo tĩnh hoặc sử dụng biến trong định nghĩa TU sẽ được thực thi
trước khi sử dụng bất kỳ trong TU khác), họ có thể tránh chi phí này với
-fno-extern-tls-init tùy chọn.
Trên các mục tiêu hỗ trợ bí danh biểu tượng, mặc định là -fextern-tls-init. Trên các mục tiêu
không hỗ trợ bí danh biểu tượng, mặc định là -fno-extern-tls-init.
-for-scope
-fno-cho-phạm vi
If -for-scope được chỉ định, phạm vi của các biến được khai báo trong for-init-tuyên bố
được giới hạn trong cho chính vòng lặp, như được chỉ định bởi tiêu chuẩn C ++. Nếu như
-fno-cho-phạm vi được chỉ định, phạm vi của các biến được khai báo trong for-init-tuyên bố
mở rộng đến cuối phạm vi bao quanh, như trường hợp trong các phiên bản cũ của G ++ và
các triển khai khác (truyền thống) của C ++.
Nếu không có cờ nào được đưa ra, thì mặc định là tuân theo tiêu chuẩn, nhưng cho phép và đưa ra
cảnh báo cho mã kiểu cũ nếu không sẽ không hợp lệ hoặc có mã khác
hành vi.
-fno-gnu-từ khóa
Không nhận ra "typeof" là một từ khóa, để mã có thể sử dụng từ này như một
định danh. Bạn có thể sử dụng từ khóa "__typeof__" để thay thế. -ansi ngụ ý
-fno-gnu-từ khóa.
-fno-implicit-template
Không bao giờ phát mã cho các mẫu không nội dòng được khởi tạo ngầm (tức là bằng
sử dụng); chỉ phát ra mã cho các thuyết minh rõ ràng.
-fno-implicit-inline-template
Cũng không phát ra mã cho các mô tả ẩn của các mẫu nội tuyến. Mặc định
là xử lý nội tuyến khác nhau để biên dịch có và không cần tối ưu hóa
cùng một tập hợp các thuyết minh rõ ràng.
-fno-triển khai-nội tuyến
Để tiết kiệm dung lượng, không phát ra các bản sao nằm ngoài dòng của các hàm nội tuyến được điều khiển bởi
#pragma thực hiện. Điều này gây ra lỗi trình liên kết nếu các chức năng này không được nội tuyến
ở mọi nơi chúng được gọi.
-fms-phần mở rộng
Tắt cảnh báo Wpedantic về các cấu trúc được sử dụng trong MFC, chẳng hạn như int ngầm định và
nhận được một con trỏ đến hàm thành viên thông qua cú pháp không chuẩn.
-fno-nonansi-nội trang
Tắt các khai báo cài sẵn của các chức năng không được ANSI / ISO C.
bao gồm "ffs", "alloca", "_exit", "index", "bzero", "suggest" và các liên quan khác
chức năng.
-fnothrow-opt
Xử lý một đặc tả ngoại lệ "throw ()" như thể nó là một đặc tả "không chấp nhận" cho
giảm hoặc loại bỏ chi phí kích thước văn bản liên quan đến một hàm không có ngoại lệ
sự chỉ rõ. Nếu hàm có các biến cục bộ thuộc loại không tầm thường
hàm hủy, đặc tả ngoại lệ thực sự làm cho hàm nhỏ hơn vì
việc dọn dẹp EH cho các biến đó có thể được tối ưu hóa. Hiệu ứng ngữ nghĩa là
rằng một ngoại lệ được đưa ra khỏi một hàm với một đặc tả ngoại lệ như vậy
dẫn đến một cuộc gọi "chấm dứt" thay vì "bất ngờ".
-fno-toán tử-tên
Không xử lý các từ khóa tên toán tử "và", "bitand", "bitor", "phàn nàn", "không phải", "hoặc"
và "xor" dưới dạng từ đồng nghĩa với tư cách là từ khóa.
-fno-tùy chọn-đường chéo
Vô hiệu hóa các chẩn đoán mà tiêu chuẩn nói rằng một trình biên dịch không cần đưa ra.
Hiện tại, chẩn đoán duy nhất do G ++ đưa ra là chẩn đoán cho một tên có
nhiều nghĩa trong một lớp.
-dễ dàng
Hạ cấp một số chẩn đoán về mã không phù hợp từ lỗi xuống cảnh báo. Vì vậy,
sử dụng -dễ dàng cho phép biên dịch một số mã không phù hợp.
-fno-đẹp-mẫu
Khi một thông báo lỗi đề cập đến một chuyên môn hóa của một mẫu hàm, trình biên dịch
thường in chữ ký của mẫu, theo sau là các đối số của mẫu và
bất kỳ typedef hoặc tên kiểu nào trong chữ ký (ví dụ: "void f (T) [with T = int]" thay vì
hơn "void f (int)") để có thể biết rõ mẫu nào có liên quan. Khi có lỗi
thông báo đề cập đến một chuyên môn hóa của một mẫu lớp, trình biên dịch bỏ qua bất kỳ
đối số mẫu phù hợp với đối số mẫu mặc định cho mẫu đó. Nếu như
một trong hai hành vi này làm cho việc hiểu thông báo lỗi trở nên khó khăn hơn là
dễ dàng hơn, bạn có thể sử dụng -fno-đẹp-mẫu để vô hiệu hóa chúng.
-frepo
Bật tính năng tạo mẫu tự động tại thời điểm liên kết. Tùy chọn này cũng ngụ ý
-fno-implicit-template.
-fno-rtti
Vô hiệu hóa việc tạo thông tin về mọi lớp bằng các hàm ảo để sử dụng bởi
các tính năng nhận dạng kiểu thời gian chạy C ++ (động_cast và người đánh chữ). Nếu bạn không
sử dụng các phần đó của ngôn ngữ, bạn có thể tiết kiệm một số dung lượng bằng cách sử dụng cờ này. Ghi chú
rằng việc xử lý ngoại lệ sử dụng cùng một thông tin, nhưng G ++ tạo ra nó khi cần thiết. Các
động_cast toán tử vẫn có thể được sử dụng cho các phôi không yêu cầu loại thời gian chạy
thông tin, tức là chuyển thành "void *" hoặc các lớp cơ sở rõ ràng.
-fstats
Gửi số liệu thống kê về xử lý front-end vào cuối quá trình biên dịch. Cái này
thông tin thường chỉ hữu ích cho nhóm phát triển G ++.
-fstrict-enums
Cho phép trình biên dịch tối ưu hóa bằng cách sử dụng giả định rằng một giá trị của kiểu liệt kê
chỉ có thể là một trong các giá trị của kiểu liệt kê (như được định nghĩa trong tiêu chuẩn C ++;
về cơ bản, một giá trị có thể được biểu diễn bằng số lượng bit tối thiểu cần thiết để
đại diện cho tất cả các điều tra viên). Giả định này có thể không hợp lệ nếu chương trình sử dụng
ép kiểu để chuyển đổi một giá trị số nguyên tùy ý thành kiểu liệt kê.
-ftemplate-backtrace-limit =n
Đặt số lượng ghi chú khởi tạo mẫu tối đa cho một cảnh báo hoặc lỗi
đến n. Giá trị mặc định là 10.
-ftemplate-depth =n
Đặt độ sâu khởi tạo tối đa cho các lớp mẫu thành n. Một giới hạn về
độ sâu tạo mẫu là cần thiết để phát hiện các đệ quy vô tận trong quá trình tạo mẫu
lập trình lớp. Các chương trình tuân theo ANSI / ISO C ++ không được dựa trên mức tối đa
độ sâu lớn hơn 17 (được thay đổi thành 1024 trong C ++ 11). Giá trị mặc định là 900, vì
trình biên dịch có thể hết không gian ngăn xếp trước khi đạt 1024 trong một số tình huống.
-fno-threadsafe-statics
Không phát ra mã bổ sung để sử dụng các quy trình được chỉ định trong C ++ ABI cho luồng-
khởi tạo an toàn các tĩnh cục bộ. Bạn có thể sử dụng tùy chọn này để giảm kích thước mã
một chút trong mã không cần phải an toàn theo luồng.
-cầu chì-cxa-atexit
Đăng ký hàm hủy cho các đối tượng có thời lượng lưu trữ tĩnh bằng "__cxa_atexit"
chứ không phải là chức năng "atexit". Tùy chọn này là bắt buộc để có đầy đủ
xử lý theo tiêu chuẩn của trình hủy tĩnh, nhưng chỉ hoạt động nếu thư viện C của bạn
hỗ trợ "__cxa_atexit".
-fno-use-cxa-get-ngoại lệ-ptr
Không sử dụng quy trình thời gian chạy "__cxa_get_exception_ptr". Điều này gây ra
"std :: uncaught_exception" là không chính xác, nhưng cần thiết nếu quy trình thời gian chạy là
Không có sẵn.
-fvisibility-inlines-hidden
Công tắc này tuyên bố rằng người dùng không cố gắng so sánh các con trỏ với nội tuyến
các hàm hoặc phương thức trong đó địa chỉ của hai hàm được sử dụng khác nhau
đối tượng dùng chung.
Hiệu quả của việc này là GCC có thể, một cách hiệu quả, đánh dấu các phương pháp nội tuyến với
"__attribute__ ((khả năng hiển thị (" ẩn ")))" để chúng không xuất hiện trong bản xuất
bảng của DSO và không yêu cầu chuyển hướng PLT khi được sử dụng trong DSO.
Việc kích hoạt tùy chọn này có thể có tác động đáng kể đến thời gian tải và liên kết của DSO vì nó
giảm hàng loạt kích thước của bảng xuất động khi thư viện làm nặng
sử dụng các mẫu.
Hành vi của công tắc này không hoàn toàn giống với việc đánh dấu các phương thức là ẩn
trực tiếp, bởi vì nó không ảnh hưởng đến các biến tĩnh cục bộ đối với hàm hoặc nguyên nhân
trình biên dịch để suy ra rằng hàm được định nghĩa chỉ trong một đối tượng được chia sẻ.
Bạn có thể đánh dấu một phương pháp là có khả năng hiển thị rõ ràng để phủ nhận tác dụng của
chuyển đổi cho phương pháp đó. Ví dụ: nếu bạn muốn so sánh các con trỏ với một
phương pháp nội dòng cụ thể, bạn có thể đánh dấu nó là có khả năng hiển thị mặc định. Đánh dấu
lớp bao quanh với khả năng hiển thị rõ ràng không có tác dụng.
Các phương thức nội tuyến được khởi tạo rõ ràng không bị ảnh hưởng bởi tùy chọn này vì liên kết của chúng
nếu không có thể vượt qua ranh giới thư viện được chia sẻ.
-fvisibility-ms-compat
Cờ này cố gắng sử dụng cài đặt khả năng hiển thị để tạo mô hình liên kết C ++ của GCC
tương thích với Microsoft Visual Studio.
Cờ thực hiện những thay đổi này đối với mô hình liên kết của GCC:
1. Nó đặt khả năng hiển thị mặc định thành "ẩn", như -fvisibility = ẩn.
2. Các loại, nhưng không phải là thành viên của chúng, không bị ẩn theo mặc định.
3. Quy tắc Một định nghĩa được nới lỏng cho các loại không có khả năng hiển thị rõ ràng
các thông số kỹ thuật được xác định trong nhiều đối tượng được chia sẻ: những khai báo đó
được cho phép nếu chúng được cho phép khi tùy chọn này không được sử dụng.
Trong mã mới, tốt hơn là sử dụng -fvisibility = ẩn và xuất những lớp được
dự định để có thể nhìn thấy bên ngoài. Thật không may, mã có thể dựa vào,
có lẽ vô tình, về hành vi Visual Studio.
Trong số những hậu quả của những thay đổi này là các thành viên dữ liệu tĩnh cùng loại
với cùng một tên nhưng được xác định trong các đối tượng dùng chung khác nhau là khác nhau, vì vậy việc thay đổi
cái này không thay đổi cái kia; và con trỏ đến các thành viên chức năng được xác định trong
các đối tượng dùng chung khác nhau có thể không so sánh bằng nhau. Khi lá cờ này được đưa ra, nó là
vi phạm ODR để xác định các loại có cùng tên khác nhau.
-không-yếu
Không sử dụng hỗ trợ ký hiệu yếu, ngay cả khi nó được cung cấp bởi trình liên kết. Theo mặc định, G ++
sử dụng các ký hiệu yếu nếu chúng có sẵn. Tùy chọn này chỉ tồn tại để thử nghiệm và
không nên được sử dụng bởi người dùng cuối; nó dẫn đến mã kém hơn và không có lợi ích.
Tùy chọn này có thể bị xóa trong bản phát hành G ++ trong tương lai.
-nostdinc ++
Không tìm kiếm các tệp tiêu đề trong các thư mục tiêu chuẩn dành riêng cho C ++, nhưng hãy
vẫn tìm kiếm các thư mục tiêu chuẩn khác. (Tùy chọn này được sử dụng khi xây dựng
Thư viện C ++.)
Ngoài ra, các tùy chọn tối ưu hóa, cảnh báo và tạo mã này chỉ có ý nghĩa
cho các chương trình C ++:
-fno-mặc định-nội tuyến
Đưng co giả định nội tuyến cho các chức năng được định nghĩa bên trong một phạm vi lớp.
Lưu ý rằng các hàm này có sự liên kết như các hàm nội tuyến; họ chỉ không
nội tuyến theo mặc định.
-Wabi (Chỉ C, Objective-C, C ++ và Objective-C ++)
Cảnh báo khi G ++ tạo mã có thể không tương thích với nhà cung cấp trung lập
C ++ ABI. Mặc dù một nỗ lực đã được thực hiện để cảnh báo về tất cả các trường hợp như vậy, nhưng có
có thể một số trường hợp không được cảnh báo, mặc dù G ++ đang tạo
mã không tương thích. Cũng có thể có trường hợp cảnh báo được phát ra mặc dù
mã được tạo là tương thích.
Bạn nên viết lại mã của mình để tránh những cảnh báo này nếu bạn lo lắng về
thực tế là mã được tạo bởi G ++ có thể không tương thích nhị phân với mã được tạo bởi
trình biên dịch khác.
Các điểm không tương thích đã biết trong -fabi-phiên bản = 2 (mặc định) bao gồm:
· Một mẫu có tham số mẫu không phải kiểu của kiểu tham chiếu bị xáo trộn
không chính xác:
int bên ngoài N;
bản mẫu struct S {};
void n (S ) {2}
Điều này được khắc phục trong -fabi-phiên bản = 3.
· Các loại vectơ SIMD được khai báo bằng cách sử dụng "__attribute ((vectơ_size))" được đưa vào một
cách không chuẩn không cho phép quá tải các hàm lấy vectơ
có kích thước khác nhau.
Mangling được thay đổi trong -fabi-phiên bản = 4.
Các điểm không tương thích đã biết trong -fabi-phiên bản = 1 bao gồm:
· Xử lý sai phần đệm đuôi cho các trường bit. G ++ có thể cố gắng đóng gói dữ liệu
vào cùng một byte như một lớp cơ sở. Ví dụ:
struct A {virtual void f (); int f1: 1; };
struct B: public A {int f2: 1; };
Trong trường hợp này, G ++ đặt "B :: f2" vào cùng một byte với "A :: f1"; các trình biên dịch khác làm
không phải. Bạn có thể tránh vấn đề này bằng cách đệm "A" một cách rõ ràng để kích thước của nó là một
bội số kích thước byte trên nền tảng của bạn; khiến G ++ và các trình biên dịch khác
đặt ra "B" giống hệt nhau.
· Xử lý không chính xác đệm đuôi cho các cơ sở ảo. G ++ không sử dụng đuôi
đệm khi đặt ra các căn cứ ảo. Ví dụ:
struct A {virtual void f (); ký tự c1; };
struct B {B (); ký tự c2; };
struct C: public A, public virtual B {};
Trong trường hợp này, G ++ không đặt "B" vào phần đệm đuôi cho "A"; khác
trình biên dịch làm. Bạn có thể tránh vấn đề này bằng cách đệm "A" một cách rõ ràng để
kích thước là bội số của sự liên kết của nó (bỏ qua các lớp cơ sở ảo); mà nguyên nhân
G ++ và các trình biên dịch khác để tạo ra "C" giống hệt nhau.
· Xử lý không chính xác các trường bit có độ rộng được khai báo lớn hơn độ rộng của chúng
các kiểu cơ bản, khi các trường bit xuất hiện trong một liên hợp. Ví dụ:
liên minh U {int i: 4096; };
Giả sử rằng "int" không có 4096 bit, G ++ làm cho liên kết quá nhỏ bởi
số bit trong một "int".
· Các lớp trống có thể được đặt ở các hiệu số không chính xác. Ví dụ:
cấu trúc A {};
cấu trúc B {
Một là;
void ảo f ();
};
struct C: public B, public A {};
G ++ đặt lớp cơ sở "A" của "C" tại một phần bù khác; nó nên được đặt ở
bù không. G ++ nhầm tưởng rằng thành viên dữ liệu "A" của "B" đã
ở độ lệch không.
· Tên của các hàm mẫu có kiểu liên quan đến "tên kiểu" hoặc mẫu mẫu
các tham số có thể bị sai lệch.
bản mẫu
void f (typename Q :: X) {}
bản mẫu lớp Q>
void f (typename Q ::NS) {}
Phần thuyết minh của các mẫu này có thể bị hiểu sai.
Nó cũng cảnh báo về những thay đổi liên quan đến psABI. PsABI đã biết thay đổi vào thời điểm này
bao gồm:
· Đối với SysV / x86-64, các liên hiệp có thành viên "dài đôi" được chuyển vào bộ nhớ dưới dạng
được chỉ định trong psABI. Ví dụ:
công đoàn U {
ld kép dài;
int tôi;
};
"union U" luôn được lưu lại trong bộ nhớ.
-Wctor-dtor-Privacy (Chỉ C ++ và Objective-C ++)
Cảnh báo khi một lớp dường như không sử dụng được vì tất cả các hàm tạo hoặc hàm hủy trong đó
lớp là riêng tư và nó không có bạn bè cũng như chức năng thành viên tĩnh công khai.
Cũng cảnh báo nếu không có phương thức riêng tư nào và có ít nhất một thành viên riêng tư
hàm không phải là hàm tạo hoặc hàm hủy.
-Xóa-không-ảo-dtor (Chỉ C ++ và Objective-C ++)
Cảnh báo khi xóa được sử dụng để phá hủy một thể hiện của một lớp có các chức năng ảo
và trình hủy không ảo. Không an toàn khi xóa một phiên bản của một lớp dẫn xuất
thông qua một con trỏ đến một lớp cơ sở nếu lớp cơ sở không có
máy hủy. Cảnh báo này được kích hoạt bởi -Tường.
Hậu tố -Wliteral (Chỉ C ++ và Objective-C ++)
Cảnh báo khi một chuỗi ký tự hoặc ký tự được theo sau bởi một hậu tố ud mà không
bắt đầu bằng dấu gạch dưới. Là một phần mở rộng phù hợp, GCC coi các hậu tố như vậy là
các mã thông báo tiền xử lý riêng biệt để duy trì khả năng tương thích ngược với mã
sử dụng macro định dạng từ " ". Ví dụ:
#define __STDC_FORMAT_MACROS
#bao gồm
#bao gồm
int main () {
int64_t i64 = 123;
printf ("Int64 của tôi:%" PRId64 "\ n", i64);
}
Trong trường hợp này, "PRId64" được coi như một mã thông báo tiền xử lý riêng biệt.
Cảnh báo này được bật theo mặc định.
-Răng mọc (Chỉ C ++ và Objective-C ++)
Cảnh báo khi chuyển đổi thu hẹp bị cấm bởi C ++ 11 xảy ra trong { }, ví dụ
int i = {2.2}; // error: thu hẹp từ double thành int
Cờ này được bao gồm trong -Tường và -Wc ++ 11-compat.
Với -std = c ++ 11, -Không thu hẹp ngăn chặn chẩn đoán theo yêu cầu của tiêu chuẩn.
Lưu ý rằng điều này không ảnh hưởng đến ý nghĩa của mã được hình thành tốt; thu hẹp chuyển đổi
vẫn được coi là không hợp lý trong ngữ cảnh SFINAE.
-Không ngoại trừ (Chỉ C ++ và Objective-C ++)
Cảnh báo khi một biểu thức noexcept-được đánh giá là false do lệnh gọi đến một hàm
không có đặc điểm kỹ thuật ngoại lệ không ném (tức là ném() or không có ngoại lệ)
nhưng được biết bởi trình biên dịch để không bao giờ ném một ngoại lệ.
-Wnon-ảo-dtor (Chỉ C ++ và Objective-C ++)
Cảnh báo khi một lớp có các hàm ảo và một hàm hủy không ảo có thể truy cập được, trong
trường hợp nào có thể xảy ra nhưng không an toàn khi xóa một phiên bản của lớp dẫn xuất thông qua
một con trỏ đến lớp cơ sở. Cảnh báo này cũng được bật nếu -Weffc ++ được quy định.
-Đặt hàng (Chỉ C ++ và Objective-C ++)
Cảnh báo khi thứ tự của bộ khởi tạo thành viên được cung cấp trong mã không khớp với thứ tự
trong đó chúng phải được thực thi. Ví dụ:
cấu trúc A {
int tôi;
intj;
A (): j (0), i (1) {}
};
Trình biên dịch sắp xếp lại các trình khởi tạo thành viên cho i và j để khớp với tuyên bố
thứ tự của các thành viên, phát ra một cảnh báo cho hiệu ứng đó. Cảnh báo này được kích hoạt bởi
-Tường.
-fext-số-chữ (Chỉ C ++ và Objective-C ++)
Chấp nhận các hậu tố số dạng chữ ảo, điểm cố định hoặc do máy xác định dưới dạng GNU
các phần mở rộng. Khi tùy chọn này bị tắt, các hậu tố này được coi là người dùng C ++ 11-
các hậu tố số theo nghĩa đen được xác định. Điều này được bật theo mặc định cho tất cả các phương ngữ trước C ++ 11
và tất cả các phương ngữ GNU: -std = c ++ 98, -std = gnu ++ 98, -std = gnu ++ 11, -std = gnu ++ 1y. Điều này
tùy chọn bị tắt theo mặc định cho ISO C ++ 11 trở đi (-std = c ++ 11,…).
Sau đây - ... các tùy chọn không bị ảnh hưởng bởi -Tường.
-Weffc ++ (Chỉ C ++ và Objective-C ++)
Cảnh báo về việc vi phạm các nguyên tắc văn phong sau đây từ Scott Meyers ' Hiệu quả
C ++, Thứ hai Edition sách:
· Mục 11: Định nghĩa hàm tạo bản sao và toán tử gán cho các lớp có
bộ nhớ được cấp phát động.
· Mục 12: Ưu tiên khởi tạo để gán trong hàm tạo.
· Mục 14: Làm cho hàm hủy ảo trong các lớp cơ sở.
· Mục 15: Có "operator =" trả về một tham chiếu đến * this.
· Mục 23: Đừng cố gắng trả về một tham chiếu khi bạn phải trả về một đối tượng.
Đồng thời cảnh báo về việc vi phạm các nguyên tắc văn phong sau đây từ Scott Meyers ' Xem thêm
Hiệu quả C + + sách:
· Tiết 6: Phân biệt tiền tố và hậu tố dạng tăng, giảm
khai thác.
· Mục 7: Không bao giờ quá tải "&&", "||", hoặc ",".
Khi chọn tùy chọn này, hãy lưu ý rằng các tiêu đề thư viện tiêu chuẩn không tuân theo tất cả
của những hướng dẫn này; sử dụng grep -v để lọc ra những cảnh báo đó.
-Wstrict-null-sentinel (Chỉ C ++ và Objective-C ++)
Cảnh báo về việc sử dụng "NULL" chưa được gắn nhãn làm lính canh. Khi biên dịch chỉ với GCC
đây là một sentinel hợp lệ, vì "NULL" được định nghĩa thành "__null". Mặc dù nó là một null
hằng số con trỏ thay vì con trỏ null, nó được đảm bảo có cùng kích thước
như một con trỏ. Nhưng việc sử dụng này không thể di động trên các trình biên dịch khác nhau.
-Wno-non--template-friend (Chỉ C ++ và Objective-C ++)
Tắt cảnh báo khi các hàm bạn bè không được tạo khuôn mẫu được khai báo trong một mẫu.
Kể từ khi hỗ trợ đặc tả mẫu rõ ràng trong G ++, nếu tên của
bạn bè là một id không đủ tiêu chuẩn (tức là, người bạn foo (int)), đặc tả ngôn ngữ C ++
yêu cầu người bạn đó khai báo hoặc xác định một hàm bình thường, không có mẫu. (Phần
14.5.3). Trước khi G ++ triển khai đặc tả rõ ràng, các id không đủ tiêu chuẩn có thể
được hiểu là một chuyên môn hóa cụ thể của một hàm được tạo mẫu. Bởi vì điều này
hành vi không tuân thủ không còn là hành vi mặc định cho G ++,
-Wnon-mẫu-bạn cho phép trình biên dịch kiểm tra mã hiện có để tìm sự cố tiềm ẩn
điểm và được bật theo mặc định. Hành vi trình biên dịch mới này có thể được tắt bằng
-Wno-non--template-friend, giữ mã trình biên dịch phù hợp nhưng vô hiệu hóa
cảnh báo hữu ích.
-Phim kiểu vàng (Chỉ C ++ và Objective-C ++)
Cảnh báo nếu một kiểu cũ (C-style) được sử dụng trong một chương trình C ++.
Các phôi kiểu mới (động_cast, tĩnh_cast, diễn giải lại_castvà const_cast) là
ít bị ảnh hưởng ngoài ý muốn và dễ dàng tìm kiếm hơn nhiều.
-Quá tải-ảo (Chỉ C ++ và Objective-C ++)
Cảnh báo khi một khai báo hàm ẩn các hàm ảo khỏi một lớp cơ sở. Vì
ví dụ, trong:
cấu trúc A {
void ảo f ();
};
cấu trúc B: công khai A {
void f (int);
};
phiên bản lớp "A" của "f" được ẩn trong "B" và mã như:
B * b;
b-> f ();
không biên dịch được.
-Không-pmf-chuyển đổi (Chỉ C ++ và Objective-C ++)
Vô hiệu hóa chẩn đoán để chuyển đổi một con trỏ liên kết thành hàm thành viên thành đơn giản
con trỏ.
-Quảng cáo thiết kế (Chỉ C ++ và Objective-C ++)
Cảnh báo khi giải quyết quá tải chọn chương trình khuyến mại từ loại chưa được đánh dấu hoặc đã liệt kê thành
một loại có dấu, qua chuyển đổi sang một loại không dấu có cùng kích thước. Trước
các phiên bản của G ++ đã cố gắng duy trì tính không dấu, nhưng tiêu chuẩn bắt buộc
hành vi.
Các lựa chọn Kiểm soát Mục tiêu-C và Objective-C ++ Phương ngữ
(LƯU Ý: Hướng dẫn này không mô tả các ngôn ngữ Objective-C và Objective-C ++
chính họ.
Phần này mô tả các tùy chọn dòng lệnh chỉ có ý nghĩa đối với Objective-C
và các chương trình Objective-C ++. Bạn cũng có thể sử dụng hầu hết GNU không phụ thuộc vào ngôn ngữ
tùy chọn trình biên dịch. Ví dụ: bạn có thể biên dịch một tệp "some_class.m" như thế này:
gcc -g -fgnu-runtime -O -c some_class.m
Trong ví dụ này, -fgnu-thời gian chạy là một tùy chọn chỉ dành cho Objective-C và Objective-C ++
các chương trình; bạn có thể sử dụng các tùy chọn khác với bất kỳ ngôn ngữ nào được GCC hỗ trợ.
Lưu ý rằng vì Objective-C là một phần mở rộng của ngôn ngữ C, các biên dịch Objective-C
cũng có thể sử dụng các tùy chọn dành riêng cho giao diện người dùng C (ví dụ: -Điều kiện). tương tự,
Các biên dịch Objective-C ++ có thể sử dụng các tùy chọn cụ thể của C ++ (ví dụ: -Wabi).
Đây là danh sách các tùy chọn có thể để biên dịch Objective-C và Objective-C ++
các chương trình:
-fconstant-string-class =tên lớp
Sử dụng tên lớp là tên của lớp để khởi tạo cho mỗi chuỗi ký tự
được chỉ định với cú pháp "@" ... "". Tên lớp mặc định là "NXConstantString" nếu
thời gian chạy GNU đang được sử dụng và "NSConstantString" nếu thời gian chạy NeXT đang được
đã qua sử dụng (xem bên dưới). Các -fconstant-cfstrings , nếu cũng có, sẽ ghi đè
-fconstant-chuỗi-lớp thiết lập và làm cho các ký tự "@" ... "" được đặt dưới dạng hằng số
Chuỗi CoreFoundation.
-fgnu-thời gian chạy
Tạo mã đối tượng tương thích với thời gian chạy GNU Objective-C tiêu chuẩn. Đây là
mặc định cho hầu hết các loại hệ thống.
-fnext-thời gian chạy
Tạo đầu ra tương thích với thời gian chạy NeXT. Đây là mặc định cho dựa trên NeXT
hệ thống, bao gồm Darwin và Mac OS X. Macro "__NEXT_RUNTIME__" được xác định trước nếu
(và chỉ khi) tùy chọn này được sử dụng.
-fno-nil-receiver
Giả sử rằng tất cả các bản tin Objective-C đều gửi đi ("[receiver message: arg]") trong
đơn vị dịch thuật đảm bảo rằng người nhận không phải là "nil". Điều này cho phép nhiều hơn
các điểm nhập hiệu quả trong thời gian chạy sẽ được sử dụng. Tùy chọn này chỉ có sẵn trong
kết hợp với thời gian chạy NeXT và ABI phiên bản 0 hoặc 1.
-fobjc-abi-version =n
Sử dụng phiên bản n của Objective-C ABI cho thời gian chạy đã chọn. Tùy chọn này là
hiện chỉ được hỗ trợ cho thời gian chạy NeXT. Trong trường hợp đó, Phiên bản 0 là
ABI truyền thống (32-bit) không hỗ trợ các thuộc tính và Objective-C 2.0 khác
bổ sung. Phiên bản 1 là ABI truyền thống (32-bit) với sự hỗ trợ cho các thuộc tính và
các bổ sung Objective-C 2.0 khác. Phiên bản 2 là ABI (64-bit) hiện đại. Nếu không có gì là
được chỉ định, mặc định là Phiên bản 0 trên máy đích 32 bit và Phiên bản 2 trên 64 bit
máy mục tiêu.
-fobjc-gọi-cxx-cdtor
Đối với mỗi lớp Objective-C, hãy kiểm tra xem có bất kỳ biến phiên bản nào của nó là đối tượng C ++ hay không
với một hàm tạo mặc định không tầm thường. Nếu vậy, hãy tổng hợp một "- (id) đặc biệt"
.cxx_construct "phương thức phiên bản chạy các hàm tạo mặc định không tầm thường trên bất kỳ
các biến cá thể như vậy, theo thứ tự, và sau đó trả về "self". Tương tự, hãy kiểm tra xem có
biến instance là một đối tượng C ++ có hàm hủy không tầm thường và nếu có, hãy tổng hợp
một phương thức "- (void) .cxx_destruct" đặc biệt chạy tất cả các hàm hủy mặc định như vậy, trong
thứ tự ngược lại.
Do đó, các phương thức "- (id) .cxx_construct" và "- (void) .cxx_destruct" chỉ được tạo
hoạt động trên các biến cá thể được khai báo trong lớp Objective-C hiện tại, chứ không phải những biến
kế thừa từ các lớp cha. Thời gian chạy Objective-C có trách nhiệm
gọi tất cả các phương thức như vậy trong hệ thống phân cấp kế thừa của một đối tượng. Dấu "- (id)
Các phương thức .cxx_construct "được gọi bởi thời gian chạy ngay sau một đối tượng mới
cá thể được cấp phát; các phương thức "- (void) .cxx_destruct" được gọi ngay lập tức
trước khi thời gian chạy giải quyết một thể hiện đối tượng.
Theo văn bản này, chỉ có thời gian chạy NeXT trên Mac OS X 10.4 trở lên mới hỗ trợ
gọi phương thức "- (id) .cxx_construct" và "- (void) .cxx_destruct".
-fobjc-direct-send
Cho phép chuyển nhanh đến trình điều phối tin nhắn. Trên Darwin, điều này được thực hiện thông qua
trang comm.
-fobjc-ngoại lệ
Bật hỗ trợ cú pháp để xử lý ngoại lệ có cấu trúc trong Objective-C, tương tự như
những gì được cung cấp bởi C ++ và Java. Tùy chọn này là bắt buộc để sử dụng Objective-C
các từ khóa @try, @throw, @catch, @finally và @synchronized. Tùy chọn này có sẵn
với cả thời gian chạy GNU và thời gian chạy NeXT (nhưng không khả dụng cùng với
thời gian chạy NeXT trên Mac OS X 10.2 trở về trước).
-fobjc-gc
Bật tính năng thu gom rác (GC) trong các chương trình Objective-C và Objective-C ++. Tùy chọn này
chỉ khả dụng với thời gian chạy NeXT; thời gian chạy GNU có một thứ rác khác
triển khai bộ sưu tập không yêu cầu cờ trình biên dịch đặc biệt.
-fobjc-nilcheck
Đối với thời gian chạy NeXT với phiên bản 2 của ABI, hãy kiểm tra phương pháp nhận nil
trước khi thực hiện lệnh gọi phương thức thực. Đây là mặc định và có thể
vô hiệu hóa sử dụng -fno-objc-nilcheck. Các phương thức lớp và siêu cuộc gọi không bao giờ được kiểm tra
cho không theo cách này bất kể cờ này được đặt thành gì. Hiện tại lá cờ này không
không có gì khi thời gian chạy GNU hoặc phiên bản cũ hơn của ABI thời gian chạy NeXT, được sử dụng.
-fobjc-std = objc1
Tuân theo cú pháp ngôn ngữ của Objective-C 1.0, ngôn ngữ được GCC 4.0 công nhận.
Điều này chỉ ảnh hưởng đến các bổ sung Objective-C cho ngôn ngữ C / C ++; nó không ảnh hưởng
tuân thủ các tiêu chuẩn C / C ++, được kiểm soát bởi phương ngữ C / C ++ riêng biệt
cờ tùy chọn. Khi tùy chọn này được sử dụng với Objective-C hoặc Objective-C ++
trình biên dịch, mọi cú pháp Objective-C không được GCC 4.0 nhận dạng đều bị từ chối. Cái này
rất hữu ích nếu bạn cần đảm bảo rằng mã Objective-C của bạn có thể được biên dịch với
phiên bản cũ hơn của GCC.
-freplace-objc-class
Phát ra một điểm đánh dấu đặc biệt hướng dẫn ld(1) không liên kết tĩnh trong đối tượng kết quả
tệp và cho phép chết tiệt(1) để tải nó vào lúc chạy. Điều này được sử dụng trong
kết hợp với chế độ gỡ lỗi Fix-and-Continue, nơi tệp đối tượng trong
câu hỏi có thể được biên dịch lại và tải lại động trong quá trình chương trình
thực thi mà không cần phải khởi động lại chính chương trình. Hiện tại, Fix-and-
Chức năng Tiếp tục chỉ khả dụng cùng với thời gian chạy NeXT trên Mac
OS X 10.3 trở lên.
-fzero-liên kết
Khi biên dịch cho thời gian chạy NeXT, trình biên dịch thường thay thế các lệnh gọi tới
"objc_getClass (" ... ")" (khi tên của lớp được biết tại thời điểm biên dịch) với
các tham chiếu lớp tĩnh được khởi tạo tại thời điểm tải, giúp cải thiện thời gian chạy
màn biểu diễn. Chỉ định -fzero-liên kết cờ ngăn chặn hành vi này và nguyên nhân
lệnh gọi tới "objc_getClass (" ... ")" sẽ được giữ lại. Điều này rất hữu ích trong Zero-Link
chế độ gỡ lỗi, vì nó cho phép sửa đổi các triển khai lớp riêng lẻ
trong quá trình thực hiện chương trình. Thời gian chạy GNU hiện luôn giữ lại các lệnh gọi đến
"objc_get_class (" ... ")" bất kể tùy chọn dòng lệnh.
-gen-decls
Khai báo giao diện kết xuất cho tất cả các lớp được nhìn thấy trong tệp nguồn vào một tệp có tên
tên nguồn.decl.
-Giao-chặn (Chỉ Objective-C và Objective-C ++)
Cảnh báo bất cứ khi nào một nhiệm vụ Objective-C đang bị chặn bởi bộ thu gom rác.
-Không giao thức (Chỉ Objective-C và Objective-C ++)
Nếu một lớp được khai báo để triển khai một giao thức, một cảnh báo sẽ được đưa ra cho mọi phương thức
trong giao thức không được thực thi bởi lớp. Hành vi mặc định là
đưa ra cảnh báo cho mọi phương thức không được triển khai rõ ràng trong lớp, ngay cả khi
thực thi phương thức được kế thừa từ lớp cha. Nếu bạn sử dụng -Không giao thức
tùy chọn, sau đó các phương thức kế thừa từ lớp cha được coi là được triển khai,
và không có cảnh báo nào được đưa ra cho họ.
-Máy đục (Chỉ Objective-C và Objective-C ++)
Cảnh báo nếu tìm thấy nhiều phương pháp thuộc các loại khác nhau cho cùng một bộ chọn trong
biên dịch. Việc kiểm tra được thực hiện trên danh sách các phương pháp trong giai đoạn cuối cùng của
biên dịch. Ngoài ra, kiểm tra được thực hiện cho mỗi bộ chọn xuất hiện trong
Biểu thức "@selector (...)" và một phương thức tương ứng cho bộ chọn đó đã được
tìm thấy trong quá trình biên dịch. Bởi vì những kiểm tra này chỉ quét bảng phương pháp ở cuối
của quá trình biên dịch, những cảnh báo này sẽ không được tạo ra nếu giai đoạn cuối cùng của quá trình biên dịch là
không đạt được, ví dụ: vì lỗi được tìm thấy trong quá trình biên dịch hoặc vì
-chỉ tổng hợp tùy chọn đang được sử dụng.
- Đối sánh với bộ chọn giới hạn (Chỉ Objective-C và Objective-C ++)
Cảnh báo nếu tìm thấy nhiều phương thức với đối số và / hoặc kiểu trả về khác nhau cho một
bộ chọn đã cho khi cố gắng gửi tin nhắn bằng bộ chọn này tới người nhận
gõ "id" hoặc "Class". Khi cờ này tắt (là hành vi mặc định),
trình biên dịch bỏ qua các cảnh báo như vậy nếu bất kỳ sự khác biệt nào được tìm thấy chỉ giới hạn ở các loại chia sẻ
cùng kích thước và căn chỉnh.
-Wundeclared-selector (Chỉ Objective-C và Objective-C ++)
Cảnh báo nếu tìm thấy biểu thức "@selector (...)" tham chiếu đến bộ chọn chưa khai báo. MỘT
bộ chọn được coi là không được khai báo nếu không có phương thức nào có tên đó đã được khai báo trước đó
biểu thức "@selector (...)", rõ ràng trong @interface hoặc @protocol
khai báo hoặc ngầm định trong phần @implementation. Tùy chọn này luôn hoạt động
nó sẽ kiểm tra ngay khi tìm thấy biểu thức "@selector (...)", trong khi -Máy đục có thể
thực hiện các kiểm tra của nó trong giai đoạn biên dịch cuối cùng. Điều này cũng thực thi mã hóa
quy ước kiểu rằng các phương thức và bộ chọn phải được khai báo trước khi được sử dụng.
-print-objc-runtime-thông tin
Tạo tiêu đề C mô tả cấu trúc lớn nhất được truyền theo giá trị, nếu có.
Các lựa chọn đến Kiểm soát Chẩn đoán Tin nhắn Định dạng
Theo truyền thống, các thông báo chẩn đoán đã được định dạng bất kể thiết bị đầu ra là gì
khía cạnh (ví dụ chiều rộng của nó, ...). Bạn có thể sử dụng các tùy chọn được mô tả bên dưới để kiểm soát
thuật toán định dạng cho thông báo chẩn đoán, ví dụ: bao nhiêu ký tự trên mỗi dòng, tần suất
nguồn thông tin vị trí cần được báo cáo. Lưu ý rằng một số giao diện người dùng ngôn ngữ có thể
không tôn trọng các tùy chọn này.
-fmessage-length =n
Cố gắng định dạng các thông báo lỗi để chúng vừa với các dòng khoảng n nhân vật. Các
mặc định là 72 ký tự cho g ++ và 0 cho phần còn lại của giao diện người dùng được hỗ trợ bởi
GCC. Nếu như n bằng XNUMX, thì không có dòng nào được thực hiện; mỗi thông báo lỗi xuất hiện trên một
dòng đơn.
-fdiagnostics-show-location = một lần
Chỉ có ý nghĩa trong chế độ dòng bao. Hướng dẫn người báo cáo thông báo chẩn đoán
phát ra thông tin vị trí nguồn hàng loạt; nghĩa là, trong trường hợp tin nhắn quá dài để phù hợp
trên một đường vật lý duy nhất và phải được bọc, vị trí nguồn sẽ không được phát ra
(như tiền tố) lặp đi lặp lại, trong các dòng tiếp theo. Đây là
hành vi mặc định.
-fdiagnostics-show-location = every-line
Chỉ có ý nghĩa trong chế độ dòng bao. Hướng dẫn người báo cáo thông báo chẩn đoán
phát ra cùng một thông tin vị trí nguồn (dưới dạng tiền tố) cho các đường vật lý dẫn đến
từ quá trình ngắt một tin nhắn quá dài để vừa trên một dòng.
-fno-chẩn đoán-hiển thị-tùy chọn
Theo mặc định, mỗi chẩn đoán được phát ra bao gồm văn bản chỉ ra tùy chọn dòng lệnh
kiểm soát trực tiếp chẩn đoán (nếu tùy chọn như vậy được chẩn đoán
máy móc). Chỉ định -fno-chẩn đoán-hiển thị-tùy chọn cờ ngăn chặn điều đó
hành vi.
-fno-chẩn đoán-hiển thị-dấu mũ
Theo mặc định, mỗi chẩn đoán được phát ra bao gồm dòng nguồn ban đầu và dấu mũ '^'
chỉ ra cột. Tùy chọn này ngăn chặn thông tin này.
Các lựa chọn đến Yêu cầu or Suppress Cảnh báo
Cảnh báo là thông báo chẩn đoán báo cáo các cấu trúc vốn dĩ không phải là
có sai sót nhưng điều đó có nguy cơ hoặc cho thấy có thể đã có lỗi.
Các tùy chọn không phụ thuộc vào ngôn ngữ sau đây không kích hoạt các cảnh báo cụ thể nhưng kiểm soát
các loại chẩn đoán do GCC sản xuất.
-chỉ tổng hợp
Kiểm tra mã để tìm lỗi cú pháp, nhưng đừng làm bất cứ điều gì vượt quá điều đó.
-fmax-error =n
Giới hạn số lượng thông báo lỗi tối đa là n, tại thời điểm đó, GCC ủng hộ thay vì
hơn là cố gắng tiếp tục xử lý mã nguồn. Nếu như n là 0 (mặc định),
không có giới hạn về số lượng thông báo lỗi được tạo ra. Nếu như -Watal-error cũng là
được chỉ định, sau đó -Watal-error được ưu tiên hơn tùy chọn này.
-w Ngăn chặn tất cả các thông báo cảnh báo.
- Lỗi
Biến tất cả các cảnh báo thành lỗi.
-Werror =
Biến cảnh báo được chỉ định thành lỗi. Bộ chỉ định cho một cảnh báo được thêm vào;
ví dụ -Werror = chuyển đổi biến các cảnh báo được kiểm soát bởi -Wswitch thành lỗi.
Công tắc này có dạng phủ định, được sử dụng để phủ định - Lỗi để có những cảnh báo cụ thể;
ví dụ -Wno-error = chuyển đổi làm cho -Wswitch cảnh báo không phải là lỗi, ngay cả khi - Lỗi
đang có hiệu lực.
Thông báo cảnh báo cho mỗi cảnh báo có thể điều khiển bao gồm tùy chọn điều khiển
lời cảnh báo. Tùy chọn đó sau đó có thể được sử dụng với -Werror = và -Wno-error = như mô tả
bên trên. (Việc in tùy chọn trong thông báo cảnh báo có thể bị tắt bằng cách sử dụng
-fno-chẩn đoán-hiển thị-tùy chọn lá cờ.)
Lưu ý rằng chỉ định -Werror =foo tự động ngụ ý -Wfoo. Tuy nhiên, -Wno-error =foo
không ám chỉ bất cứ điều gì.
-Watal-error
Tùy chọn này khiến trình biên dịch hủy bỏ quá trình biên dịch khi xảy ra lỗi đầu tiên
thay vì cố gắng tiếp tục và in thêm các thông báo lỗi.
Bạn có thể yêu cầu nhiều cảnh báo cụ thể với các tùy chọn bắt đầu bằng -W, Ví dụ
-Gợi ý để yêu cầu cảnh báo về các khai báo ngầm. Mỗi cảnh báo cụ thể này
các tùy chọn cũng có dạng phủ định bắt đầu -Không- để tắt cảnh báo; Ví dụ,
-Không ẩn ý. Sổ tay hướng dẫn này chỉ liệt kê một trong hai biểu mẫu, biểu mẫu nào không phải là biểu mẫu mặc định.
Để biết thêm các tùy chọn theo ngôn ngữ cụ thể, hãy tham khảo C + + Phương ngữ Các lựa chọn và Mục tiêu-C
và Objective-C ++ Phương ngữ Các lựa chọn.
Khi một tùy chọn cảnh báo không nhận dạng được yêu cầu (ví dụ: -Cảnh báo không xác định), GCC phát ra một
chẩn đoán nói rằng tùy chọn không được công nhận. Tuy nhiên, nếu -Không- biểu mẫu được sử dụng,
hành vi hơi khác một chút: không có chẩn đoán nào được đưa ra cho -Không-không-biết-cảnh báo
trừ khi các chẩn đoán khác đang được tạo ra. Điều này cho phép sử dụng -Không- lựa chọn
với các trình biên dịch cũ, nhưng nếu có sự cố, trình biên dịch sẽ cảnh báo rằng
tùy chọn hiện tại.
-Quảng cáo
- mang tính mô phạm
Đưa ra tất cả các cảnh báo theo yêu cầu nghiêm ngặt của ISO C và ISO C ++; từ chối tất cả các chương trình
sử dụng các phần mở rộng bị cấm và một số chương trình khác không tuân theo ISO C và ISO
C ++. Đối với ISO C, tuân theo phiên bản của tiêu chuẩn ISO C được chỉ định bởi bất kỳ -std
tùy chọn được sử dụng.
Các chương trình ISO C và ISO C ++ hợp lệ phải được biên dịch đúng cách có hoặc không có tùy chọn này
(mặc dù một số ít yêu cầu -ansi hoặc một -std tùy chọn chỉ định phiên bản bắt buộc của
ISO C). Tuy nhiên, nếu không có tùy chọn này, các phần mở rộng GNU nhất định và C truyền thống và
Các tính năng C ++ cũng được hỗ trợ. Với tùy chọn này, họ bị từ chối.
-Quảng cáo không gây ra các thông báo cảnh báo về việc sử dụng các từ khóa thay thế có
tên bắt đầu và kết thúc bằng __. Cảnh báo về âm thanh cũng bị vô hiệu hóa trong biểu thức
theo sau "__extension__". Tuy nhiên, chỉ các tệp tiêu đề hệ thống mới nên sử dụng
các lối thoát hiểm; các chương trình ứng dụng nên tránh chúng.
Một số người dùng cố gắng sử dụng -Quảng cáo để kiểm tra các chương trình về sự tuân thủ ISO C nghiêm ngặt. Họ
sớm nhận ra rằng nó không thực hiện đúng như những gì họ muốn: nó tìm thấy một số thực hành không phải ISO,
nhưng không phải tất cả --- chỉ những người mà ISO C đòi hỏi chẩn đoán và một số khác cho
chẩn đoán nào đã được thêm vào.
Tính năng báo cáo mọi trường hợp không tuân thủ ISO C có thể hữu ích trong một số trường hợp,
nhưng sẽ yêu cầu công việc bổ sung đáng kể và sẽ hoàn toàn khác với
-Quảng cáo. Chúng tôi không có kế hoạch hỗ trợ một tính năng như vậy trong tương lai gần.
Trong đó tiêu chuẩn được chỉ định với -std đại diện cho một phương ngữ mở rộng GNU của C, chẳng hạn như
gnu90 or gnu99, có một tương ứng cơ sở Tiêu chuẩn, phiên bản ISO C trên đó
dựa trên phương ngữ mở rộng GNU. Cảnh báo từ -Quảng cáo được đưa cho họ ở đâu
yêu cầu của tiêu chuẩn cơ sở. (Không có ý nghĩa gì khi đưa ra những cảnh báo như vậy
chỉ dành cho các tính năng không có trong phương ngữ GNU C được chỉ định, vì theo định nghĩa GNU
phương ngữ của C bao gồm tất cả các tính năng mà trình biên dịch hỗ trợ với tùy chọn đã cho, và
sẽ không có gì để cảnh báo.)
-pedantic-error
Như -Quảng cáo, ngoại trừ lỗi được tạo ra chứ không phải là cảnh báo.
-Tường
Điều này cho phép tất cả các cảnh báo về các công trình xây dựng mà một số người dùng cho là
đáng nghi vấn và điều đó dễ dàng tránh (hoặc sửa đổi để ngăn cảnh báo), ngay cả trong
kết hợp với macro. Điều này cũng cho phép một số cảnh báo theo ngôn ngữ cụ thể được mô tả
in C + + Phương ngữ Các lựa chọn và Mục tiêu-C và Objective-C ++ Phương ngữ Các lựa chọn.
-Tường bật các cờ cảnh báo sau:
-Quần áo -Warray-giới hạn (chỉ với -O2) -Wc ++ 11-compat -Wchar-đăng ký
-Wenum-so sánh (trong C / ObjC; cài đặt này được bật theo mặc định trong C ++) -Wimplicit-int (C và
Chỉ Objective-C) -Khai báo-chức năng rõ ràng (Chỉ C và Objective-C) -Nhận xét
- Định dạng -Chính (chỉ dành cho C / ObjC và trừ khi -chỉ cần) -Có thể chưa được khởi tạo
-Kẹp niềng răng (chỉ dành cho C / ObjC) -Wonnull - Dấu ngoặc đơn -Kí hiệu con trỏ -Đặt hàng
-Kiểu quay -Điểm trình tự -Sign-so sánh (chỉ trong C ++) -Giá răng cưa
-Wstrict-tràn = 1 -Wswitch -Tranh -Được vệ sinh -Wunknown-pragmas
-Chức năng sử dụng -Không sử dụng-nhãn -Giá trị không sử dụng -Không sử dụng-biến
-Wvolpose-register-var
Lưu ý rằng một số cờ cảnh báo không được ngụ ý bởi -Tường. Một số người trong số họ cảnh báo về
cấu trúc mà người dùng thường không coi là có vấn đề, nhưng
đôi khi bạn có thể muốn kiểm tra; những người khác cảnh báo về các công trình xây dựng
cần thiết hoặc khó tránh trong một số trường hợp và không có cách nào đơn giản để sửa đổi
mã để ngăn chặn cảnh báo. Một số trong số chúng được kích hoạt bởi -Wextra nhưng nhiều người trong số họ
phải được kích hoạt riêng lẻ.
-Wextra
Điều này cho phép một số cờ cảnh báo bổ sung không được bật bởi -Tường. (Tùy chọn này được sử dụng
được gọi là -W. Tên cũ hơn vẫn được hỗ trợ, nhưng tên mới hơn
mang tính mô tả.)
-Vòng bọc -Vân đẹp - Vòng loại được đánh giá cao -Wmissing-field-khởi tạo
-Wmissing-tham số-type (Chỉ C) -Khai báo kiểu vàng (Chỉ C) -Woverride-init
-Sign-so sánh -Giới hạn loại -Được vệ sinh -Không sử dụng-tham số (chỉ với -Không sử dụng or
-Tường) -Không sử dụng-nhưng-đặt-tham số (chỉ với -Không sử dụng or -Tường)
Tùy chọn -Wextra cũng in thông báo cảnh báo cho các trường hợp sau:
· Một con trỏ được so sánh với số nguyên XNUMX với <, <=, >, hoặc là >=.
· (Chỉ dành cho C ++) Một người liệt kê và một người không phải là người liệt kê đều xuất hiện trong một điều kiện
biểu hiện.
· (Chỉ dành cho C ++) Các cơ sở ảo không rõ ràng.
· (Chỉ C ++) Đăng ký một mảng đã được khai báo ghi danh.
· (Chỉ dành cho C ++) Lấy địa chỉ của một biến đã được khai báo ghi danh.
· (Chỉ dành cho C ++) Một lớp cơ sở không được khởi tạo trong phương thức khởi tạo sao chép của lớp dẫn xuất.
-Wchar-đăng ký
Cảnh báo nếu chỉ số con của mảng có kiểu "char". Đây là một nguyên nhân phổ biến của lỗi, như
các lập trình viên thường quên rằng kiểu này được ký trên một số máy. Cảnh báo này là
được kích hoạt bởi -Tường.
-Nhận xét
Cảnh báo bất cứ khi nào chuỗi bắt đầu nhận xét /* xuất hiện trong một /* bình luận, hoặc bất cứ khi nào
Dấu gạch chéo ngược-Dòng mới xuất hiện trong một // bình luận. Cảnh báo này được kích hoạt bởi -Tường.
-Không có phạm vi bảo hiểm-không phù hợp
Cảnh báo nếu cấu hình phản hồi không khớp khi sử dụng -fprofile-sử dụng Lựa chọn. Nếu một
tệp nguồn được thay đổi giữa quá trình biên dịch với -fprofile-gen và với -fprofile-sử dụng,
các tệp có phản hồi hồ sơ có thể không khớp với tệp nguồn và GCC không thể
sử dụng thông tin phản hồi hồ sơ. Theo mặc định, cảnh báo này được bật và
được coi là một lỗi. -Không có phạm vi bảo hiểm-không phù hợp có thể được sử dụng để tắt cảnh báo hoặc
-Wno-error = cover-mismatch có thể được sử dụng để vô hiệu hóa lỗi. Vô hiệu hóa lỗi
vì cảnh báo này có thể dẫn đến mã được tối ưu hóa kém và chỉ hữu ích trong trường hợp
những thay đổi rất nhỏ, chẳng hạn như sửa lỗi đối với cơ sở mã hiện có. Hoàn toàn vô hiệu hóa
cảnh báo không được khuyến khích.
-Wno-cpp
(Chỉ C, Objective-C, C ++, Objective-C ++ và Fortran)
Ngăn chặn các thông báo cảnh báo được phát ra bởi lệnh "#warning".
-Khuyến mãi nhân đôi (Chỉ C, C ++, Objective-C và Objective-C ++)
Đưa ra cảnh báo khi giá trị kiểu "float" được thăng cấp ngầm thành "double". CPU
với đơn vị dấu phẩy động "độ chính xác đơn" 32 bit triển khai "float" trong phần cứng,
nhưng giả lập "kép" trong phần mềm. Trên một chiếc máy như vậy, thực hiện các phép tính bằng cách sử dụng
giá trị "kép" đắt hơn nhiều do chi phí cần thiết cho phần mềm
sự thi đua.
Rất dễ vô tình thực hiện các phép tính với "double" vì dấu phẩy động
các chữ được ngầm hiểu là kiểu "kép". Ví dụ, trong:
vùng nổi (bán kính nổi)
{
trả về 3.14159 * radius * bán kính;
}
trình biên dịch thực hiện toàn bộ tính toán với "double" vì dấu phẩy động
nghĩa đen là một "kép".
- Định dạng
-Wformat =n
Kiểm tra các lệnh gọi đến "printf" và "scanf", v.v., để đảm bảo rằng các đối số được cung cấp
có các loại phù hợp với chuỗi định dạng được chỉ định và các chuyển đổi
được chỉ định trong chuỗi định dạng có ý nghĩa. Điều này bao gồm các chức năng tiêu chuẩn, và
những người khác được chỉ định bởi thuộc tính định dạng, trong "printf", "scanf", "strftime" và
họ "strfmon" (một phần mở rộng X / Open, không có trong tiêu chuẩn C) (hoặc target- khác
gia đình cụ thể). Những chức năng nào được kiểm tra mà không có thuộc tính định dạng
được chỉ định phụ thuộc vào phiên bản tiêu chuẩn được chọn và việc kiểm tra các chức năng như vậy
không có thuộc tính được chỉ định sẽ bị vô hiệu hóa bởi -chỉ cần or -fno-nội trang.
Các định dạng được kiểm tra dựa trên các tính năng định dạng được hỗ trợ bởi GNU libc phiên bản 2.2.
Chúng bao gồm tất cả các tính năng ISO C90 và C99, cũng như các tính năng từ Single Unix
Đặc điểm kỹ thuật và một số phần mở rộng BSD và GNU. Các triển khai thư viện khác có thể không
hỗ trợ tất cả các tính năng này; GCC không hỗ trợ cảnh báo về các tính năng vượt quá
hạn chế của một thư viện cụ thể. Tuy nhiên, nếu -Quảng cáo được sử dụng với - Định dạng,
cảnh báo được đưa ra về các tính năng định dạng không có trong phiên bản tiêu chuẩn đã chọn (nhưng không
cho các định dạng "strfmon", vì chúng không có trong bất kỳ phiên bản nào của tiêu chuẩn C).
-Wformat = 1
- Định dạng
Tùy chọn - Định dạng tương đương với -Wformat = 1và -Không có định dạng tương đương với
-Wformat = 0. Kể từ - Định dạng cũng kiểm tra các đối số định dạng null cho một số
chức năng, - Định dạng cũng ngụ ý -Wonnull. Một số khía cạnh của mức định dạng này
kiểm tra có thể bị vô hiệu hóa bởi các tùy chọn: -Wno-format-chứa-nul,
-Wno-format-extra-argsvà -Wno-format-zero-độ dài. - Định dạng được kích hoạt bởi
-Tường.
-Wno-format-chứa-nul
If - Định dạng được chỉ định, không cảnh báo về chuỗi định dạng chứa NUL byte.
-Wno-format-extra-args
If - Định dạng được chỉ định, không cảnh báo về các đối số dư thừa đối với "printf" hoặc
chức năng định dạng "scanf". Tiêu chuẩn C chỉ định rằng các đối số như vậy là
mặc kệ.
Trường hợp các đối số không sử dụng nằm giữa các đối số đã sử dụng được chỉ định với $
thông số kỹ thuật số toán hạng, thông thường các cảnh báo vẫn được đưa ra, vì
triển khai không thể biết loại nào cần chuyển đến "va_arg" để bỏ qua
tranh luận. Tuy nhiên, trong trường hợp định dạng "scanf", tùy chọn này sẽ ngăn chặn
cảnh báo nếu các đối số không sử dụng đều là con trỏ, vì Đơn Unix
Đặc tả nói rằng các đối số không sử dụng như vậy được phép.
-Wno-format-zero-độ dài
If - Định dạng được chỉ định, không cảnh báo về các định dạng có độ dài bằng không. Tiêu chuẩn C
chỉ định rằng các định dạng có độ dài bằng XNUMX được phép.
-Wformat = 2
Kích hoạt tính năng - Định dạng cộng với kiểm tra định dạng bổ sung. Hiện tại tương đương với - Định dạng
-Wformat-không chữ - Định dạng-bảo mật -Wformat-y2k.
-Wformat-không chữ
If - Định dạng được chỉ định, cũng cảnh báo nếu chuỗi định dạng không phải là một chuỗi ký tự
và do đó không thể được kiểm tra, trừ khi hàm định dạng nhận các đối số định dạng của nó là
một "va_list".
- Định dạng-bảo mật
If - Định dạng được chỉ định, cũng cảnh báo về việc sử dụng các hàm định dạng đại diện cho
các vấn đề bảo mật có thể xảy ra. Hiện tại, điều này cảnh báo về các lệnh gọi đến "printf" và
"scanf" hàm trong đó chuỗi định dạng không phải là một chuỗi ký tự và không có
đối số định dạng, như trong "printf (foo);". Đây có thể là một lỗ hổng bảo mật nếu
chuỗi định dạng đến từ đầu vào không đáng tin cậy và chứa %n. (Đây hiện là một
tập hợp con của những gì -Wformat-không chữ cảnh báo về, nhưng cảnh báo trong tương lai có thể
thêm vào - Định dạng-bảo mật không được bao gồm trong -Wformat-không chữ.)
LƯU Ý: Trong Ubuntu 8.10 và các phiên bản mới hơn, tùy chọn này được bật theo mặc định cho C,
C ++, ObjC, ObjC ++. Để tắt, hãy sử dụng -Không có định dạng-bảo mậthoặc tắt tất cả định dạng
cảnh báo với -Wformat = 0. Để làm cho cảnh báo bảo mật định dạng trở nên nghiêm trọng, hãy chỉ định
-Werror = format-security.
-Wformat-y2k
If - Định dạng được chỉ định, cũng cảnh báo về các định dạng "strftime" có thể chỉ mang lại
năm hai chữ số.
-Wonnull
Cảnh báo về việc truyền con trỏ null cho các đối số được đánh dấu là yêu cầu giá trị khác null
bởi thuộc tính hàm "nonnull".
-Wonnull được bao gồm trong -Tường và - Định dạng. Nó có thể bị vô hiệu hóa với -Wno-không có giá trị
tùy chọn.
-Đơn vị tự (Chỉ C, C ++, Objective-C và Objective-C ++)
Cảnh báo về các biến chưa khởi tạo được khởi tạo với chính chúng. Lưu ý điều này
tùy chọn chỉ có thể được sử dụng với -Được vệ sinh tùy chọn.
Ví dụ: GCC cảnh báo về việc "i" chỉ được khởi tạo trong đoạn mã sau
khi nào -Đơn vị tự đã được chỉ định:
int f ()
{
int tôi = tôi;
trả lại tôi;
}
Cảnh báo này được kích hoạt bởi -Tường trong C ++.
-Wimplicit-int (Chỉ C và Objective-C)
Cảnh báo khi khai báo không chỉ định kiểu. Cảnh báo này được kích hoạt bởi -Tường.
-Khai báo-chức năng rõ ràng (Chỉ C và Objective-C)
Đưa ra cảnh báo bất cứ khi nào một hàm được sử dụng trước khi được khai báo. Ở chế độ C99
(-std = c99 or -std = gnu99), cảnh báo này được bật theo mặc định và nó được tạo thành
lỗi bởi -pedantic-error. Cảnh báo này cũng được kích hoạt bởi -Tường.
-Gợi ý (Chỉ C và Objective-C)
Giống như -Wimplicit-int và -Khai báo-chức năng rõ ràng. Cảnh báo này đã được kích hoạt
by -Tường.
- Vòng loại được đánh giá cao (Chỉ C và C ++)
Cảnh báo nếu kiểu trả về của một hàm có định nghĩa kiểu như "const". Đối với ISO C
một định nghĩa kiểu như vậy không có hiệu lực, vì giá trị được trả về bởi một hàm không phải là
giá trị. Đối với C ++, cảnh báo chỉ được phát ra đối với các loại vô hướng hoặc "void". ISO C
cấm các kiểu trả về "void" đủ điều kiện trên các định nghĩa hàm, vì vậy các kiểu trả về như vậy
luôn nhận được cảnh báo ngay cả khi không có tùy chọn này.
Cảnh báo này cũng được kích hoạt bởi -Wextra.
-Chính
Cảnh báo nếu loại chính là đáng ngờ. chính nên là một chức năng với bên ngoài
liên kết, trả về int, lấy không đối số, hai hoặc ba đối số của
các loại thích hợp. Cảnh báo này được bật theo mặc định trong C ++ và được bật bởi
-Tường or -Quảng cáo.
-Kẹp niềng răng
Cảnh báo nếu trình khởi tạo tổng hợp hoặc liên hợp không được đặt trong ngoặc hoàn toàn. Trong những điều sau đây
ví dụ, trình khởi tạo cho a không được đặt trong ngoặc hoàn toàn, nhưng điều đó cho b là đầy đủ
trong ngoặc. Cảnh báo này được kích hoạt bởi -Tường trong C.
int a [2] [2] = {0, 1, 2, 3};
int b [2] [2] = {{0, 1}, {2, 3}};
Cảnh báo này được kích hoạt bởi -Tường.
-Chạy-bao-gồm-dirs (Chỉ C, C ++, Objective-C và Objective-C ++)
Cảnh báo nếu thư mục bao gồm do người dùng cung cấp không tồn tại.
- Dấu ngoặc đơn
Cảnh báo nếu dấu ngoặc đơn bị bỏ qua trong một số ngữ cảnh nhất định, chẳng hạn như khi có
chuyển nhượng trong ngữ cảnh mà giá trị sự thật được mong đợi hoặc khi các toán tử được lồng vào nhau
ưu tiên của ai mà mọi người thường nhầm lẫn.
Cũng cảnh báo nếu một so sánh như x <= y <= z xuất hiện; điều này tương đương với (x <= y ? 1 : 0)
<= z, là một cách giải thích khác với cách giải thích của ký hiệu toán học thông thường.
Cũng cảnh báo về các công trình có thể có sự nhầm lẫn mà câu lệnh "if"
nhánh "khác" thuộc về. Đây là một ví dụ về một trường hợp như vậy:
{
nếu một)
nếu (b)
foo();
khác
quán ba ();
}
Trong C / C ++, mọi nhánh "else" thuộc về câu lệnh "if" trong cùng có thể,
trong ví dụ này là "if (b)". Đây thường không phải là điều mà lập trình viên mong đợi, vì
minh họa trong ví dụ trên bằng cách thụt lề mà lập trình viên đã chọn. Khi có
khả năng xảy ra nhầm lẫn này, GCC đưa ra cảnh báo khi cờ này được chỉ định.
Để loại bỏ cảnh báo, hãy thêm dấu ngoặc nhọn xung quanh câu lệnh "if" trong cùng để
không có cách nào "khác" có thể thuộc về "nếu" đi kèm. Mã kết quả trông
như thế này:
{
nếu một)
{
nếu (b)
foo();
khác
quán ba ();
}
}
Đồng thời cảnh báo về việc sử dụng nguy hiểm của phần mở rộng GNU thành "?:" Với toán hạng ở giữa bị bỏ qua.
Khi điều kiện trong toán tử "?": Là một biểu thức boolean, giá trị bị bỏ qua là
luôn luôn 1. Thường các lập trình viên mong đợi nó là một giá trị được tính bên trong điều kiện
biểu thức thay thế.
Cảnh báo này được kích hoạt bởi -Tường.
-Điểm trình tự
Cảnh báo về mã có thể có ngữ nghĩa không xác định vì vi phạm trình tự
quy tắc điểm trong tiêu chuẩn C và C ++.
Các tiêu chuẩn C và C ++ xác định thứ tự mà các biểu thức trong chương trình C / C ++ là
được đánh giá về mặt trình tự điểm, đại diện cho thứ tự một phần giữa
thực thi các phần của chương trình: những phần được thực thi trước điểm trình tự và những phần
thực hiện sau nó. Những điều này xảy ra sau khi đánh giá một biểu thức đầy đủ (một trong đó
không phải là một phần của một biểu thức lớn hơn), sau khi đánh giá toán hạng đầu tiên của một
Toán tử "&&", "||", "?:" hoặc "," (dấu phẩy), trước khi một hàm được gọi (nhưng sau
đánh giá các đối số của nó và biểu thức biểu thị hàm được gọi), và trong
một số nơi khác. Khác với được thể hiện bởi các quy tắc điểm trình tự, thứ tự
đánh giá biểu thức con của một biểu thức không được chỉ định. Tất cả các quy tắc này
chỉ mô tả một đơn đặt hàng thay vì một đơn đặt hàng toàn bộ, ví dụ: nếu hai
các hàm được gọi trong một biểu thức không có điểm trình tự giữa chúng,
thứ tự mà các hàm được gọi không được chỉ định. Tuy nhiên, các tiêu chuẩn
ủy ban đã phán quyết rằng các lệnh gọi chức năng không được chồng chéo.
Nó không được chỉ định khi nào giữa các điểm trình tự thay đổi các giá trị của
đối tượng có hiệu lực. Các chương trình có hành vi phụ thuộc vào điều này có hành vi không xác định;
các tiêu chuẩn C và C ++ chỉ định rằng "Giữa trình tự trước đó và tiếp theo có một điểm
đối tượng phải có giá trị lưu trữ của nó được sửa đổi nhiều nhất một lần bằng cách đánh giá của một
biểu hiện. Hơn nữa, giá trị trước sẽ chỉ được đọc để xác định giá trị
được lưu trữ. ". Nếu một chương trình vi phạm các quy tắc này, kết quả trên bất kỳ
việc thực hiện là hoàn toàn không thể đoán trước.
Ví dụ về mã có hành vi không xác định là "a = a ++;", "a [n] = b [n ++]" và "a [i ++] =
i; ". Một số trường hợp phức tạp hơn không được chẩn đoán bằng tùy chọn này và nó có thể đưa ra
đôi khi kết quả dương tính giả, nhưng nói chung nó đã được tìm thấy khá hiệu quả ở
phát hiện loại vấn đề này trong các chương trình.
Tiêu chuẩn được diễn đạt một cách khó hiểu, do đó có một số tranh luận về tiêu chuẩn chính xác
ý nghĩa của quy tắc điểm trình tự trong các trường hợp tế nhị. Liên kết đến các cuộc thảo luận của
vấn đề, bao gồm các định nghĩa chính thức được đề xuất, có thể được tìm thấy trên trang các bài đọc của GCC,
tạihttp://gcc.gnu.org/readings.html>.
Cảnh báo này được kích hoạt bởi -Tường cho C và C ++.
-Wno-return-local-addr
Không cảnh báo về việc trả về một con trỏ (hoặc trong C ++, một tham chiếu) cho một biến đi
ra khỏi phạm vi sau khi hàm trả về.
-Kiểu quay
Cảnh báo bất cứ khi nào một hàm được xác định với kiểu trả về mặc định là "int". Cũng
cảnh báo về bất kỳ câu lệnh "return" nào không có giá trị trả về trong một hàm có kiểu trả về
không phải là "void" (rơi ra khỏi phần cuối của thân hàm được coi là trở lại
không có giá trị) và về câu lệnh "return" với một biểu thức trong một hàm
có kiểu trả về là "void".
Đối với C ++, một hàm không có kiểu trả về luôn tạo ra một thông báo chẩn đoán, ngay cả
khi nào -Không trả lại-loại được quy định. Các trường hợp ngoại lệ duy nhất là chính và chức năng
được định nghĩa trong tiêu đề hệ thống.
Cảnh báo này được kích hoạt bởi -Tường.
-Wswitch
Cảnh báo bất cứ khi nào câu lệnh "switch" có chỉ mục thuộc kiểu liệt kê và thiếu "trường hợp"
cho một hoặc nhiều mã được đặt tên của bảng liệt kê đó. (Sự hiện diện của "mặc định"
nhãn ngăn cảnh báo này.) Các nhãn "trường hợp" bên ngoài phạm vi liệt kê cũng
kích hoạt cảnh báo khi tùy chọn này được sử dụng (ngay cả khi có nhãn "mặc định"). Cái này
cảnh báo được kích hoạt bởi -Tường.
-Wswitch-mặc định
Cảnh báo bất cứ khi nào câu lệnh "switch" không có trường hợp "mặc định".
-wswitch-enum
Cảnh báo bất cứ khi nào câu lệnh "switch" có chỉ mục thuộc kiểu liệt kê và thiếu "trường hợp"
cho một hoặc nhiều mã được đặt tên của bảng liệt kê đó. các nhãn "case" bên ngoài
phạm vi liệt kê cũng kích hoạt cảnh báo khi tùy chọn này được sử dụng. Sự khác biệt duy nhất
giữa -Wswitch và tùy chọn này là tùy chọn này đưa ra cảnh báo về một
mã liệt kê ngay cả khi có nhãn "mặc định".
-Wsync-nand (Chỉ C và C ++)
Cảnh báo khi các hàm tích hợp "__sync_fetch_and_nand" và "__sync_nand_and_fetch" là
đã sử dụng. Các hàm này đã thay đổi ngữ nghĩa trong GCC 4.4.
-Tranh
Cảnh báo nếu gặp bất kỳ đoạn nào có thể thay đổi ý nghĩa của chương trình
(các đoạn trong các bình luận không được cảnh báo về). Cảnh báo này được kích hoạt bởi -Tường.
-Không sử dụng-nhưng-đặt-tham số
Cảnh báo bất cứ khi nào một tham số hàm được chỉ định, nhưng không được sử dụng (ngoại trừ
khai báo của nó).
Để loại bỏ cảnh báo này, hãy sử dụng không sử dụng thuộc tính.
Cảnh báo này cũng được kích hoạt bởi -Không sử dụng Cùng với -Wextra.
-Wunused-but-set-biến
Cảnh báo bất cứ khi nào một biến cục bộ được gán cho, nhưng nếu không thì không được sử dụng (ngoại trừ biến cục bộ của nó
tuyên ngôn). Cảnh báo này được kích hoạt bởi -Tường.
Để loại bỏ cảnh báo này, hãy sử dụng không sử dụng thuộc tính.
Cảnh báo này cũng được kích hoạt bởi -Không sử dụng, được kích hoạt bởi -Tường.
-Chức năng sử dụng
Cảnh báo bất cứ khi nào một hàm tĩnh được khai báo nhưng không được xác định hoặc một hàm tĩnh không nội dòng
chức năng không được sử dụng. Cảnh báo này được kích hoạt bởi -Tường.
-Không sử dụng-nhãn
Cảnh báo bất cứ khi nào một nhãn được khai báo nhưng không được sử dụng. Cảnh báo này được kích hoạt bởi -Tường.
Để loại bỏ cảnh báo này, hãy sử dụng không sử dụng thuộc tính.
-Wunused-local-typedefs (Chỉ C, Objective-C, C ++ và Objective-C ++)
Cảnh báo khi một typedef được xác định cục bộ trong một hàm không được sử dụng. Cảnh báo này là
được kích hoạt bởi -Tường.
-Không sử dụng-tham số
Cảnh báo bất cứ khi nào một tham số hàm không được sử dụng ngoài phần khai báo của nó.
Để loại bỏ cảnh báo này, hãy sử dụng không sử dụng thuộc tính.
-Không-không-sử-dụng-kết quả
Không cảnh báo nếu người gọi hàm được đánh dấu bằng thuộc tính "warning_unused_result" không
không sử dụng giá trị trả về của nó. Mặc định là -Kết quả sử dụng.
-Không sử dụng-biến
Cảnh báo bất cứ khi nào một biến cục bộ hoặc biến tĩnh không phải là hằng số không được sử dụng ngoài
tuyên bố của nó. Cảnh báo này được kích hoạt bởi -Tường.
Để loại bỏ cảnh báo này, hãy sử dụng không sử dụng thuộc tính.
-Giá trị không sử dụng
Cảnh báo bất cứ khi nào một câu lệnh tính toán một kết quả không được sử dụng một cách rõ ràng. Để đàn áp
cảnh báo này chuyển biểu thức không sử dụng đến làm mất hiệu lực. Điều này bao gồm một biểu thức-câu lệnh
hoặc bên trái của biểu thức dấu phẩy không chứa tác dụng phụ. Vì
ví dụ, một biểu thức chẳng hạn như x [i, j] gây ra cảnh báo, trong khi x [(void) i, j] không làm.
Cảnh báo này được kích hoạt bởi -Tường.
-Không sử dụng
Tất cả những điều trên -Không sử dụng các tùy chọn kết hợp.
Để nhận được cảnh báo về một tham số chức năng không được sử dụng, bạn phải chỉ định
-Wextra -Không sử dụng (lưu ý rằng -Tường ngụ ý -Không sử dụng), hoặc chỉ định riêng
-Không sử dụng-tham số.
-Được vệ sinh
Cảnh báo nếu một biến tự động được sử dụng mà không được khởi tạo trước hoặc nếu một biến
có thể bị che bởi lệnh gọi "setjmp". Trong C ++, cảnh báo nếu một tham chiếu không tĩnh hoặc không
tĩnh const thành viên xuất hiện trong một lớp không có hàm tạo.
Nếu bạn muốn cảnh báo về mã sử dụng giá trị chưa được khởi tạo của biến trong
trình khởi tạo của riêng nó, hãy sử dụng -Đơn vị tự tùy chọn.
Những cảnh báo này xảy ra đối với các phần tử cấu trúc chưa được khởi tạo hoặc được tạo lớp đệm riêng lẻ,
các biến liên hợp hoặc mảng cũng như đối với các biến chưa được khởi tạo hoặc được tạo lớp đệm
nói chung. Chúng không xảy ra đối với các biến hoặc phần tử được tuyên bố là "dễ bay hơi". Tại vì
những cảnh báo này phụ thuộc vào tối ưu hóa, các biến hoặc yếu tố chính xác mà ở đó
là cảnh báo phụ thuộc vào các tùy chọn tối ưu hóa chính xác và phiên bản GCC được sử dụng.
Lưu ý rằng có thể không có cảnh báo về một biến chỉ được sử dụng để tính toán
giá trị mà bản thân nó không bao giờ được sử dụng, bởi vì những tính toán như vậy có thể bị xóa bởi luồng dữ liệu
phân tích trước khi các cảnh báo được in.
-Có thể chưa được khởi tạo
Đối với một biến tự động, nếu tồn tại một đường dẫn từ mục nhập hàm đến việc sử dụng
biến được khởi tạo, nhưng tồn tại một số đường dẫn khác mà
biến không được khởi tạo, trình biên dịch sẽ phát ra cảnh báo nếu nó không thể chứng minh
các đường dẫn chưa khởi tạo không được thực thi tại thời điểm chạy. Các cảnh báo này được thực hiện tùy chọn
bởi vì GCC không đủ thông minh để xem tất cả các lý do tại sao mã có thể chính xác
mặc dù có vẻ có lỗi. Đây là một ví dụ về cách điều này có thể xảy ra:
{
intx;
chuyển đổi (y)
{
trường hợp 1: x = 1;
phá vỡ;
trường hợp 2: x = 4;
phá vỡ;
trường hợp 3: x = 5;
}
foo(x);
}
Nếu giá trị của "y" luôn là 1, 2 hoặc 3 thì "x" luôn được khởi tạo, nhưng GCC
không biết điều này. Để loại bỏ cảnh báo, bạn cần cung cấp một trường hợp mặc định với
khẳng định(0) hoặc mã tương tự.
Tùy chọn này cũng cảnh báo khi một biến tự động không thay đổi có thể bị thay đổi bởi
gọi tới "longjmp". Những cảnh báo này cũng chỉ khả thi khi tối ưu hóa
biên dịch.
Trình biên dịch chỉ thấy các lệnh gọi đến "setjmp". Nó không thể biết "longjmp" sẽ ở đâu
gọi là; trên thực tế, một trình xử lý tín hiệu có thể gọi nó tại bất kỳ điểm nào trong mã. Như một
kết quả là bạn có thể nhận được cảnh báo ngay cả khi thực tế không có vấn đề gì vì "longjmp"
thực tế không thể được gọi tại nơi có thể gây ra vấn đề.
Một số cảnh báo giả có thể tránh được nếu bạn khai báo tất cả các chức năng bạn sử dụng
không bao giờ trở lại là "noreturn".
Cảnh báo này được kích hoạt bởi -Tường or -Wextra.
-Wunknown-pragmas
Cảnh báo khi gặp phải lệnh "#pragma" mà GCC không hiểu. Nếu điều này
tùy chọn dòng lệnh được sử dụng, cảnh báo thậm chí được đưa ra cho các pragmas không xác định trong hệ thống
các tệp tiêu đề. Đây không phải là trường hợp nếu các cảnh báo chỉ được kích hoạt bởi -Tường
tùy chọn dòng lệnh.
-Wno-pragmas
Không cảnh báo về việc lạm dụng pragmas, chẳng hạn như tham số không chính xác, cú pháp không hợp lệ hoặc
xung đột giữa các pragmas. Xem thêm -Wunknown-pragmas.
-Giá răng cưa
Tùy chọn này chỉ hoạt động khi -fstrict-aliasing đang hoạt động. Nó cảnh báo về mã
có thể phá vỡ các quy tắc răng cưa nghiêm ngặt mà trình biên dịch đang sử dụng để tối ưu hóa.
Cảnh báo không nắm bắt được tất cả các trường hợp, nhưng cố gắng nắm bắt các trường hợp phổ biến hơn
cạm bẫy. Nó được bao gồm trong -Tường. Nó tương đương với -Wstrict-aliasing = 3
-Wstrict-aliasing = n
Tùy chọn này chỉ hoạt động khi -fstrict-aliasing đang hoạt động. Nó cảnh báo về mã
có thể phá vỡ các quy tắc răng cưa nghiêm ngặt mà trình biên dịch đang sử dụng để tối ưu hóa.
Mức độ cao hơn tương ứng với độ chính xác cao hơn (ít dương tính giả hơn). Cấp độ cao hơn
cũng tương ứng với nỗ lực nhiều hơn, tương tự như cách -O công trình. -Giá răng cưa is
tương đương với -Wstrict-aliasing = 3.
Mức độ 1: Tích cực nhất, nhanh chóng, kém chính xác nhất. Có thể hữu ích khi cấp cao hơn
không cảnh báo nhưng -fstrict-aliasing vẫn phá vỡ mã, vì nó có rất ít sai
âm bản. Tuy nhiên, nó có nhiều mặt tích cực sai. Cảnh báo cho tất cả các chuyển đổi con trỏ
giữa các loại có thể không tương thích, ngay cả khi không bao giờ được tham chiếu. Chạy ở phía trước
chỉ kết thúc.
Mức độ 2: Nhanh nhẹn, không quá chính xác. Có thể vẫn có nhiều kết quả dương tính giả (không
nhiều như cấp độ 1), và ít phủ định sai (nhưng có thể nhiều hơn cấp độ 1).
Không giống như cấp độ 1, nó chỉ cảnh báo khi một địa chỉ được lấy. Cảnh báo về các loại không hoàn chỉnh.
Chỉ chạy ở giao diện người dùng.
Cấp độ 3 (mặc định cho -Giá răng cưa): Nên có rất ít dương tính giả và rất ít
phủ định sai. Chậm hơn một chút so với mức 1 hoặc 2 khi tối ưu hóa được bật.
Quan tâm đến kiểu chơi chữ + biểu tượng phổ biến trong giao diện người dùng:
"* (int *) & some_float". Nếu tối ưu hóa được bật, nó cũng chạy ở phần cuối, nơi
nó xử lý nhiều trường hợp câu lệnh bằng cách sử dụng thông tin điểm tới nhạy cảm với luồng.
Chỉ cảnh báo khi con trỏ đã chuyển đổi được tham chiếu. Không cảnh báo về việc chưa hoàn thành
các loại.
-Ngăn tràn
-Wstrict-tràn =n
Tùy chọn này chỉ hoạt động khi -fstrict-tràn đang hoạt động. Nó cảnh báo về các trường hợp
trong đó trình biên dịch tối ưu hóa dựa trên giả định rằng tràn đã ký không
xảy ra. Lưu ý rằng nó không cảnh báo về tất cả các trường hợp mã có thể bị tràn: nó
chỉ cảnh báo về các trường hợp trình biên dịch thực hiện một số tối ưu hóa. Vì vậy, điều này
cảnh báo phụ thuộc vào mức độ tối ưu hóa.
Tối ưu hóa giả định rằng tràn đã ký không xảy ra là hoàn toàn an toàn nếu
các giá trị của các biến có liên quan sao cho thực tế, tràn không bao giờ
xảy ra. Do đó, cảnh báo này có thể dễ dàng đưa ra kết quả dương tính giả: cảnh báo về mã
đó không thực sự là một vấn đề. Để giúp tập trung vào các vấn đề quan trọng, một số cảnh báo
các cấp độ được xác định. Không có cảnh báo nào được đưa ra đối với việc sử dụng tràn đã ký không xác định
khi ước tính số lần lặp lại mà một vòng lặp yêu cầu, đặc biệt là khi xác định
liệu một vòng lặp có được thực hiện hay không.
-Wstrict-tràn = 1
Cảnh báo về những trường hợp vừa nghi vấn vừa dễ tránh. Ví dụ, với
-fstrict-tràn, trình biên dịch đơn giản hóa "x + 1> x" thành 1. Mức này của
-Ngăn tràn được kích hoạt bởi -Tường; cấp cao hơn thì không, và phải
yêu cầu rõ ràng.
-Wstrict-tràn = 2
Cũng cảnh báo về các trường hợp khác khi so sánh được đơn giản hóa thành một hằng số. Vì
ví dụ: "abs (x)> = 0". Điều này chỉ có thể được đơn giản hóa khi -fstrict-tràn là
có hiệu lực, vì "abs (INT_MIN)" tràn thành "INT_MIN", nhỏ hơn XNUMX.
-Ngăn tràn (không có cấp độ) giống như -Wstrict-tràn = 2.
-Wstrict-tràn = 3
Đồng thời cảnh báo về các trường hợp khác khi so sánh được đơn giản hóa. Ví dụ: "x + 1
> 1 "được đơn giản hóa thành" x> 0 ".
-Wstrict-tràn = 4
Đồng thời cảnh báo về các đơn giản hóa khác không nằm trong các trường hợp trên. Vì
ví dụ: "(x * 10) / 5" được đơn giản hóa thành "x * 2".
-Wstrict-tràn = 5
Cũng cảnh báo về các trường hợp trình biên dịch giảm độ lớn của một hằng số
liên quan đến một so sánh. Ví dụ: "x + 2> y" được đơn giản hóa thành "x + 1> = y".
Điều này chỉ được báo cáo ở mức cảnh báo cao nhất vì sự đơn giản hóa này
áp dụng cho nhiều phép so sánh, vì vậy mức cảnh báo này cung cấp một số lượng rất lớn
dương tính giả.
-Wsuggest-thuộc tính =[tinh khiết|const|không trở lại|định dạng]
Cảnh báo những trường hợp mà việc thêm một thuộc tính có thể có lợi. Các thuộc tính hiện tại
được hỗ trợ được liệt kê dưới đây.
-Wsuggest-thuộc tính = tinh khiết
-Wsuggest-thuộc tính = const
-Wsuggest-thuộc tính = noreturn
Cảnh báo về các hàm có thể là ứng cử viên cho các thuộc tính "pure", "const" hoặc
"không trở lại". Trình biên dịch chỉ cảnh báo các chức năng hiển thị trong trình biên dịch khác
đơn vị hoặc (trong trường hợp "thuần túy" và "const") nếu nó không thể chứng minh rằng hàm
trở lại bình thường. Một hàm trả về bình thường nếu nó không chứa vô hạn
lặp lại hoặc trả về bất thường bằng cách ném, gọi "abort ()" hoặc bẫy. Cái này
phân tích yêu cầu tùy chọn -fipa-thuần-const, được bật theo mặc định tại -O và
cao hơn. Mức độ tối ưu hóa cao hơn cải thiện độ chính xác của phân tích.
-Wsuggest-thuộc tính = định dạng
- Thuộc tính-format -missing
Cảnh báo về các con trỏ hàm có thể là ứng cử viên cho thuộc tính "định dạng".
Lưu ý đây chỉ là những ứng cử viên có thể, không phải là những ứng cử viên tuyệt đối. GCC đoán rằng
con trỏ hàm có thuộc tính "định dạng" được sử dụng trong phép gán,
các câu lệnh khởi tạo, truyền tham số hoặc trả về phải có
thuộc tính "format" trong kiểu kết quả. Tức là phía bên trái của
gán hoặc khởi tạo, kiểu của biến tham số hoặc trả về
loại của hàm chứa tương ứng cũng phải có thuộc tính "format"
để tránh cảnh báo.
GCC cũng cảnh báo về các định nghĩa hàm có thể là ứng cử viên cho "định dạng"
thuộc tính. Một lần nữa, đây chỉ là những ứng cử viên có thể. GCC đoán "định dạng" đó
các thuộc tính có thể thích hợp cho bất kỳ hàm nào gọi một hàm như
"vprintf" hoặc "vscanf", nhưng điều này có thể không phải lúc nào cũng đúng và một số hàm
các thuộc tính "định dạng" nào phù hợp có thể không được phát hiện.
-Warray-giới hạn
Tùy chọn này chỉ hoạt động khi -ftree-vrp đang hoạt động (mặc định cho -O2 trở lên). Nó
cảnh báo về các chỉ số dưới đối với các mảng luôn nằm ngoài giới hạn. Cảnh báo này là
được kích hoạt bởi -Tường.
-Wno-div-by-zero
Không cảnh báo về phép chia số nguyên thời gian biên dịch cho không. Dấu phẩy động chia cho
không được cảnh báo về số XNUMX, vì nó có thể là một cách hợp pháp để lấy số vô hạn và
NaN.
-Các tiêu đề hệ thống
In thông báo cảnh báo cho các cấu trúc được tìm thấy trong tệp tiêu đề hệ thống. Cảnh báo từ
tiêu đề hệ thống thường bị loại bỏ, với giả định rằng chúng thường không
chỉ ra các vấn đề thực sự và sẽ chỉ làm cho đầu ra của trình biên dịch khó đọc hơn. Sử dụng
tùy chọn dòng lệnh này yêu cầu GCC phát ra cảnh báo từ các tiêu đề hệ thống như thể chúng
xảy ra trong mã người dùng. Tuy nhiên, lưu ý rằng sử dụng -Tường kết hợp với tùy chọn này
làm không cảnh báo về các pragmas không xác định trong tiêu đề hệ thống --- vì điều đó, -Wunknown-pragmas
cũng phải được sử dụng.
-Trampolines
Cảnh báo về trampolines được tạo cho con trỏ đến các hàm lồng nhau.
Tấm bạt lò xo là một đoạn dữ liệu hoặc mã nhỏ được tạo khi chạy
thời gian trên ngăn xếp khi địa chỉ của một hàm lồng nhau được lấy và
được sử dụng để gọi hàm lồng nhau một cách gián tiếp. Đối với một số mục tiêu, nó
chỉ được tạo thành từ dữ liệu và do đó không cần điều trị đặc biệt. Nhưng,
đối với hầu hết các mục tiêu, nó được tạo thành từ mã và do đó yêu cầu ngăn xếp
được thực hiện để chương trình hoạt động bình thường.
- Bằng phẳng
Cảnh báo nếu các giá trị dấu phẩy động được sử dụng trong so sánh bình đẳng.
Ý tưởng đằng sau điều này là đôi khi nó là thuận tiện (cho lập trình viên)
coi các giá trị dấu phẩy động là giá trị gần đúng với số thực chính xác vô hạn.
Nếu bạn đang làm điều này, thì bạn cần phải tính toán (bằng cách phân tích mã hoặc trong một số
cách khác) lỗi lớn nhất hoặc có thể xảy ra lớn nhất mà tính toán đưa ra, và
cho phép nó khi thực hiện so sánh (và khi sản xuất đầu ra, nhưng đó là một
vấn đề khác). Đặc biệt, thay vì kiểm tra sự bình đẳng, bạn nên kiểm tra
để xem liệu hai giá trị có phạm vi trùng nhau hay không; và điều này được thực hiện với
toán tử quan hệ, vì vậy so sánh bình đẳng có thể bị nhầm lẫn.
-Điều kiện (Chỉ C và Objective-C)
Cảnh báo về một số cấu trúc hoạt động khác nhau trong ISO truyền thống và ISO C. Ngoài ra
cảnh báo về cấu trúc ISO C không có chức năng tương đương C truyền thống và / hoặc có vấn đề
cấu trúc nên tránh.
· Các tham số macro xuất hiện trong chuỗi ký tự trong phần thân macro. Trong
Thay thế macro C truyền thống diễn ra trong chuỗi ký tự, nhưng trong ISO C
nó không.
· Trong C truyền thống, một số chỉ thị tiền xử lý không tồn tại. Truyên thông
bộ tiền xử lý chỉ coi một dòng là một chỉ thị nếu # xuất hiện trong cột
1 trên đường dây. Vì vậy -Điều kiện cảnh báo về các chỉ thị mà C truyền thống
hiểu nhưng bỏ qua vì # không xuất hiện dưới dạng ký tự đầu tiên trên
dòng. Nó cũng gợi ý bạn ẩn các chỉ thị như #pragma không hiểu bởi
C truyền thống bằng cách thụt lề chúng. Một số triển khai truyền thống không
công nhận #elif, vì vậy tùy chọn này khuyên bạn nên tránh nó hoàn toàn.
· Một macro giống như hàm xuất hiện mà không có đối số.
· Toán tử cộng một bậc.
· Các U hậu tố hằng số nguyên, hoặc F or L hậu tố hằng số dấu phẩy động.
(C truyền thống không hỗ trợ L hậu tố trên hằng số nguyên.) Lưu ý, những
hậu tố xuất hiện trong macro được xác định trong tiêu đề hệ thống của hầu hết các hệ thống hiện đại,
ví dụ như _PHÚT/_MAX macro trong " ". Việc sử dụng các macro này trong mã người dùng có thể
thường dẫn đến cảnh báo giả, tuy nhiên bộ tiền xử lý tích hợp của GCC có
đủ ngữ cảnh để tránh cảnh báo trong những trường hợp này.
· Một hàm được khai báo bên ngoài trong một khối và sau đó được sử dụng sau khi kết thúc
khối.
· Câu lệnh "switch" có toán hạng kiểu "long".
· Một khai báo hàm không phải "static" theo sau một khai báo "static". Cấu trúc này không
được chấp nhận bởi một số trình biên dịch C truyền thống.
· Loại ISO của một hằng số nguyên có độ rộng hoặc độ ký hiệu khác với
loại truyền thống. Cảnh báo này chỉ được đưa ra nếu cơ số của hằng số là mười.
Tức là các giá trị thập lục phân hoặc bát phân, thường đại diện cho các mẫu bit, không
cảnh báo về.
· Việc sử dụng nối chuỗi ISO được phát hiện.
· Khởi tạo tập hợp tự động.
· Định danh xung đột với nhãn. C truyền thống thiếu một không gian tên riêng cho
nhãn.
· Khởi tạo các công đoàn. Nếu bộ khởi tạo bằng XNUMX, cảnh báo sẽ bị bỏ qua.
Điều này được thực hiện với giả định rằng trình khởi tạo bằng XNUMX trong mã người dùng xuất hiện
điều kiện dựa trên ví dụ: "__STDC__" để tránh bị thiếu cảnh báo của trình khởi tạo và dựa vào
khởi tạo mặc định bằng XNUMX trong trường hợp C truyền thống.
· Chuyển đổi theo nguyên mẫu giữa các giá trị dấu phẩy động / cố định và ngược lại. Các
sự vắng mặt của các nguyên mẫu này khi biên dịch với C truyền thống gây ra nghiêm trọng
các vấn đề. Đây là một tập hợp con của các cảnh báo chuyển đổi có thể xảy ra; cho bộ đầy đủ
sử dụng -Chuyển đổi-chuyển đổi.
· Sử dụng các định nghĩa chức năng kiểu ISO C. Cảnh báo này cố ý là không ban hành
cho các khai báo nguyên mẫu hoặc các chức năng đa dạng vì các tính năng ISO C này
xuất hiện trong mã của bạn khi sử dụng macro tương thích C truyền thống của libiberty,
"PARAMS" và "VPARAMS". Cảnh báo này cũng được bỏ qua đối với các hàm lồng nhau
bởi vì tính năng đó đã là một tiện ích mở rộng GCC và do đó không liên quan đến
khả năng tương thích C truyền thống.
-Chuyển đổi-chuyển đổi (Chỉ C và Objective-C)
Cảnh báo nếu một nguyên mẫu gây ra chuyển đổi kiểu khác với những gì sẽ xảy ra
đối số tương tự trong trường hợp không có nguyên mẫu. Điều này bao gồm chuyển đổi của
điểm cố định thành di động và ngược lại, và các chuyển đổi thay đổi chiều rộng hoặc
tính ký của đối số điểm cố định ngoại trừ khi giống với quảng cáo mặc định.
-Khai báo-sau-tuyên bố (Chỉ C và Objective-C)
Cảnh báo khi tìm thấy một khai báo sau một câu lệnh trong một khối. Cấu trúc này, đã biết
từ C ++, được giới thiệu với ISO C99 và được phép theo mặc định trong GCC. Không phải vậy
được hỗ trợ bởi ISO C90 và không được hỗ trợ bởi các phiên bản GCC trước GCC 3.0.
-Wundef
Cảnh báo nếu một số nhận dạng không xác định được đánh giá trong một #nếu Chỉ thị.
-Không-endif-nhãn
Đừng cảnh báo bất cứ khi nào #khác hoặc một #endif được theo sau bởi văn bản.
-Chụp xuống
Cảnh báo bất cứ khi nào một biến cục bộ hoặc khai báo kiểu phủ bóng một biến khác,
tham số, kiểu hoặc thành viên lớp (trong C ++) hoặc bất cứ khi nào một hàm tích hợp là
bóng mờ. Lưu ý rằng trong C ++, trình biên dịch cảnh báo nếu một biến cục bộ làm bóng một
typedef, nhưng không phải nếu nó che khuất một struct / class / enum.
-Wlarger-than =len
Cảnh báo bất cứ khi nào một đối tượng lớn hơn len byte được xác định.
-Wframe-large-than =len
Cảnh báo nếu kích thước của khung chức năng lớn hơn len byte. Tính toán được thực hiện
để xác định kích thước khung ngăn xếp là gần đúng và không thận trọng. Thực tế
yêu cầu có thể lớn hơn một chút len ngay cả khi bạn không nhận được một cảnh báo. Trong
ngoài ra, bất kỳ không gian nào được phân bổ qua "alloca", mảng có độ dài thay đổi hoặc liên quan
cấu trúc không được trình biên dịch bao gồm khi xác định có hay không phát hành
cảnh báo.
-Wno-free-nonheap-đối tượng
Không cảnh báo khi cố gắng giải phóng một đối tượng không được phân bổ trên heap.
-Wstack-use =len
Cảnh báo nếu mức sử dụng ngăn xếp của một hàm có thể lớn hơn len byte. Tính toán
được thực hiện để xác định việc sử dụng ngăn xếp là bảo thủ. Mọi không gian được phân bổ qua "alloca",
mảng có độ dài thay đổi hoặc các cấu trúc có liên quan được trình biên dịch đưa vào khi
xác định có hay không đưa ra cảnh báo.
Thông báo phù hợp với kết quả đầu ra của -fstack-sử dụng.
· Nếu việc sử dụng ngăn xếp là hoàn toàn tĩnh nhưng vượt quá số lượng được chỉ định, đó là:
cảnh báo: sử dụng ngăn xếp là 1120 byte
· Nếu việc sử dụng ngăn xếp là (một phần) động nhưng bị giới hạn, đó là:
cảnh báo: mức sử dụng ngăn xếp có thể là 1648 byte
· Nếu việc sử dụng ngăn xếp là (một phần) động và không bị giới hạn, thì đó là:
cảnh báo: việc sử dụng ngăn xếp có thể không bị giới hạn
-Tối ưu hóa vòng lặp an toàn
Cảnh báo nếu vòng lặp không thể được tối ưu hóa vì trình biên dịch không thể giả định bất kỳ điều gì trên
giới hạn của các chỉ số vòng lặp. Với -funsafe-loop-tối ưu hóa cảnh báo nếu trình biên dịch
đưa ra các giả định như vậy.
-Không có định dạng pedantic-ms-định dạng (Chỉ mục tiêu MinGW)
Khi sử dụng kết hợp với - Định dạng và - mang tính mô phạm không có phần mở rộng GNU, cái này
tùy chọn vô hiệu hóa các cảnh báo về các chỉ định độ rộng định dạng "printf" / "scanf" không phải ISO
"I32", "I64" và "I" được sử dụng trên các mục tiêu Windows, phụ thuộc vào thời gian chạy MS.
-Wpointer-arith
Cảnh báo về bất kỳ điều gì phụ thuộc vào "kích thước của" một loại chức năng hoặc "khoảng trống". GNU C
gán các loại này với kích thước là 1, để thuận tiện trong việc tính toán với "void *"
con trỏ và con trỏ đến các hàm. Trong C ++, cũng cảnh báo khi một phép toán số học
liên quan đến "NULL". Cảnh báo này cũng được kích hoạt bởi -Quảng cáo.
-Giới hạn loại
Cảnh báo nếu một phép so sánh luôn đúng hoặc luôn sai do phạm vi giới hạn của
kiểu dữ liệu, nhưng không cảnh báo cho các biểu thức hằng số. Ví dụ: cảnh báo nếu một dấu
biến được so sánh với XNUMX với < or >=. Cảnh báo này cũng được kích hoạt bởi
-Wextra.
-Wad-function-cast (Chỉ C và Objective-C)
Cảnh báo bất cứ khi nào một lệnh gọi hàm được truyền đến một kiểu không khớp. Ví dụ: cảnh báo nếu
"int malloc ()" được chuyển thành "bất cứ thứ gì *".
-Wc ++ - tính toán (Chỉ C và Objective-C)
Cảnh báo về các cấu trúc ISO C nằm ngoài tập hợp con chung của ISO C và ISO
C ++, ví dụ: yêu cầu chuyển đổi ngầm định từ "void *" thành một con trỏ thành không phải "void"
kiểu.
-Wc ++ 11-compat (Chỉ C ++ và Objective-C ++)
Cảnh báo về các cấu trúc C ++ có ý nghĩa khác nhau giữa ISO C ++ 1998 và ISO C ++ 2011,
ví dụ, số nhận dạng trong ISO C ++ 1998 là từ khóa trong ISO C ++ 2011. Cảnh báo này
bật lên -Răng mọc và được kích hoạt bởi -Tường.
-Chất lượng phát sóng
Cảnh báo bất cứ khi nào con trỏ được truyền để loại bỏ bộ định loại khỏi loại đích.
Ví dụ: cảnh báo nếu "const char *" được chuyển thành "char *" thông thường.
Đồng thời cảnh báo khi thực hiện diễn viên giới thiệu bộ định loại theo cách không an toàn. Vì
ví dụ: truyền "char **" thành "const char **" là không an toàn, như trong ví dụ sau:
/ * p là giá trị char **. * /
const char ** q = (const char **) p;
/ * Việc gán chuỗi chỉ đọc cho const char * là OK. * /
* q = "chuỗi";
/ * Bây giờ con trỏ char ** trỏ đến bộ nhớ chỉ đọc. * /
** p = 'b';
-Wcast-căn chỉnh
Cảnh báo bất cứ khi nào con trỏ được truyền sao cho căn chỉnh cần thiết của mục tiêu là
tăng. Ví dụ: cảnh báo nếu "char *" được truyền thành "int *" trên các máy có
số nguyên chỉ có thể được truy cập ở ranh giới hai hoặc bốn byte.
-Viết-chuỗi
Khi biên dịch C, hãy cung cấp cho hằng số chuỗi kiểu "const char [chiều dài]" để sao chép
địa chỉ của một trong một con trỏ không phải "const" "char *" tạo ra cảnh báo. Này
cảnh báo giúp bạn tìm thấy mã thời gian biên dịch có thể cố gắng viết thành một chuỗi
hằng số, nhưng chỉ khi bạn đã rất cẩn thận về việc sử dụng "const" trong khai báo
và nguyên mẫu. Nếu không, nó chỉ là một sự phiền toái. Đây là lý do tại sao chúng tôi không làm -Tường
yêu cầu những cảnh báo này.
Khi biên dịch C ++, hãy cảnh báo về việc chuyển đổi không dùng nữa từ chuỗi ký tự thành "char
* ". Cảnh báo này được bật theo mặc định cho các chương trình C ++.
-Vòng bọc
Cảnh báo các biến có thể bị thay đổi bởi longjmp or cái nĩa. Cảnh báo này cũng
được kích hoạt bởi -Wextra.
-Chuyển đổi
Cảnh báo về các chuyển đổi ngầm có thể thay đổi giá trị. Điều này bao gồm chuyển đổi
giữa số thực và số nguyên, như "abs (x)" khi "x" là "gấp đôi"; chuyển đổi giữa
có dấu và không dấu, như "unsigned ui = -1"; và chuyển đổi sang các loại nhỏ hơn, như
"sqrtf (M_PI)". Không cảnh báo đối với các kiểu rõ ràng như "abs ((int) x)" và "ui =
(unsigned) -1 "hoặc nếu giá trị không bị thay đổi bởi chuyển đổi như trong" abs (2.0) ".
Cảnh báo về chuyển đổi giữa các số nguyên có dấu và chưa ký có thể bị vô hiệu hóa bởi
sử dụng -Không-ký-chuyển-đổi.
Đối với C ++, cũng cảnh báo về giải quyết quá tải gây nhầm lẫn cho các chuyển đổi do người dùng xác định; và
chuyển đổi không bao giờ sử dụng toán tử chuyển đổi loại: chuyển đổi thành "vô hiệu", giống nhau
loại, một lớp cơ sở hoặc một tham chiếu đến chúng. Cảnh báo về chuyển đổi giữa các ký
và các số nguyên không dấu bị tắt theo mặc định trong C ++ trừ khi -Chuyển đổi-ký hiệu is
được kích hoạt rõ ràng.
-Không-chuyển-đổi-null (Chỉ C ++ và Objective-C ++)
Không cảnh báo chuyển đổi giữa các loại "NULL" và không phải con trỏ. -Wconversion-null is
được bật theo mặc định.
-Wzero-as-null-pointer-hằng số (Chỉ C ++ và Objective-C ++)
Cảnh báo khi chữ '0' được sử dụng làm hằng số con trỏ null. Điều này có thể hữu ích cho
tạo điều kiện thuận lợi cho việc chuyển đổi thành "nullptr" trong C ++ 11.
-Không sử dụng-cast (Chỉ C ++ và Objective-C ++)
Cảnh báo khi một biểu thức được chuyển thành kiểu riêng của nó.
-Vân đẹp
Cảnh báo nếu phần thân trống xảy ra trong if, khác or do trong khi tuyên bố. Cảnh báo này là
cũng được kích hoạt bởi -Wextra.
-Wenum-so sánh
Cảnh báo về sự so sánh giữa các giá trị của các kiểu liệt kê khác nhau. Trong C ++ enumeral
sự không khớp trong biểu thức điều kiện cũng được chẩn đoán và cảnh báo được kích hoạt bởi
vỡ nợ. Trong C, cảnh báo này được kích hoạt bởi -Tường.
-Wjump-miss-init (Chỉ C, Objective-C)
Cảnh báo nếu câu lệnh "goto" hoặc câu lệnh "switch" nhảy về phía trước qua
khởi tạo một biến hoặc nhảy lùi về nhãn sau khi biến đã được
khởi tạo. Điều này chỉ cảnh báo về các biến được khởi tạo khi chúng
khai báo. Cảnh báo này chỉ được hỗ trợ cho C và Objective-C; trong C ++, loại này
nhánh là một lỗi trong mọi trường hợp.
-Wjump-miss-init được bao gồm trong -Wc ++ - tính toán. Nó có thể bị vô hiệu hóa với
-Wno-jump-miss-init tùy chọn.
-Sign-so sánh
Cảnh báo khi so sánh giữa các giá trị có dấu và không có dấu có thể tạo ra giá trị không chính xác
kết quả khi giá trị có dấu được chuyển đổi thành không có dấu. Cảnh báo này cũng được bật
by -Wextra; để nhận được các cảnh báo khác về -Wextra nếu không có cảnh báo này, hãy sử dụng -Wextra
-Không có dấu-so sánh.
-Chuyển đổi-ký hiệu
Cảnh báo về các chuyển đổi ngầm có thể thay đổi dấu hiệu của một giá trị số nguyên, như
gán một biểu thức số nguyên có dấu cho một biến số nguyên không dấu. Một cách rõ ràng
tắt tiếng cảnh báo. Trong C, tùy chọn này cũng được kích hoạt bởi -Chuyển đổi.
-Wsizeof-con trỏ-memaccess
Cảnh báo các tham số độ dài đáng ngờ đối với một số hàm tích hợp sẵn trong bộ nhớ và chuỗi
nếu đối số sử dụng "sizeof". Cảnh báo này cảnh báo vd about "memset (ptr, 0, sizeof
(ptr)); "nếu" ptr "không phải là một mảng mà là một con trỏ và đề xuất một cách khắc phục có thể xảy ra, hoặc
về "memcpy (& foo, ptr, sizeof (& foo));". Cảnh báo này được kích hoạt bởi -Tường.
-Quần áo
Cảnh báo về việc sử dụng địa chỉ bộ nhớ đáng ngờ. Chúng bao gồm việc sử dụng địa chỉ của một
hàm trong một biểu thức có điều kiện, chẳng hạn như "void func (void); if (func)" và
so sánh với địa chỉ bộ nhớ của một chuỗi ký tự, chẳng hạn như "if (x ==" abc ")".
Việc sử dụng như vậy thường chỉ ra lỗi của lập trình viên: địa chỉ của một hàm luôn luôn
đánh giá là true, vì vậy việc sử dụng chúng trong một điều kiện thường chỉ ra rằng người lập trình
quên dấu ngoặc đơn trong một lệnh gọi hàm; và so sánh với các ký tự chuỗi
dẫn đến hành vi không xác định và không di động trong C, vì vậy chúng thường chỉ ra
mà lập trình viên dự định sử dụng "strcmp". Cảnh báo này được kích hoạt bởi -Tường.
-Op-op
Cảnh báo về việc sử dụng đáng ngờ các toán tử logic trong biểu thức. Điều này bao gồm việc sử dụng
toán tử logic trong các ngữ cảnh mà toán tử khôn ngoan có thể được mong đợi.
-Tổng hợp-lợi nhuận
Cảnh báo nếu có bất kỳ chức năng nào trả về cấu trúc hoặc liên hiệp được xác định hoặc gọi. (Trong
ngôn ngữ mà bạn có thể trả về một mảng, điều này cũng đưa ra cảnh báo.)
-Không tích cực-vòng lặp-tối ưu hóa
Cảnh báo nếu trong một vòng lặp có số lần lặp không đổi, trình biên dịch phát hiện không xác định
hành vi trong một số câu lệnh trong một hoặc nhiều lần lặp.
-Không thuộc tính
Không cảnh báo nếu sử dụng "__attribute__" không mong muốn, chẳng hạn như các thuộc tính không được công nhận,
các thuộc tính hàm được áp dụng cho các biến, v.v. Điều này không ngăn được lỗi đối với
sử dụng sai các thuộc tính được hỗ trợ.
-Wno-builtin-macro-xác định lại
Không cảnh báo nếu các macro tích hợp nhất định được xác định lại. Điều này ngăn chặn các cảnh báo cho
định nghĩa lại "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__" và
"__BASE_FILE__".
- Nguyên mẫu hạn chế (Chỉ C và Objective-C)
Cảnh báo nếu một hàm được khai báo hoặc xác định mà không chỉ định loại đối số. (Một
định nghĩa hàm kiểu cũ được cho phép mà không có cảnh báo nếu đứng trước
khai báo chỉ định các loại đối số.)
-Khai báo kiểu vàng (Chỉ C và Objective-C)
Cảnh báo về những cách sử dụng lỗi thời, theo Tiêu chuẩn C, trong một tuyên bố. Vì
ví dụ, cảnh báo nếu các chỉ định lớp lưu trữ như "tĩnh" không phải là những thứ đầu tiên trong
tuyên ngôn. Cảnh báo này cũng được kích hoạt bởi -Wextra.
-Định nghĩa phong cách vàng (Chỉ C và Objective-C)
Cảnh báo nếu định nghĩa hàm kiểu cũ được sử dụng. Một cảnh báo được đưa ra ngay cả khi có
một nguyên mẫu trước đó.
-Wmissing-tham số-type (Chỉ C và Objective-C)
Một tham số hàm được khai báo mà không có mã định kiểu trong các hàm kiểu K & R:
void foo (thanh) {}
Cảnh báo này cũng được kích hoạt bởi -Wextra.
- Nguyên mẫu thử nghiệm (Chỉ C và Objective-C)
Cảnh báo nếu một hàm toàn cục được xác định mà không có khai báo nguyên mẫu trước đó. Cái này
cảnh báo được đưa ra ngay cả khi bản thân định nghĩa cung cấp một nguyên mẫu. Sử dụng tùy chọn này
để phát hiện các hàm toàn cục không có khai báo nguyên mẫu phù hợp trong
tập tin tiêu đề. Tùy chọn này không hợp lệ cho C ++ vì tất cả các khai báo hàm
cung cấp các nguyên mẫu và một khai báo không khớp sẽ khai báo quá tải hơn là
xung đột với một tuyên bố trước đó. Sử dụng -Khai báo-khai báo để phát hiện mất tích
khai báo trong C ++.
-Khai báo-khai báo
Cảnh báo nếu một hàm toàn cục được xác định mà không có khai báo trước đó. Làm như vậy ngay cả khi
bản thân định nghĩa cung cấp một nguyên mẫu. Sử dụng tùy chọn này để phát hiện toàn cầu
các hàm không được khai báo trong tệp tiêu đề. Trong C, không có cảnh báo nào được đưa ra cho
các hàm với các khai báo không phải nguyên mẫu trước đó; sử dụng - Nguyên mẫu thử nghiệm phát hiện
nguyên mẫu còn thiếu. Trong C ++, không có cảnh báo nào được đưa ra cho các mẫu hàm hoặc cho
các hàm nội tuyến, hoặc cho các hàm trong không gian tên ẩn danh.
-Wmissing-field-khởi tạo
Cảnh báo nếu trình khởi tạo của cấu trúc bị thiếu một số trường. Ví dụ, sau đây
mã gây ra cảnh báo như vậy, bởi vì "xh" hoàn toàn là XNUMX:
struct s {int f, g, h; };
struct sx = {3, 4};
Tùy chọn này không cảnh báo về các trình khởi tạo được chỉ định, vì vậy sửa đổi sau
không kích hoạt cảnh báo:
struct s {int f, g, h; };
struct sx = {.f = 3, .g = 4};
Cảnh báo này được bao gồm trong -Wextra. Để có được khác -Wextra cảnh báo mà không có cảnh báo này,
sử dụng -Wextra -Không-thiếu-trường-khởi tạo.
-Wno-multihar
Không cảnh báo nếu một hằng số đa ký tự ('FOOF') Được sử dụng. Thông thường chúng chỉ ra một
đánh máy mã của người dùng, vì chúng có các giá trị do triển khai xác định và không nên
được sử dụng trong mã di động.
-Công thức hóa =
Trong ISO C và ISO C ++, hai số nhận dạng khác nhau nếu chúng là các chuỗi khác nhau của
nhân vật. Tuy nhiên, đôi khi các ký tự bên ngoài bộ ký tự ASCII cơ bản
được sử dụng, bạn có thể có hai chuỗi ký tự khác nhau trông giống nhau. Tránh
nhầm lẫn, tiêu chuẩn ISO 10646 đặt ra một số bình thường quy tắc mà khi áp dụng
đảm bảo rằng hai trình tự trông giống nhau được chuyển thành cùng một trình tự. GCC
có thể cảnh báo bạn nếu bạn đang sử dụng số nhận dạng chưa được chuẩn hóa; tùy chọn này
kiểm soát cảnh báo đó.
Có bốn mức cảnh báo được hỗ trợ bởi GCC. Mặc định là -Wnormalized = nfc,
cảnh báo về bất kỳ số nhận dạng nào không ở dạng chuẩn hóa ISO 10646 "C",
NFC. NFC là hình thức được khuyến nghị cho hầu hết các mục đích sử dụng.
Thật không may, có một số ký tự được phép trong số nhận dạng theo ISO C và ISO C ++
điều đó, khi được chuyển thành NFC, không được phép trong số nhận dạng. Đó là, không có cách nào
để sử dụng các ký hiệu này trong ISO C hoặc C ++ di động và có tất cả các số nhận dạng của bạn trong NFC.
-Wnormalized = id ngăn chặn cảnh báo cho các ký tự này. Đó là hy vọng rằng tương lai
các phiên bản của các tiêu chuẩn liên quan sẽ sửa lỗi này, đó là lý do tại sao tùy chọn này không
mặc định.
Bạn có thể tắt cảnh báo cho tất cả các ký tự bằng cách viết -Wnormalized = none. Bạn
chỉ nên làm điều này nếu bạn đang sử dụng một số lược đồ chuẩn hóa khác (như "D"),
bởi vì nếu không, bạn có thể dễ dàng tạo ra các lỗi mà theo nghĩa đen là không thể nhìn thấy.
Một số ký tự trong ISO 10646 có ý nghĩa riêng biệt nhưng trông giống hệt nhau ở một số phông chữ
hoặc hiển thị các phương pháp luận, đặc biệt là khi đã áp dụng định dạng. Ví dụ
"\ u207F", "SUPERSCRIPT LATIN NHỎ CHỮ N", hiển thị giống như một "n" thông thường
đã được đặt trong một chỉ số trên. ISO 10646 xác định NFKC chương trình chuẩn hóa thành
chuyển đổi tất cả những thứ này thành dạng chuẩn và GCC sẽ cảnh báo nếu mã của bạn không ở trong
NFKC nếu bạn sử dụng -Wnormalized = nfkc. Cảnh báo này có thể so sánh với cảnh báo về mọi
số nhận dạng có chứa chữ cái O vì nó có thể bị nhầm lẫn với chữ số 0,
và do đó không phải là mặc định, nhưng có thể hữu ích như một quy ước mã hóa cục bộ nếu
không thể cố định môi trường lập trình để hiển thị các ký tự này một cách rõ ràng.
-Không bị phản đối
Không cảnh báo về việc sử dụng các tính năng không dùng nữa.
-Không được sử dụng-khai báo
Không cảnh báo về việc sử dụng các hàm, biến và kiểu được đánh dấu là không được chấp nhận bởi
bằng cách sử dụng thuộc tính "không được dùng nữa".
-Không tràn
Không cảnh báo về sự tràn thời gian biên dịch trong các biểu thức hằng số.
-Woverride-init (Chỉ C và Objective-C)
Cảnh báo nếu trường khởi tạo không có tác dụng phụ bị ghi đè khi sử dụng được chỉ định
bộ khởi tạo.
Cảnh báo này được bao gồm trong -Wextra. Để có được khác -Wextra cảnh báo mà không có cảnh báo này,
sử dụng -Wextra -Wno-ghi đè-init.
-Đóng gói
Cảnh báo nếu một cấu trúc được cung cấp thuộc tính đóng gói, nhưng thuộc tính đóng gói không có
ảnh hưởng đến bố cục hoặc kích thước của kết cấu. Các cấu trúc như vậy có thể được căn chỉnh sai cho
lợi ít. Ví dụ: trong mã này, biến "fx" trong "struct bar" là
bị lệch mặc dù bản thân "thanh cấu trúc" không có thuộc tính đóng gói:
cấu trúc foo {
intx;
ký tự a, b, c, d;
} __ thuộc tính __ ((đóng gói));
thanh cấu trúc {
ký tự z;
cấu trúc foo f;
};
-Wpack-bitfield-compat
Chuỗi 4.1, 4.2 và 4.3 của GCC bỏ qua thuộc tính "đóng gói" trên các trường bit của kiểu
"ký tự". Điều này đã được khắc phục trong GCC 4.4 nhưng sự thay đổi có thể dẫn đến sự khác biệt trong
bố cục cấu trúc. GCC thông báo cho bạn khi điểm bù của trường như vậy đã thay đổi trong GCC
4.4. Ví dụ: không còn khoảng đệm 4 bit giữa trường "a" và "b" trong trường này
kết cấu:
cấu trúc foo
{
ký tự a: 4;
ký tự b: 8;
} __attribute__ ((đóng gói));
Cảnh báo này được bật theo mặc định. Sử dụng -Wno-pack-bitfield-compat để vô hiệu hóa điều này
cảnh báo.
-Đánh giá
Cảnh báo nếu phần đệm được bao gồm trong một cấu trúc, hoặc để căn chỉnh một phần tử của
cấu trúc hoặc để căn chỉnh toàn bộ cấu trúc. Đôi khi điều này xảy ra, nó có thể
để sắp xếp lại các trường của cấu trúc để giảm phần đệm và do đó làm cho
cấu trúc nhỏ hơn.
-Wredundant-từ chối
Cảnh báo nếu bất kỳ điều gì được khai báo nhiều lần trong cùng một phạm vi, ngay cả trong trường hợp
khai báo nhiều là hợp lệ và không có gì thay đổi.
-Wnested-externs (Chỉ C và Objective-C)
Cảnh báo nếu gặp phải khai báo "extern" trong một hàm.
-Wno-inherit-variadic-ctor
Loại bỏ cảnh báo về việc sử dụng các hàm tạo kế thừa C ++ 11 khi lớp cơ sở
kế thừa từ có một phương thức tạo C variadic; cảnh báo được bật theo mặc định vì
dấu chấm lửng không được kế thừa.
-Mạch
Cảnh báo nếu một hàm được khai báo là nội dòng không thể được nội dòng. Ngay cả với điều này
tùy chọn, trình biên dịch không cảnh báo về lỗi đối với các hàm nội tuyến được khai báo trong
tiêu đề hệ thống.
Trình biên dịch sử dụng nhiều phương pháp heuristics để xác định xem có nội tuyến một
hàm số. Ví dụ, trình biên dịch có tính đến kích thước của hàm được
nội tuyến và số lượng nội tuyến đã được thực hiện trong hàm hiện tại.
Do đó, những thay đổi dường như không đáng kể trong chương trình nguồn có thể gây ra
cảnh báo được tạo ra bởi -Mạch xuất hiện hoặc biến mất.
-Không-không hợp lệ-bù trừ (Chỉ C ++ và Objective-C ++)
Ngăn chặn các cảnh báo từ việc áp dụng bù đắp macro cho một loại không phải POD. Dựa theo
tiêu chuẩn ISO C ++ 1998, đang áp dụng bù đắp sang loại không phải POD là không xác định. Trong
các triển khai C ++ hiện có, tuy nhiên, bù đắp thường cho kết quả có ý nghĩa
ngay cả khi được áp dụng cho một số loại loại không phải POD (chẳng hạn như cấu trúc việc này
không phải là một kiểu POD chỉ vì có một hàm tạo). Cờ này dành cho
những người dùng biết rằng họ đang viết mã không thể di động và những người đã cố tình
đã chọn để bỏ qua cảnh báo về nó.
Các hạn chế về bù đắp có thể được nới lỏng trong phiên bản tương lai của tiêu chuẩn C ++.
-Wno-int-to-con trỏ-cast
Loại bỏ cảnh báo từ phôi sang kiểu con trỏ của một số nguyên có kích thước khác. Trong
C ++, truyền sang một loại con trỏ có kích thước nhỏ hơn là một lỗi. Wint-to-con trỏ-cast is
được bật theo mặc định.
-Wno-con trỏ tới int-cast (Chỉ C và Objective-C)
Loại bỏ cảnh báo từ các phôi từ một con trỏ đến một kiểu số nguyên có kích thước khác.
-Winvalid-pch
Cảnh báo nếu tiêu đề được biên dịch trước được tìm thấy trong đường dẫn tìm kiếm nhưng không thể sử dụng được.
- Dài
Cảnh báo nếu Dài Dài loại được sử dụng. Điều này được kích hoạt bởi một trong hai -Quảng cáo or -Điều kiện
ở chế độ ISO C90 và C ++ 98. Để ngăn chặn các thông báo cảnh báo, hãy sử dụng -Không-dài-lâu.
-Wvariadic-macro
Cảnh báo nếu macro khác nhau được sử dụng trong chế độ ISO C90 tương đối hoặc cú pháp thay thế GNU
khi ở chế độ ISO C99 lớn. Đây là mặc định. Để ngăn chặn các thông báo cảnh báo, hãy sử dụng
-Wno-variadic-macro.
-Wvarargs
Cảnh báo khi có vấn đề về việc sử dụng các macro được sử dụng để xử lý các đối số biến như
va_start. Đây là mặc định. Để ngăn chặn các thông báo cảnh báo, hãy sử dụng -Wno-varargs.
- Hiệu suất hoạt động-điều hành
Cảnh báo nếu thao tác vectơ không được triển khai thông qua các khả năng SIMD của kiến trúc.
Chủ yếu hữu ích cho việc điều chỉnh hiệu suất. Hoạt động vectơ có thể được thực hiện
"piecewise", có nghĩa là hoạt động vô hướng được thực hiện trên mọi vectơ
yếu tố; "song song", có nghĩa là hoạt động vectơ được triển khai bằng cách sử dụng
vô hướng của loại rộng hơn, thường hiệu quả hơn về hiệu suất; và "như một
vô hướng ", có nghĩa là vectơ đó phù hợp với kiểu vô hướng.
-Không-ảo-di-chuyển-gán
Loại bỏ các cảnh báo về việc kế thừa từ một cơ sở ảo bằng một động thái C ++ 11 không tầm thường
toán tử gán. Điều này rất nguy hiểm vì nếu cơ sở ảo có thể truy cập được cùng
nhiều hơn một đường dẫn, nó sẽ được di chuyển nhiều lần, điều này có nghĩa là cả hai đối tượng đều kết thúc
lên ở trạng thái chuyển đến. Nếu toán tử gán di chuyển được viết để tránh
đang di chuyển từ một đối tượng được chuyển đến, cảnh báo này có thể bị vô hiệu hóa.
-wvla
Cảnh báo nếu mảng độ dài thay đổi được sử dụng trong mã. -Wno-vla ngăn cản -Quảng cáo
cảnh báo của mảng có độ dài thay đổi.
-Wvolpose-register-var
Cảnh báo nếu một biến đăng ký được khai báo là không ổn định. Công cụ sửa đổi dễ bay hơi không
ngăn chặn tất cả các tối ưu hóa có thể loại bỏ việc đọc và / hoặc ghi để đăng ký
biến. Cảnh báo này được kích hoạt bởi -Tường.
-Tối ưu hóa-vô hiệu hóa
Cảnh báo nếu thẻ tối ưu hóa được yêu cầu bị vô hiệu hóa. Cảnh báo này thường không
chỉ ra rằng có bất kỳ điều gì sai với mã của bạn; nó chỉ đơn thuần chỉ ra rằng GCC's
trình tối ưu hóa không thể xử lý mã một cách hiệu quả. Thông thường, vấn đề là
mã quá lớn hoặc quá phức tạp; GCC từ chối tối ưu hóa các chương trình khi tối ưu hóa
bản thân nó có khả năng mất rất nhiều thời gian.
-Kí hiệu con trỏ (Chỉ C và Objective-C)
Cảnh báo về việc truyền hoặc gán đối số con trỏ với độ ký khác nhau. Cái này
tùy chọn chỉ được hỗ trợ cho C và Objective-C. Nó được ngụ ý bởi -Tường và bởi
-Quảng cáo, có thể bị vô hiệu hóa với -Không con trỏ-dấu.
-Bộ bảo vệ bao
Tùy chọn này chỉ hoạt động khi -fstack-protectionor đang hoạt động. Nó cảnh báo về các chức năng
không được bảo vệ chống lại việc đập ngăn xếp.
-Không có bãi bồi
Loại bỏ cảnh báo về các cấu trúc không thể được thiết lập bởi -fmudflap.
-Chiều dài-dây
Cảnh báo về các hằng số chuỗi dài hơn độ dài "tối đa tối thiểu"
quy định trong tiêu chuẩn C. Các trình biên dịch hiện đại thường cho phép các hằng số chuỗi
dài hơn nhiều so với giới hạn tối thiểu của tiêu chuẩn, nhưng các chương trình rất linh hoạt sẽ
tránh sử dụng các chuỗi dài hơn.
Giới hạn áp dụng sau khi nối chuỗi không đổi và không tính dấu
KHÔNG CÓ. Trong C90, giới hạn là 509 ký tự; trong C99, nó đã được nâng lên 4095. C ++ 98 không
không chỉ định mức tối đa quy chuẩn tối thiểu, vì vậy chúng tôi không chẩn đoán các chuỗi có độ dài quá mức trong
C ++.
Tùy chọn này được ngụ ý bởi -Quảng cáovà có thể bị vô hiệu hóa với
-Wno-overlength-string.
-Wunsuffixed-float-hằng số (Chỉ C và Objective-C)
Đưa ra cảnh báo cho bất kỳ hằng số động nào không có hậu tố. Khi đã sử dụng
Cùng với -Các tiêu đề hệ thống nó cảnh báo về các hằng số như vậy trong các tệp tiêu đề hệ thống.
Điều này có thể hữu ích khi chuẩn bị mã để sử dụng với pragma "FLOAT_CONST_DECIMAL64"
từ phần mở rộng dấu phẩy động thập phân thành C99.
Các lựa chọn cho Gỡ lỗi trên màn hình chương trình or GCC
GCC có các tùy chọn đặc biệt khác nhau được sử dụng để gỡ lỗi chương trình của bạn hoặc GCC:
-g Tạo thông tin gỡ lỗi ở định dạng gốc của hệ điều hành (stt, COFF,
XCOFF hoặc DWARF 2). GDB có thể làm việc với thông tin gỡ lỗi này.
Trên hầu hết các hệ thống sử dụng định dạng cố định, -g cho phép sử dụng thêm thông tin gỡ lỗi
mà chỉ GDB mới có thể sử dụng; thông tin bổ sung này giúp gỡ lỗi hoạt động tốt hơn trong GDB nhưng
có thể làm cho các trình gỡ lỗi khác gặp sự cố hoặc từ chối đọc chương trình. Nếu bạn muốn
kiểm soát để chắc chắn có tạo thêm thông tin hay không, sử dụng -gstabs +, -gstab,
-gxcoff +, -gxcoff, hoặc là -gvms (xem bên dưới).
GCC cho phép bạn sử dụng -g với -O. Các phím tắt được thực hiện bởi mã được tối ưu hóa có thể
đôi khi tạo ra kết quả đáng ngạc nhiên: một số biến bạn đã khai báo có thể không tồn tại
tất cả các; luồng kiểm soát có thể nhanh chóng di chuyển đến nơi bạn không mong đợi; một số tuyên bố có thể
không được thực thi vì chúng tính toán kết quả không đổi hoặc giá trị của chúng đã ở
tay; một số câu lệnh có thể thực thi ở những nơi khác nhau vì chúng đã được chuyển đi
trong số các vòng lặp.
Tuy nhiên, nó chứng tỏ có thể gỡ lỗi đầu ra được tối ưu hóa. Điều này làm cho nó hợp lý
để sử dụng trình tối ưu hóa cho các chương trình có thể có lỗi.
Các tùy chọn sau đây hữu ích khi GCC được tạo với khả năng để biết thêm
hơn một định dạng gỡ lỗi.
-gsplit-lùn
Tách càng nhiều thông tin gỡ lỗi ngắn càng tốt vào một tệp đầu ra riêng biệt
với phần mở rộng .dwo. Tùy chọn này cho phép hệ thống xây dựng tránh liên kết các tệp
với thông tin gỡ lỗi. Để hữu ích, tùy chọn này yêu cầu trình gỡ lỗi có khả năng
đọc .dwo tệp.
-ggdb
Tạo thông tin gỡ lỗi để GDB sử dụng. Điều này có nghĩa là sử dụng biểu cảm nhất
định dạng có sẵn (DWARF 2, stings hoặc định dạng gốc nếu cả hai đều không phải là
được hỗ trợ), bao gồm cả phần mở rộng GDB nếu có thể.
-gpubname
Tạo các phần .debug_pubnames và .debug_pubtypes lùn.
-gstab
Đưa ra thông tin gỡ lỗi ở định dạng cố định (nếu điều đó được hỗ trợ), không có GDB
các phần mở rộng. Đây là định dạng được DBX sử dụng trên hầu hết các hệ thống BSD. Trên MIPS, Alpha và
Hệ thống V Release 4 hệ thống tùy chọn này tạo ra đầu ra gỡ lỗi không
được hiểu bởi DBX hoặc SDB. Trên hệ thống System V Release 4, tùy chọn này yêu cầu GNU
người lắp ráp.
-feliminate-không sử dụng-gỡ lỗi-ký hiệu
Cung cấp thông tin gỡ lỗi ở định dạng cố định (nếu điều đó được hỗ trợ), chỉ cho các biểu tượng
mà thực sự được sử dụng.
-femit-class-gỡ lỗi-luôn luôn
Thay vì đưa ra thông tin gỡ lỗi cho một lớp C ++ chỉ trong một tệp đối tượng,
phát ra nó trong tất cả các tệp đối tượng bằng cách sử dụng lớp. Tùy chọn này chỉ nên được sử dụng với
trình gỡ lỗi không thể xử lý theo cách GCC thường phát ra thông tin gỡ lỗi
cho các lớp vì việc sử dụng tùy chọn này sẽ tăng kích thước thông tin gỡ lỗi lên
nhiều như một hệ số của hai.
-fdebug-type-section
Khi sử dụng DWARF Phiên bản 4 trở lên, loại DIE có thể được đưa vào
phần ".debug_types" thay vì biến chúng thành một phần của phần ".debug_info". Nó
sẽ hiệu quả hơn nếu đặt chúng trong các phần comdat riêng biệt vì trình liên kết sau đó có thể
Loại bỏ các bản sao. Nhưng không phải tất cả người tiêu dùng DWARF đều hỗ trợ các phần ".debug_types"
và trên một số đối tượng ".debug_types" tạo ra kích thước lớn hơn thay vì gỡ lỗi nhỏ hơn
thông tin.
-gstabs +
Tạo thông tin gỡ lỗi ở định dạng stts (nếu được hỗ trợ), sử dụng GNU
phần mở rộng chỉ được hiểu bởi trình gỡ lỗi GNU (GDB). Việc sử dụng các tiện ích mở rộng này là
có khả năng làm cho các trình gỡ lỗi khác gặp sự cố hoặc từ chối đọc chương trình.
-gcoff
Tạo thông tin gỡ lỗi ở định dạng COFF (nếu điều đó được hỗ trợ). Đây là
định dạng được SDB sử dụng trên hầu hết các hệ thống Hệ thống V trước Bản phát hành Hệ thống V 4.
-gxcoff
Tạo thông tin gỡ lỗi ở định dạng XCOFF (nếu điều đó được hỗ trợ). Đây là
định dạng được sử dụng bởi trình gỡ lỗi DBX trên hệ thống IBM RS / 6000.
-gxcoff +
Tạo thông tin gỡ lỗi ở định dạng XCOFF (nếu được hỗ trợ), sử dụng GNU
phần mở rộng chỉ được hiểu bởi trình gỡ lỗi GNU (GDB). Việc sử dụng các tiện ích mở rộng này là
có khả năng làm cho các trình gỡ lỗi khác gặp sự cố hoặc từ chối đọc chương trình và có thể gây ra
trình lắp ráp không phải trình hợp dịch GNU (GAS) bị lỗi.
-gdwarf-phiên bản
Tạo thông tin gỡ lỗi ở định dạng DWARF (nếu điều đó được hỗ trợ). Giá trị của
phiên bản có thể là 2, 3 hoặc 4; phiên bản mặc định cho hầu hết các mục tiêu là 4.
Lưu ý rằng với DWARF Phiên bản 2, một số cổng yêu cầu và luôn sử dụng một số
DWARF 3 phần mở rộng trong bảng thư giãn.
Phiên bản 4 có thể yêu cầu GDB 7.0 và -fvar-theo dõi-phân công vì lợi ích tối đa.
-grecord-gcc-switch
Việc chuyển đổi này gây ra các tùy chọn dòng lệnh được sử dụng để gọi trình biên dịch có thể
ảnh hưởng đến việc tạo mã được nối vào thuộc tính DW_AT_producer trong DWARF
gỡ lỗi thông tin. Các tùy chọn được nối với các khoảng trắng ngăn cách chúng với
nhau và từ phiên bản trình biên dịch. Xem thêm -frecord-gcc-switch cho người khác
cách lưu trữ các tùy chọn trình biên dịch vào tệp đối tượng. Đây là mặc định.
-gno-record-gcc-switch
Không cho phép thêm các tùy chọn dòng lệnh vào thuộc tính DW_AT_producer trong DWARF
gỡ lỗi thông tin.
-gstrict-lùn
Không cho phép sử dụng các phần mở rộng của phiên bản tiêu chuẩn DWARF mới hơn được chọn với
-gdwarf-phiên bản. Trên hầu hết các mục tiêu sử dụng tiện ích mở rộng DWARF không xung đột từ sau này
phiên bản tiêu chuẩn được cho phép.
-gno-nghiêm-ngặt-lùn
Cho phép sử dụng các phần mở rộng của phiên bản tiêu chuẩn DWARF mới hơn được chọn với
-gdwarf-phiên bản.
-gvms
Tạo thông tin gỡ lỗi ở định dạng gỡ lỗi Alpha / VMS (nếu điều đó được hỗ trợ). Cái này
là định dạng được DEBUG sử dụng trên hệ thống Alpha / VMS.
-gcấp
-ggdbcấp
-gstabcấp
-gcoffcấp
-gxcoffcấp
-gvmscấp
Yêu cầu thông tin gỡ lỗi và cũng sử dụng cấp để chỉ định bao nhiêu thông tin. Các
mức mặc định là 2.
Mức 0 không tạo ra thông tin gỡ lỗi nào cả. Vì vậy, -g0 phủ định -g.
Cấp độ 1 tạo ra thông tin tối thiểu, đủ để tạo dấu vết trong các phần của
chương trình mà bạn không định gỡ lỗi. Điều này bao gồm các mô tả về các chức năng và
biến bên ngoài, nhưng không có thông tin về biến cục bộ và không có số dòng.
Cấp độ 3 bao gồm thông tin bổ sung, chẳng hạn như tất cả các định nghĩa vĩ mô có trong
chương trình. Một số trình gỡ lỗi hỗ trợ mở rộng macro khi bạn sử dụng -g3.
-gdwarf-2 không chấp nhận mức gỡ lỗi được nối, vì GCC được sử dụng để hỗ trợ
tùy chọn -gdwarf điều đó có nghĩa là tạo thông tin gỡ lỗi trong phiên bản 1 của DWARF
(rất khác với phiên bản 2), và nó sẽ quá khó hiểu.
Định dạng gỡ lỗi đó đã lỗi thời từ lâu nhưng không thể thay đổi tùy chọn này ngay bây giờ. Thay vào đó sử dụng
một bổ sung -gcấp tùy chọn để thay đổi mức gỡ lỗi cho DWARF.
-gtoggle
Tắt tạo thông tin gỡ lỗi, nếu bỏ qua tùy chọn này sẽ tạo hoặc tắt tùy chọn
ở cấp độ 2 nếu không. Vị trí của đối số này trong dòng lệnh không
Vân đê; nó có hiệu lực sau khi tất cả các tùy chọn khác được xử lý và nó chỉ làm như vậy
một lần, không cần biết bao nhiêu lần nó được cho đi. Điều này chủ yếu nhằm mục đích được sử dụng với
-fcompare-gỡ lỗi.
-fsanifying = địa chỉ
Bật AddressSanitizer, một trình phát hiện lỗi bộ nhớ nhanh. Hướng dẫn truy cập bộ nhớ
sẽ là công cụ để phát hiện các lỗi vượt quá giới hạn và sử dụng sau khi miễn phí. Nhìn thấy
<http://code.google.com/p/address-sanitizer/> để biết thêm chi tiết.
-fsanized = chủ đề
Bật ThreadSanitizer, một công cụ phát hiện cuộc đua dữ liệu nhanh. Hướng dẫn truy cập bộ nhớ sẽ được
công cụ để phát hiện lỗi cuộc đua dữ liệu. Nhìn thấy
<http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> để biết thêm chi tiết.
-fdump-final-inns[=hồ sơ]
Đổ bản đại diện nội bộ cuối cùng (RTL) xuống hồ sơ. Nếu đối số tùy chọn là
bỏ qua (hoặc nếu hồ sơ là "."), tên của tệp kết xuất được xác định bằng cách thêm
".gkd" thành tên tệp đầu ra biên dịch.
-fcompare-gỡ lỗi[=lựa chọn]
Nếu không có lỗi nào xảy ra trong quá trình biên dịch, hãy chạy trình biên dịch lần thứ hai, thêm lựa chọn và
-fcompare-debug-giây đối với các đối số được chuyển đến lần biên dịch thứ hai. Bán phá giá
đại diện nội bộ cuối cùng trong cả hai bản tổng hợp và in lỗi nếu chúng khác nhau.
Nếu dấu bằng bị bỏ qua, mặc định -gtoggle Được sử dụng.
Biến môi trường GCC_COMPARE_DEBUG, nếu được xác định, không rỗng và khác không,
cho phép ngầm -fcompare-gỡ lỗi. Nếu GCC_COMPARE_DEBUG được định nghĩa thành một chuỗi
bắt đầu bằng dấu gạch ngang, sau đó nó được sử dụng cho lựa chọn, nếu không thì là mặc định -gtoggle is
đã sử dụng.
-fcompare-debug =, có dấu bằng nhưng không có lựa chọn, tương đương với
-fno-so sánh-gỡ lỗi, vô hiệu hóa việc bán phá giá đại diện cuối cùng và
biên dịch thứ hai, ngăn chặn GCC_COMPARE_DEBUG từ khi có hiệu lực.
Để xác minh phạm vi bảo hiểm đầy đủ trong -fcompare-gỡ lỗi thử nghiệm, thiết lập GCC_COMPARE_DEBUG để nói
-fso sánh-gỡ lỗi-không-ghi đè, mà GCC từ chối vì là một tùy chọn không hợp lệ trong bất kỳ
biên dịch (thay vì tiền xử lý, lắp ráp hoặc liên kết). Để chỉ nhận được một cảnh báo,
thiết lập GCC_COMPARE_DEBUG đến -w% n-fcompare-debug không ghi đè sẽ làm.
-fcompare-debug-giây
Tùy chọn này hoàn toàn được chuyển đến trình biên dịch để biên dịch thứ hai được yêu cầu
by -fcompare-gỡ lỗi, cùng với các tùy chọn để tắt tiếng cảnh báo và bỏ qua các tùy chọn khác
điều đó sẽ gây ra hiệu ứng phụ kết xuất trình biên dịch thành tệp hoặc đầu ra tiêu chuẩn.
Tệp kết xuất và tệp tạm thời được bảo quản được đổi tên để chứa ".gk"
phần mở rộng bổ sung trong lần biên dịch thứ hai, để tránh ghi đè lên những
được tạo bởi cái đầu tiên.
Khi tùy chọn này được chuyển đến trình điều khiển trình biên dịch, nó gây ra Thành phố điện khí hóa phía tây dãy núi Rocky đầu tiên biên dịch thành
được bỏ qua, điều này làm cho nó hữu ích cho một chút nào khác ngoài việc gỡ lỗi trình biên dịch thích hợp.
-feliminate-lùn2-dups
Nén thông tin gỡ lỗi DWARF 2 bằng cách loại bỏ thông tin trùng lặp về
mỗi ký hiệu. Tùy chọn này chỉ có ý nghĩa khi tạo gỡ lỗi DWARF 2
thông tin với -gdwarf-2.
-femit-struct-debug-baseonly
Chỉ gửi thông tin gỡ lỗi cho các kiểu cấu trúc khi tên cơ sở của
tệp nguồn biên dịch khớp với tên cơ sở của tệp mà cấu trúc được xác định.
Tùy chọn này về cơ bản làm giảm kích thước của thông tin gỡ lỗi, nhưng ở
mất thông tin loại tiềm năng đáng kể cho trình gỡ lỗi. Nhìn thấy
-femit-struct-debug-Reduce cho một tùy chọn ít hung hăng hơn. Nhìn thấy
-femit-struct-debug-chi tiết để kiểm soát chi tiết hơn.
Tùy chọn này chỉ hoạt động với DWARF 2.
-femit-struct-debug-Reduce
Chỉ gửi thông tin gỡ lỗi cho các kiểu cấu trúc khi tên cơ sở của
tệp nguồn biên dịch khớp với tên cơ sở của tệp mà trong đó loại được xác định,
trừ khi cấu trúc là một mẫu hoặc được định nghĩa trong tiêu đề hệ thống.
Tùy chọn này làm giảm đáng kể kích thước của thông tin gỡ lỗi, với một số
khả năng mất thông tin loại cho trình gỡ lỗi. Nhìn thấy -femit-struct-debug-baseonly
để có một lựa chọn tích cực hơn. Nhìn thấy -femit-struct-debug-chi tiết để biết thêm chi tiết
kiểm soát.
Tùy chọn này chỉ hoạt động với DWARF 2.
-femit-struct-debug-chi tiết[=danh sách đặc tả]
Chỉ định các kiểu giống như cấu trúc mà trình biên dịch tạo ra thông tin gỡ lỗi. Các
mục đích là giảm thông tin gỡ lỗi cấu trúc trùng lặp giữa các tệp đối tượng khác nhau
trong cùng một chương trình.
Tùy chọn này là phiên bản chi tiết của -femit-struct-debug-Reduce và
-femit-struct-debug-baseonly, phục vụ cho hầu hết các nhu cầu.
Một đặc tả có cú pháp [Là:|ind:][thứ tự:|thể loại:](bất kì|hệ thống|cơ sở|không ai)
Từ đầu tiên tùy chọn giới hạn đặc điểm kỹ thuật đối với các cấu trúc được sử dụng trực tiếp
(Là:) hoặc được sử dụng gián tiếp (ind:). Một loại cấu trúc được sử dụng trực tiếp khi nó là loại
của một biến, thành viên. Sử dụng gián tiếp phát sinh thông qua con trỏ đến cấu trúc. Đó là,
khi việc sử dụng một cấu trúc không đầy đủ là hợp lệ, thì việc sử dụng là gián tiếp. Một ví dụ là cấu trúc
một trực tiếp; cấu trúc hai * gián tiếp;.
Từ thứ hai tùy chọn giới hạn đặc điểm kỹ thuật cho các cấu trúc thông thường (thứ tự:) hoặc
cấu trúc chung (thể loại:). Cấu trúc chung hơi phức tạp để giải thích. Đối với C ++,
đây là những chuyên môn không rõ ràng của các lớp mẫu hoặc các lớp không phải mẫu
trong phạm vi trên. Các ngôn ngữ lập trình khác có các ngôn ngữ chung, nhưng
-femit-struct-debug-chi tiết chưa thực hiện chúng.
Từ thứ ba chỉ định các tệp nguồn cho các cấu trúc mà trình biên dịch
nên phát ra thông tin gỡ lỗi. Giá trị không ai và bất kì có nghĩa bình thường. Các
giá trị cơ sở có nghĩa là cơ sở tên của tệp trong đó khai báo kiểu
xuất hiện phải khớp với cơ sở của tên của tệp biên dịch chính. Trong thực tế,
điều này có nghĩa là khi biên dịch foo.c, thông tin gỡ lỗi được tạo cho các loại
được khai báo trong tệp đó và foo.h, nhưng không phải các tệp tiêu đề khác. Giá trị hệ thống có nghĩa
những loại thỏa mãn cơ sở hoặc được khai báo trong tiêu đề hệ thống hoặc trình biên dịch.
Bạn có thể cần thử nghiệm để xác định cài đặt tốt nhất cho ứng dụng của mình.
Mặc định là -femit-struct-debug-detail = all.
Tùy chọn này chỉ hoạt động với DWARF 2.
-fno-merge-debug-string
Hướng dẫn trình liên kết không hợp nhất các chuỗi với nhau trong thông tin gỡ lỗi
giống nhau trong các tệp đối tượng khác nhau. Việc hợp nhất không được hỗ trợ bởi tất cả các nhà lắp ráp hoặc
trình liên kết. Việc hợp nhất làm giảm kích thước của thông tin gỡ lỗi trong tệp đầu ra tại
chi phí tăng thời gian xử lý liên kết. Hợp nhất được bật theo mặc định.
-fdebug-prefix-map =xưa=mới
Khi biên dịch tệp trong thư mục xưa, ghi lại thông tin gỡ lỗi mô tả chúng là
in mới thay thế.
-fno-lùn2-cfi-asm
Gửi thông tin giải nén DWARF 2 dưới dạng phần ".eh_frame" do trình biên dịch tạo ra thay vì sử dụng
Các lệnh GAS ".cfi_ *".
-p Tạo mã bổ sung để viết thông tin hồ sơ phù hợp với chương trình phân tích
prof. Bạn phải sử dụng tùy chọn này khi biên dịch các tệp nguồn mà bạn muốn có dữ liệu,
và bạn cũng phải sử dụng nó khi liên kết.
-pg Tạo mã bổ sung để viết thông tin hồ sơ phù hợp với chương trình phân tích
gprof. Bạn phải sử dụng tùy chọn này khi biên dịch các tệp nguồn mà bạn muốn có dữ liệu,
và bạn cũng phải sử dụng nó khi liên kết.
-Q Làm cho trình biên dịch in ra từng tên hàm khi nó được biên dịch và in một số
thống kê về mỗi đường chuyền khi nó kết thúc.
-ftime-báo cáo
Làm cho trình biên dịch in một số thống kê về thời gian tiêu thụ của mỗi lần vượt qua khi nó
kết thúc
-fmem-báo cáo
Làm cho trình biên dịch in một số thống kê về cấp phát bộ nhớ vĩnh viễn khi nó
kết thúc
-fmem-báo cáo-wpa
Làm cho trình biên dịch in một số thống kê về cấp phát bộ nhớ vĩnh viễn cho WPA
chỉ giai đoạn.
-fpre-ipa-mem-báo cáo
-fpost-ipa-mem-báo cáo
Làm cho trình biên dịch in một số thống kê về cấp phát bộ nhớ vĩnh viễn trước hoặc
sau khi tối ưu hóa liên thủ tục.
-fprofile-báo cáo
Làm cho trình biên dịch in một số thống kê về tính nhất quán của hồ sơ (ước tính)
và hiệu quả của các đường chuyền cá nhân.
-fstack-sử dụng
Tạo thông tin sử dụng ngăn xếp đầu ra của trình biên dịch cho chương trình, trên mỗi chức năng
nền tảng. Tên tệp cho kết xuất được tạo bằng cách thêm vào .su đến tên phụ. tên phụ is
được tạo từ tên của tệp đầu ra, nếu được chỉ định rõ ràng và nó không phải là
có thể thực thi, nếu không thì nó là tên cơ sở của tệp nguồn. Một mục nhập được tạo thành từ
ba lĩnh vực:
· Tên của hàm.
· Một số byte.
· Một hoặc nhiều định tính: "tĩnh", "động", "giới hạn".
Định nghĩa "tĩnh" có nghĩa là hàm thao tác ngăn xếp một cách tĩnh: a
số byte cố định được phân bổ cho khung trên mục nhập hàm và được giải phóng vào
chức năng thoát; không có điều chỉnh ngăn xếp nào được thực hiện trong hàm. Thư hai
trường là số byte cố định này.
Bộ định tính "động" có nghĩa là hàm thao tác động ngăn xếp: in
ngoài phân bổ tĩnh được mô tả ở trên, các điều chỉnh ngăn xếp được thực hiện trong
phần thân của hàm, chẳng hạn để đẩy / bật đối số xung quanh các lệnh gọi hàm. Nếu
vòng loại "giới hạn" cũng có mặt, số lượng các điều chỉnh này bị giới hạn ở
thời gian biên dịch và trường thứ hai là giới hạn trên của tổng số lượng ngăn xếp được sử dụng
theo chức năng. Nếu nó không có mặt, số lượng các điều chỉnh này không bị giới hạn
tại thời điểm biên dịch và trường thứ hai chỉ đại diện cho phần bị giới hạn.
-fprofile-arc
Thêm mã để luồng chương trình vòng cung là công cụ. Trong quá trình thực hiện chương trình
ghi lại bao nhiêu lần mỗi nhánh và cuộc gọi được thực hiện và bao nhiêu lần nó được thực hiện
hoặc trả lại. Khi chương trình đã biên dịch thoát ra, nó sẽ lưu dữ liệu này vào một tệp có tên
auxname.gcda cho mỗi tệp nguồn. Dữ liệu có thể được sử dụng để hướng đến hồ sơ
tối ưu hóa (-fbranch-xác suất), hoặc để phân tích phạm vi kiểm tra
(-phải bảo hiểm tốt nhất). Mỗi tệp đối tượng của tên phụ được tạo ra từ tên của
tệp đầu ra, nếu được chỉ định rõ ràng và nó không phải là tệp thực thi cuối cùng, nếu không
là tên cơ sở của tệp nguồn. Trong cả hai trường hợp, bất kỳ hậu tố nào cũng bị loại bỏ (ví dụ:
foo.gcda cho tập tin đầu vào dir / foo.c, hoặc là dir / foo.gcda cho tệp đầu ra được chỉ định là -o
dir / foo.o).
--phủ sóng
Tùy chọn này được sử dụng để biên dịch và liên kết mã được thiết kế để phân tích phạm vi. Các
option là một từ đồng nghĩa với -fprofile-arc -phải bảo hiểm tốt nhất (khi biên dịch) và -lgcov
(khi liên kết). Xem tài liệu về các tùy chọn đó để biết thêm chi tiết.
· Biên dịch các tệp nguồn với -fprofile-arc cộng với tối ưu hóa và tạo mã
tùy chọn. Để phân tích phạm vi kiểm tra, hãy sử dụng phần bổ sung -phải bảo hiểm tốt nhất tùy chọn.
Bạn không cần phải lập hồ sơ mọi tệp nguồn trong một chương trình.
· Liên kết các tệp đối tượng của bạn với -lgcov or -fprofile-arc (cái sau ngụ ý
trước).
· Chạy chương trình trên một khối lượng công việc đại diện để tạo hồ sơ hồ quang
thông tin. Điều này có thể được lặp lại bất kỳ số lần nào. Bạn có thể chạy đồng thời
phiên bản chương trình của bạn và với điều kiện là hệ thống tệp hỗ trợ khóa,
các tệp dữ liệu sẽ được cập nhật chính xác. Ngoài ra, các cuộc gọi "rẽ nhánh" cũng được phát hiện và
được xử lý chính xác (đếm hai lần sẽ không xảy ra).
· Để tối ưu hóa theo hướng cấu hình, hãy biên dịch lại các tệp nguồn với cùng một
các tùy chọn tối ưu hóa và tạo mã cộng với -fbranch-xác suất.
· Để phân tích phạm vi kiểm tra, hãy sử dụng gcov để tạo ra thông tin con người có thể đọc được từ
các .gcno và .gcda các tập tin. Tham khảo đến gcov tài liệu để biết thêm
thông tin.
Với -fprofile-arc, đối với mỗi chức năng trong chương trình của bạn, GCC tạo ra một luồng chương trình
đồ thị, sau đó tìm một cây bao trùm cho đồ thị. Chỉ những vòng cung không nằm trên
cây bao trùm phải được bổ sung: trình biên dịch thêm mã để đếm số lượng
thời gian mà các cung này được thực thi. Khi một vòng cung là lối ra duy nhất hoặc lối vào duy nhất để
một khối, mã thiết bị đo lường có thể được thêm vào khối; nếu không, một cơ bản mới
khối phải được tạo để giữ mã thiết bị đo.
-phải bảo hiểm tốt nhất
Tạo một tệp ghi chú mà gcov tiện ích bao phủ mã có thể sử dụng để hiển thị chương trình
phủ sóng. Mỗi tệp ghi chú của tệp nguồn được gọi là auxname.gcno. Tham khảo đến
-fprofile-arc tùy chọn ở trên để mô tả về tên phụ và hướng dẫn về cách
tạo dữ liệu vùng bao phủ thử nghiệm. Dữ liệu bao phủ khớp với các tệp nguồn chặt chẽ hơn nếu
bạn không tối ưu hóa.
-fdbg-cnt-list
In tên và giới hạn trên của bộ đếm cho tất cả các bộ đếm gỡ lỗi.
-fdbg-cnt =danh sách phản giá trị
Đặt giới hạn trên của bộ đếm gỡ lỗi nội bộ. danh sách phản giá trị được phân tách bằng dấu phẩy
danh sách của tên:giá trị các cặp đặt giới hạn trên của mỗi bộ đếm gỡ lỗi tên đến
giá trị. Tất cả các bộ đếm gỡ lỗi có giới hạn trên ban đầu là "UINT_MAX"; do đó
"dbg_cnt ()" luôn trả về true trừ khi giới hạn trên được đặt bởi tùy chọn này. Vì
ví dụ, với -fdbg-cnt = dce: 10, tail_call: 0, "dbg_cnt (dce)" chỉ trả về true cho đầu tiên
10 lời kêu gọi.
-có thể-loại-vượt qua
-fdisable-loại-vượt qua=danh sách phạm vi
Đây là một tập hợp các tùy chọn được sử dụng để tắt / bật tối ưu hóa một cách rõ ràng
vượt qua. Các tùy chọn này nhằm mục đích sử dụng để gỡ lỗi GCC. Người dùng trình biên dịch nên
thay vào đó hãy sử dụng các tùy chọn thông thường để bật / tắt đường chuyền.
-fdisable-ipa-vượt qua
Tắt IPA pass vượt qua. vượt qua là tên vượt qua. Nếu cùng một pass là tĩnh
được gọi trong trình biên dịch nhiều lần, tên mật khẩu phải được thêm vào
số thứ tự bắt đầu từ 1.
-fdisable-rtl-vượt qua
-fdisable-rtl-vượt qua=danh sách phạm vi
Tắt thẻ RTL vượt qua. vượt qua là tên vượt qua. Nếu cùng một pass là tĩnh
được gọi trong trình biên dịch nhiều lần, tên mật khẩu phải được thêm vào
số thứ tự bắt đầu từ 1. danh sách phạm vi là một danh sách được phân tách bằng dấu phẩy về
phạm vi chức năng hoặc tên trình hợp dịch. Mỗi phạm vi là một cặp số được phân tách bằng dấu
Đại tràng. Phạm vi được bao gồm ở cả hai đầu. Nếu phạm vi nhỏ, số
cặp có thể được đơn giản hóa thành một số duy nhất. Nếu nút gọi đồ thị của hàm
uid nằm trong một trong các phạm vi được chỉ định, vượt qua bị vô hiệu hóa vì điều đó
chức năng. Các uid được hiển thị trong tiêu đề hàm của tệp kết xuất và đường
tên có thể được kết xuất bằng cách sử dụng tùy chọn -fdump-pass.
-fdisable-cây-vượt qua
-fdisable-cây-vượt qua=danh sách phạm vi
Tắt pass cây vượt qua. Thấy -fdisable-rtl cho mô tả của tùy chọn
lập luận.
-fenable-ipa-vượt qua
Bật IPA pass vượt qua. vượt qua là tên vượt qua. Nếu cùng một pass là tĩnh
được gọi trong trình biên dịch nhiều lần, tên mật khẩu phải được thêm vào
số thứ tự bắt đầu từ 1.
-fenable-rtl-vượt qua
-fenable-rtl-vượt qua=danh sách phạm vi
Bật thẻ RTL vượt qua. Thấy -fdisable-rtl cho mô tả đối số tùy chọn và
ví dụ.
-fenable-cây-vượt qua
-fenable-cây-vượt qua=danh sách phạm vi
Cho phép vượt qua cây vượt qua. Thấy -fdisable-rtl để mô tả các đối số tùy chọn.
Dưới đây là một số ví dụ cho thấy việc sử dụng các tùy chọn này.
# vô hiệu hóa ccp1 cho tất cả các chức năng
-fdisable-cây-ccp1
# vô hiệu hóa hoàn toàn hủy đăng ký đối với chức năng có uid nút cgraph là 1
-fenable-tree-cunroll = 1
# vô hiệu hóa gcse2 cho các chức năng ở các phạm vi sau [1,1],
# [300,400] và [400,1000]
# vô hiệu hóa gcse2 cho các chức năng foo và foo2
-fdisable-rtl-gcse2 = foo, foo2
# tắt nội tuyến sớm
-fdisable-cây-einline
# vô hiệu hóa nội tuyến ipa
-fdisable-ipa-inline
# enable tree unroll full
-fenable-tree-unroll
-dbức thư
-fdump-rtl-vượt qua
-fdump-rtl-vượt qua=tên tập tin
Nói cách tạo kết xuất gỡ lỗi trong quá trình biên dịch vào những thời điểm được chỉ định bởi bức thư. Điều này
được sử dụng để gỡ lỗi các đường chuyền dựa trên RTL của trình biên dịch. Tên tệp cho hầu hết
của bãi rác được thực hiện bằng cách thêm một số vượt qua và một từ vào tên bãi rác, và
tệp được tạo trong thư mục của tệp đầu ra. Trong trường hợp =tên tập tin Tùy chọn,
kết xuất được xuất trên tệp nhất định thay vì các tệp kết xuất được đánh số vượt qua. Ghi chú
rằng số thẻ vượt qua được tính toán tĩnh khi thẻ vượt qua được đăng ký vào thẻ
người quản lý. Do đó, việc đánh số không liên quan đến thứ tự động thực thi của
vượt qua. Đặc biệt, một thẻ được cài đặt bởi một plugin có thể có số lượng trên 200
nếu nó được thực thi khá sớm. tên bãi rác được tạo từ tên của tệp đầu ra,
nếu được chỉ định rõ ràng và nó không phải là tệp thực thi, nếu không nó là tên cơ sở của
tệp nguồn. Các công tắc này có thể có các hiệu ứng khác nhau khi -E được sử dụng để
sơ chế.
Kết xuất gỡ lỗi có thể được bật bằng -fdump-rtl chuyển đổi hoặc một số -d tùy chọn bức thư. Đây
là những chữ cái có thể sử dụng trong vượt qua và bức thưvà ý nghĩa của chúng:
-fdump-rtl-căn chỉnh
Kết xuất sau khi căn chỉnh nhánh đã được tính toán.
-fdump-rtl-asmcons
Kết xuất sau khi sửa các câu lệnh rtl có các ràng buộc vào / ra không thỏa mãn.
-fdump-rtl-auto_inc_dec
Bán phá giá sau khi phát hiện tự động có mã. Thẻ này chỉ chạy trên các kiến trúc
có hướng dẫn auto inc hoặc auto dec.
-fdump-rtl-rào cản
Đổ sau khi làm sạch các hướng dẫn của rào cản.
-fdump-rtl-bbpart
Đổ sau khi phân vùng khối cơ bản nóng và lạnh.
-fdump-rtl-bbro
Bán phá giá sau khi sắp xếp lại khối.
-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 và -fdump-rtl-btl2 cho phép kết xuất sau mục tiêu hai nhánh
tải tối ưu hóa vượt qua.
-fdump-rtl-bỏ qua
Bán phá giá sau khi bỏ qua bước nhảy và kiểm soát tối ưu hóa luồng.
-fdump-rtl-kết hợp
Bán phá giá sau khi vượt qua tổ hợp lệnh RTL.
-fdump-rtl-compgotos
Bán phá giá sau khi sao chép các gotos được tính toán.
-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2và -fdump-rtl-ce3 cho phép bán phá giá sau ba
nếu chuyển đổi vượt qua.
-fdump-rtl-cprop_hardreg
Bán phá giá sau khi truyền bản sao đăng ký cứng.
-fdump-rtl-csa
Bán phá giá sau khi kết hợp các điều chỉnh ngăn xếp.
-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 và -fdump-rtl-cse2 cho phép bán phá giá sau hai cái chung
loại bỏ biểu thức con vượt qua.
-fdump-rtl-dce
Bán phá giá sau khi loại bỏ mã chết độc lập trôi qua.
-fdump-rtl-dbr
Bán phá giá sau khi lập lịch chi nhánh bị trì hoãn.
-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 và -fdump-rtl-dce2 cho phép bán phá giá sau khi hai cửa hàng chết
loại bỏ vượt qua.
-fdump-rtl-ơ
Bán phá giá sau khi hoàn thiện mã xử lý EH.
-fdump-rtl-eh_ranges
Bán phá giá sau khi chuyển đổi vùng phạm vi xử lý EH.
-fdump-rtl-mở rộng
Bán phá giá sau khi tạo RTL.
-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 và -fdump-rtl-fwprop2 cho phép bán phá giá sau khi cả hai chuyển tiếp
lan truyền đi qua.
-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 và -fdump-rtl-gcse2 cho phép bán phá giá sau phổ biến toàn cầu
loại bỏ biểu thức con.
-fdump-rtl-init-regs
Kết xuất sau khi khởi tạo sổ đăng ký.
-fdump-rtl-initval
Kết xuất sau khi tính toán các bộ giá trị ban đầu.
-fdump-rtl-into_cfglayout
Bán phá giá sau khi chuyển đổi sang chế độ cfglayout.
-fdump-rtl-ira
Kết xuất sau khi cấp phát thanh ghi lặp lại.
-fdump-rtl-nhảy
Bán phá giá sau lần tối ưu hóa bước thứ hai.
-fdump-rtl-loop2
-fdump-rtl-loop2 cho phép kết xuất sau khi quá trình tối ưu hóa vòng lặp rtl vượt qua.
-fdump-rtl-mach
Bán phá giá sau khi thực hiện vượt qua tổ chức lại phụ thuộc vào máy, nếu vượt qua
tồn tại.
-fdump-rtl-mode_sw
Bán phá giá sau khi loại bỏ các công tắc chế độ thừa.
-fdump-rtl-rnreg
Dump sau khi đánh số lại thanh ghi.
-fdump-rtl-outof_cfglayout
Bán phá giá sau khi chuyển đổi từ chế độ cfglayout.
-fdump-rtl-lỗ nhìn trộm2
Bán phá giá sau khi lọt qua lỗ nhòm.
-fdump-rtl-postreload
Kết xuất sau khi tối ưu hóa sau tải lại.
-fdump-rtl-pro_and_epilogue
Bán phá giá sau khi tạo phần mở đầu chức năng và phần kết.
-fdump-rtl-regmove
Bán phá giá sau khi vượt qua di chuyển đăng ký.
-fdump-rtl-Schedule1
-fdump-rtl-Schedule2
-fdump-rtl-Schedule1 và -fdump-rtl-Schedule2 cho phép kết xuất sau khối cơ bản
vượt qua lịch trình.
-fdump-rtl-xem
Bán phá giá sau khi loại bỏ phần mở rộng đăng ký.
-fdump-rtl-seqabstr
Bán phá giá sau khi khám phá trình tự chung.
-fdump-rtl-rút ngắn
Bán phá giá sau khi cắt ngắn các nhánh.
-fdump-rtl-anh chị em
Dump sau khi tối ưu hóa cuộc gọi anh chị em.
-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 và
-fdump-rtl-split5 cho phép kết xuất sau năm vòng phân tách lệnh.
-fdump-rtl-sms
Bán phá giá sau khi lên lịch modulo. Thẻ này chỉ chạy trên một số kiến trúc.
-fdump-rtl-ngăn xếp
Dump sau khi chuyển đổi từ "tệp đăng ký phẳng" của GCC đăng ký thành x87's
các thanh ghi giống ngăn xếp. Thẻ này chỉ chạy trên các biến thể x86.
-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 và -fdump-rtl-subreg2 cho phép bán phá giá sau hai tiểu khu vực
mở rộng vượt qua.
-fdump-rtl-không chia sẻ
Bán phá giá sau khi tất cả rtl đã được hủy chia sẻ.
-fdump-rtl-vartrack
Bán phá giá sau khi theo dõi biến đổi.
-fdump-rtl-vregs
Dump sau khi chuyển đổi thanh ghi ảo thành thanh ghi cứng.
-fdump-rtl-web
Bán phá giá sau khi tách phạm vi trực tiếp.
-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Các kết xuất này được xác định nhưng luôn tạo ra các tệp trống.
-in
-fdump-rtl-tất cả
Sản xuất tất cả các bãi thải được liệt kê ở trên.
-dA Chú thích đầu ra của trình hợp dịch với thông tin gỡ lỗi khác.
-dD Kết xuất tất cả các định nghĩa macro, khi kết thúc tiền xử lý, ngoài định nghĩa bình thường
đầu ra.
-dH Tạo ra một kết xuất lõi bất cứ khi nào có lỗi xảy ra.
-dp Chú thích đầu ra của trình hợp dịch với một nhận xét cho biết mẫu nào và
thay thế được sử dụng. Độ dài của mỗi lệnh cũng được in.
-dP Đưa RTL vào đầu ra của trình hợp dịch dưới dạng nhận xét trước mỗi lệnh. Cũng
bật lên -dp chú thích.
-dx Chỉ cần tạo RTL cho một hàm thay vì biên dịch nó. Thường được sử dụng với
-fdump-rtl-mở rộng.
-fdump-noaddr
Khi thực hiện gỡ lỗi kết xuất, hãy chặn đầu ra địa chỉ. Điều này làm cho nó khả thi hơn
sử dụng diff khi gỡ lỗi kết xuất cho các lệnh gọi trình biên dịch với các tệp nhị phân trình biên dịch khác nhau
và / hoặc các vị trí bắt đầu văn bản / bss / data / heap / stack / dso khác nhau.
-fdump-không đánh số
Khi thực hiện gỡ lỗi kết xuất, hãy loại bỏ số lệnh và đầu ra địa chỉ. Cái này
làm cho nó khả thi hơn khi sử dụng diff khi gỡ lỗi kết xuất cho các lệnh gọi trình biên dịch với
các tùy chọn khác nhau, cụ thể là có và không có -g.
-fdump-unnered-links
Khi thực hiện gỡ lỗi kết xuất (xem -d tùy chọn trên), loại bỏ số hướng dẫn cho
liên kết đến các hướng dẫn trước đó và tiếp theo theo một trình tự.
-fdump-dịch-đơn vị (Chỉ C ++)
-fdump-dịch-đơn vị-lựa chọn (Chỉ C ++)
Đưa một biểu diễn của cấu trúc cây cho toàn bộ đơn vị dịch vào một tệp.
Tên tệp được tạo bằng cách thêm vào .Bạn đến tên tệp nguồn và tệp là
được tạo trong cùng thư mục với tệp đầu ra. Nếu -lựa chọn biểu mẫu được sử dụng,
lựa chọn kiểm soát các chi tiết của bãi chứa như được mô tả cho -fdump-cây tùy chọn.
-fdump-class-phân cấp (Chỉ C ++)
-fdump-class-phân cấp-lựa chọn (Chỉ C ++)
Kết xuất một biểu diễn của cấu trúc phân cấp và bố cục bảng chức năng ảo của mỗi lớp vào một
tập tin. Tên tệp được tạo bằng cách thêm vào .lớp học đến tên tệp nguồn và tệp
được tạo trong cùng thư mục với tệp đầu ra. Nếu -lựa chọn biểu mẫu được sử dụng,
lựa chọn kiểm soát các chi tiết của bãi chứa như được mô tả cho -fdump-cây tùy chọn.
-fdump-ipa-chuyển đổi
Kiểm soát việc bán phá giá ở các giai đoạn khác nhau của cây ngôn ngữ phân tích liên thủ tục để
tập tin. Tên tệp được tạo bằng cách thêm một hậu tố cụ thể của switch vào nguồn
tên tệp và tệp được tạo trong cùng thư mục với tệp đầu ra. Các
các bãi sau có thể xảy ra:
tất cả các Bật tất cả kết xuất phân tích liên thủ tục.
sơ đồ
Kết xuất thông tin về tối ưu hóa biểu đồ cuộc gọi, loại bỏ chức năng không sử dụng và
các quyết định nội tuyến.
nội tuyến
Bán phá giá sau khi nội tuyến chức năng.
-fdump-pass
Kết xuất danh sách các thẻ tối ưu hóa được bật và tắt bởi hiện tại
các tùy chọn dòng lệnh.
-fdump-thống kê-tùy chọn
Kích hoạt và kiểm soát kết xuất các thống kê vượt qua trong một tệp riêng biệt. Tên tệp là
được tạo bằng cách thêm một hậu tố kết thúc bằng .số liệu thống kê đến tên tệp nguồn và
tệp được tạo trong cùng thư mục với tệp đầu ra. Nếu -tùy chọn hình thức là
đã sử dụng, -số liệu thống kê khiến bộ đếm được tổng hợp trên toàn bộ đơn vị biên dịch trong khi
-chi tiết loại bỏ mọi sự kiện khi các đường chuyền tạo ra chúng. Mặc định không có tùy chọn là
để tính tổng cho mỗi hàm được biên dịch.
-fdump-cây-chuyển đổi
-fdump-cây-chuyển đổi-lựa chọn
-fdump-cây-chuyển đổi-lựa chọn=tên tập tin
Kiểm soát việc kết xuất ở các giai đoạn khác nhau của quá trình xử lý cây ngôn ngữ trung gian để
một tập tin. Tên tệp được tạo bằng cách thêm hậu tố dành riêng cho công tắc vào
tên tệp nguồn và tệp được tạo trong cùng thư mục với tệp đầu ra. Trong
trường hợp =tên tập tin tùy chọn, kết xuất được xuất trên tệp nhất định thay vì tự động
các tệp kết xuất được đặt tên. Nếu -lựa chọn biểu mẫu được sử dụng, lựa chọn là một danh sách - ly thân
các tùy chọn kiểm soát các chi tiết của bãi chứa. Không phải tất cả các tùy chọn đều có thể áp dụng cho tất cả
bãi rác; những cái không có ý nghĩa bị bỏ qua. Lựa chọn tiếp theo đã khả thi
địa chỉ
In địa chỉ của mỗi nút. Thông thường điều này không có ý nghĩa vì nó thay đổi
theo môi trường và tệp nguồn. Công dụng chính của nó là để buộc một
kết xuất tệp với một môi trường gỡ lỗi.
tên asm
Nếu "DECL_ASSEMBLER_NAME" đã được đặt cho một khai báo nhất định, hãy sử dụng khai báo đó trong kết xuất
thay vì "DECL_NAME". Công dụng chính của nó là dễ sử dụng, làm việc ngược lại từ
tên bị xáo trộn trong tệp hợp ngữ.
mảnh khảnh
Khi bán phá giá các đại diện trung gian phía trước, hãy hạn chế việc bán phá giá các thành viên của
phạm vi hoặc nội dung của một chức năng chỉ vì phạm vi đó đã được đạt đến. Chỉ một
kết xuất các mục như vậy khi chúng có thể truy cập trực tiếp bằng một số đường dẫn khác.
Khi kết xuất các cây in đẹp, tùy chọn này ngăn chặn việc bán các phần thân của
Cấu trúc điều khiển.
Khi kết xuất RTL, hãy in RTL ở dạng mảnh (cô đọng) thay vì mặc định
Biểu diễn giống LISP.
nguyên In bản đại diện thô của cây. Theo mặc định, cây được in đẹp thành
một biểu diễn giống C.
chi tiết
Kích hoạt kết xuất chi tiết hơn (không được đáp ứng bởi mọi tùy chọn kết xuất). Cũng bao gồm
thông tin từ việc tối ưu hóa vượt qua.
số liệu thống kê
Cho phép kết xuất các số liệu thống kê khác nhau về đường chuyền (không được chấp nhận bởi mọi kết xuất
Tùy chọn).
khối
Cho phép hiển thị ranh giới khối cơ bản (bị vô hiệu hóa trong kết xuất thô).
đồ thị
Đối với từng tệp kết xuất được chỉ định khác (-fdump-rtl-vượt qua), đổ một
biểu diễn của biểu đồ luồng điều khiển phù hợp để xem với GraphViz để
tập tin.passid.pass.dot. Mỗi hàm trong tệp được in đẹp như một biểu đồ con,
để GraphViz có thể hiển thị tất cả chúng trong một biểu đồ duy nhất.
Tùy chọn này hiện chỉ hoạt động đối với kết xuất RTL và RTL luôn được kết xuất trong
hình thức mỏng.
vó ngựa
Cho phép hiển thị các toán hạng ảo cho mọi câu lệnh.
vải lanh
Cho phép hiển thị số dòng cho các câu lệnh.
uid Cho phép hiển thị ID duy nhất ("DECL_UID") cho mỗi biến.
dài dòng
Cho phép hiển thị kết xuất cây cho mỗi câu lệnh.
eh Cho phép hiển thị số vùng EH giữ mỗi câu lệnh.
quyền trượng
Cho phép hiển thị chi tiết phân tích tiến hóa vô hướng.
tối ưu hóa
Cho phép hiển thị thông tin tối ưu hóa (chỉ khả dụng trong một số lần vượt qua).
nhỡ
Bật hiển thị thông tin tối ưu hóa bị bỏ lỡ (chỉ khả dụng trong một số lần vượt qua).
ghi chú
Bật thông tin tối ưu hóa chi tiết khác (chỉ có sẵn trong một số lần vượt qua).
=tên tập tin
Thay vì tệp kết xuất được đặt tên tự động, hãy xuất thành tên tệp đã cho. Tập tin
tên tiêu chuẩn và tiêu chuẩn được đối xử đặc biệt và được coi là đã mở
các luồng tiêu chuẩn. Ví dụ,
gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks = foo.dump
-fdump-tree-pre = stderr file.c
đầu ra vectorizer kết xuất vào foo.dump, trong khi kết xuất TRƯỚC được xuất thành tiêu chuẩn.
Nếu hai tên tệp kết xuất xung đột được cấp cho cùng một lần vượt qua, thì
tùy chọn ghi đè tùy chọn trước đó.
tất cả các Bật tất cả các tùy chọn, ngoại trừ nguyên, mảnh khảnh, dài dòng và vải lanh.
lựa chọn
Bật tất cả các tùy chọn tối ưu hóa, tức là tối ưu hóa, nhỡvà ghi.
Có thể có những bãi cây sau:
nguyên
Bán phá giá trước bất kỳ tối ưu hóa dựa trên cây nào, để tập tin. original.
tối ưu hóa
Kết xuất sau khi tối ưu hóa tất cả dựa trên cây, để tập tin.optimized.
giẻ rách
Kết xuất từng chức năng trước và sau khi chuyển gimplification vào một tệp. Tập tin
tên được tạo ra bằng cách thêm vào .gimple đến tên tệp nguồn.
cfg Kết xuất đồ thị luồng điều khiển của từng chức năng vào một tệp. Tên tệp được tạo bởi
nối thêm .cfg đến tên tệp nguồn.
ch Kết xuất từng hàm sau khi sao chép tiêu đề vòng lặp. Tên tệp được tạo bằng cách thêm vào
.ch đến tên tệp nguồn.
ssa Kết xuất thông tin liên quan đến SSA vào một tệp. Tên tệp được tạo bằng cách thêm vào .ssa
đến tên tệp nguồn.
bí danh
Kết xuất thông tin răng cưa cho mỗi chức năng. Tên tệp được tạo bằng cách thêm vào
.bí danh đến tên tệp nguồn.
ccp Bán phá giá mỗi chức năng sau CCP. Tên tệp được tạo bằng cách thêm vào .ccp đến
tên tệp nguồn.
cửa hàngccp
Bán phá giá mỗi chức năng sau khi CỬA HÀNG-CCP. Tên tệp được tạo bằng cách thêm vào .storeccp
đến tên tệp nguồn.
trước Bán cây sau khi loại bỏ một phần dư thừa. Tên tệp được tạo bởi
nối thêm .pre đến tên tệp nguồn.
fre Đổ cây sau khi loại bỏ hoàn toàn dư thừa. Tên tệp được tạo bằng cách thêm vào
.fre đến tên tệp nguồn.
sao chép
Đổ cây sau khi sao chép nhân giống. Tên tệp được tạo bằng cách thêm vào .copyprop
đến tên tệp nguồn.
cửa hàng_copyprop
Bán cây sau khi nhân giống sao chép tại cửa hàng. Tên tệp được tạo bằng cách thêm vào
.store_copyprop đến tên tệp nguồn.
dce Kết xuất mỗi chức năng sau khi loại bỏ mã chết. Tên tệp được tạo bởi
nối thêm .dce đến tên tệp nguồn.
vạt bùn
Đổ từng chức năng sau khi thêm thiết bị đo bùn. Tên tệp được tạo bởi
nối thêm .vạt bùn đến tên tệp nguồn.
Ông bà Kết xuất mỗi hàm sau khi thực hiện thay thế tổng hợp vô hướng. Tập tin
tên được tạo ra bằng cách thêm vào .sra đến tên tệp nguồn.
bồn rửa
Kết xuất từng chức năng sau khi thực hiện chìm mã. Tên tệp được tạo bởi
nối thêm .bồn rửa đến tên tệp nguồn.
ban cho Hủy bỏ từng chức năng sau khi áp dụng tối ưu hóa cây thống trị. Tên tệp là
được thực hiện bằng cách nối .dom đến tên tệp nguồn.
dse Hủy bỏ từng chức năng sau khi áp dụng loại bỏ cửa hàng chết. Tên tệp được thực hiện
bằng cách thêm vào .dse đến tên tệp nguồn.
phiopt
Kết xuất mỗi chức năng sau khi tối ưu hóa các nút PHI thành mã đường thẳng. Tập tin
tên được tạo ra bằng cách thêm vào .phiopt đến tên tệp nguồn.
chống đỡ
Kết xuất từng hàm sau khi truyền chuyển tiếp các biến sử dụng đơn lẻ. Tên tập tin
được thực hiện bằng cách thêm vào .forwprop đến tên tệp nguồn.
đổi tên
Hủy bỏ từng chức năng sau khi áp dụng tối ưu hóa đổi tên bản sao. Tên tệp là
được thực hiện bằng cách nối .copyrename đến tên tệp nguồn.
nrv Kết xuất mỗi hàm sau khi áp dụng tối ưu hóa giá trị trả về đã đặt tên trên chung
cây. Tên tệp được tạo bằng cách thêm vào .nrv đến tên tệp nguồn.
véc tơ
Kết xuất từng hàm sau khi áp dụng vectơ hóa các vòng lặp. Tên tệp được thực hiện
bằng cách thêm vào .vect đến tên tệp nguồn.
trượt Kết xuất mỗi chức năng sau khi áp dụng vectơ hóa các khối cơ bản. Tên tệp là
được thực hiện bằng cách nối .slp đến tên tệp nguồn.
VRP Kết xuất từng chức năng sau khi Truyền phạm vi giá trị (VRP). Tên tệp được tạo bởi
nối thêm .vrp đến tên tệp nguồn.
tất cả các Kích hoạt tất cả các kết xuất cây có sẵn với các cờ được cung cấp trong tùy chọn này.
-fopt-thông tin
-fopt-thông tin-lựa chọn
-fopt-thông tin-lựa chọn=tên tập tin
Kiểm soát kết xuất tối ưu hóa từ các lần vượt qua tối ưu hóa khác nhau. Nếu -lựa chọn hình thức là
đã sử dụng, lựa chọn là một danh sách - các tùy chọn riêng biệt để chọn chi tiết kết xuất và
tối ưu hóa. Nếu như lựa chọn không được chỉ định, nó mặc định là tất cả các để biết chi tiết và lựa chọn
cho các nhóm tối ưu hóa. Nếu tên tập tin không được chỉ định, nó mặc định là tiêu chuẩn. Ghi chú
rằng đầu ra tên tập tin sẽ được ghi đè trong trường hợp có nhiều đơn vị dịch. Nếu như
mong muốn một đầu ra kết hợp từ nhiều đơn vị dịch, tiêu chuẩn nên được sử dụng
thay thế.
Các tùy chọn có thể được chia thành hai nhóm, 1) các tùy chọn mô tả tính chi tiết của
kết xuất và 2) các tùy chọn mô tả những tối ưu hóa nào nên được bao gồm. Các tùy chọn
từ cả hai nhóm có thể được trộn tự do vì chúng không chồng chéo. Tuy nhiên, trong trường hợp
của bất kỳ xung đột nào, các tùy chọn sau sẽ ghi đè các tùy chọn trước đó trên dòng lệnh.
Mặc dù nhiều tùy chọn -fopt-thông tin được chấp nhận, nhưng chỉ một trong số chúng có thể có = tên tệp.
Nếu các tên tệp khác được cung cấp thì tất cả trừ tên đầu tiên sẽ bị bỏ qua.
Độ dài kết xuất có các tùy chọn sau
tối ưu hóa
In thông tin khi áp dụng tối ưu hóa thành công. Nó là tùy thuộc vào một vượt qua
để quyết định thông tin nào có liên quan. Ví dụ, vectorizer chuyển bản in
vị trí nguồn của các vòng lặp đã được vectơ hóa thành công.
nhỡ
In thông tin về các tối ưu hóa bị bỏ lỡ. Kiểm soát đường chuyền cá nhân
thông tin cần đưa vào đầu ra. Ví dụ,
gcc -O2 -ftree-vectorize -fopt-info-vec-miss
sẽ in thông tin về các cơ hội tối ưu hóa bị bỏ lỡ do vector hóa
chuyển trên stderr.
ghi
In thông tin chi tiết về tối ưu hóa, chẳng hạn như một số biến đổi nhất định,
thông báo chi tiết hơn về các quyết định, v.v.
tất cả các In thông tin chi tiết về tối ưu hóa. Điêu nay bao gôm tối ưu hóa, nhỡvà
ghi.
Bộ tùy chọn thứ hai mô tả một nhóm tối ưu hóa và có thể bao gồm một hoặc
nhiều điều sau đây.
ipa Bật kết xuất từ tất cả các tối ưu hóa liên thủ tục.
vòng lặp
Bật kết xuất từ tất cả các tối ưu hóa vòng lặp.
nội tuyến
Bật kết xuất từ tất cả các tối ưu hóa nội tuyến.
vec Bật kết xuất từ tất cả các tối ưu hóa vectơ.
Ví dụ,
gcc -O3 -fopt-info-miss = miss.all
xuất ra báo cáo tối ưu hóa bị thiếu từ tất cả các lần chuyển vào miss.all.
Như một ví dụ khác,
gcc -O3 -fopt-info-inline-Optimizer-miss = inline.txt
sẽ xuất ra thông tin về các tối ưu hóa bị bỏ lỡ cũng như các vị trí được tối ưu hóa từ
tất cả các nội tuyến đi vào nội tuyến.txt.
Nếu tên tập tin được cung cấp, sau đó kết xuất từ tất cả các tối ưu hóa hiện hành là
nối vào tên tập tin. Nếu không, kết xuất được xuất lên tiêu chuẩn. Nếu lựa chọn
bị bỏ qua, nó mặc định là tất cả đều chọn, có nghĩa là kết xuất tất cả các tối ưu hóa có sẵn
thông tin từ tất cả các lần vượt qua. Trong ví dụ sau, tất cả thông tin tối ưu hóa được xuất trên
đến tiêu chuẩn.
gcc -O3 -fopt-thông tin
Lưu ý rằng -fopt-info-vec-miss cư xử giống như -fopt-info-miss-vec.
Như một ví dụ khác, hãy xem xét
gcc -fopt-info-vec-miss = vec.miss -fopt-info-loop-Optimized = loop.opt
Đây là hai tên tệp đầu ra vec.miss và vòng lặp.opt đang xung đột vì chỉ có một
tệp đầu ra được cho phép. Trong trường hợp này, chỉ có tùy chọn đầu tiên có hiệu lực và
các tùy chọn tiếp theo bị bỏ qua. Vì vậy, chỉ có vec.miss được sản xuất mà sơn
đổ lỗi cho vector về các cơ hội bị bỏ lỡ.
-ftree-vectorizer-verbose =n
Tùy chọn này không được dùng nữa và được triển khai trong điều kiện -fopt-thông tin. Hãy sử dụng
-fopt-thông tin-loại thay vào đó, ở đâu loại là một trong những tùy chọn chọn thông tin hợp lệ. Nó
in thông tin tối ưu hóa bổ sung. Vì n= 0 không có thông tin chẩn đoán là
đã báo cáo. Nếu như n= 1 trình vectơ báo cáo từng vòng lặp đã được vectơ hóa và tổng số
số vòng lặp đã được vector hóa. Nếu như n= 2 trình vectơ báo cáo các vị trí
không thể được vectơ hóa và lý do cho những điều đó. Đối với bất kỳ mức độ chi tiết cao hơn, tất cả
thông tin phân tích và chuyển đổi từ máy vectơ được báo cáo.
Lưu ý rằng thông tin xuất ra bởi -ftree-vectorizer-dài dòng tùy chọn được gửi đến
tiêu chuẩn. Nếu hình thức tương đương -fopt-thông tin-lựa chọn=tên tập tin được sử dụng thì đầu ra là
gửi vào tên tập tin thay thế.
-frandom-seed =chuỗi
Tùy chọn này cung cấp một hạt giống mà GCC sử dụng thay cho các số ngẫu nhiên trong việc tạo
các tên ký hiệu nhất định phải khác nhau trong mọi tệp đã biên dịch. Nó cũng là
được sử dụng để đặt các tem duy nhất trong các tệp dữ liệu phạm vi và các tệp đối tượng tạo ra
họ. Bạn có thể dùng -fradom-hạt giống tùy chọn để tạo ra đối tượng giống hệt nhau
các tập tin.
Sản phẩm chuỗi sẽ khác nhau đối với mọi tệp bạn biên dịch.
-fsched-verbose =n
Trên các mục tiêu sử dụng lập lịch hướng dẫn, tùy chọn này kiểm soát lượng
gỡ lỗi xuất bản in bộ lập lịch. Thông tin này được ghi vào lỗi tiêu chuẩn,
trừ khi -fdump-rtl-Schedule1 or -fdump-rtl-Schedule2 được chỉ định, trong trường hợp đó nó là đầu ra
vào tệp danh sách kết xuất thông thường, .schedi1 or .schedi2 tương ứng. Tuy nhiên đối với n
lớn hơn chín, đầu ra luôn được in với lỗi tiêu chuẩn.
Trong n lớn hơn XNUMX, -sched-verbose xuất ra thông tin giống như
-fdump-rtl-Schedule1 và -fdump-rtl-Schedule2. Đối với n lớn hơn một, nó cũng xuất ra cơ bản
xác suất khối, thông tin danh sách sẵn sàng chi tiết và thông tin đơn vị / đơn vị. Vì n
lớn hơn hai, nó bao gồm RTL tại điểm hủy bỏ, luồng điều khiển và thông tin khu vực. Và
cho n trên bốn, -sched-verbose cũng bao gồm thông tin phụ thuộc.
-save-temps
-save-temps = cwd
Lưu trữ vĩnh viễn các tệp trung gian "tạm thời" thông thường; đặt chúng vào hiện tại
thư mục và đặt tên cho chúng dựa trên tệp nguồn. Do đó, biên dịch foo.c với -c
-save-temps sản xuất các tập tin foo.i và foo.s, Cũng như foo.o. Điều này tạo ra một
được xử lý trước foo.i tệp đầu ra mặc dù trình biên dịch hiện thường sử dụng
bộ tiền xử lý tích hợp.
Khi được sử dụng kết hợp với -x tùy chọn dòng lệnh, -save-temps hợp lý
đủ để tránh ghi quá nhiều tệp nguồn đầu vào có cùng phần mở rộng với
tệp trung gian. Tệp trung gian tương ứng có thể nhận được bằng cách đổi tên
tập tin nguồn trước khi sử dụng -save-temps.
Nếu bạn gọi GCC song song, hãy biên dịch một số tệp nguồn khác nhau chia sẻ
tên cơ sở chung trong các thư mục con khác nhau hoặc cùng một tệp nguồn được biên dịch cho
nhiều điểm đến đầu ra, có khả năng là các trình biên dịch song song khác nhau sẽ
can thiệp vào nhau và ghi đè lên các tệp tạm thời. Ví dụ:
gcc -save-temps -o goneir1 / foo.o indir1 / foo.c &
gcc -save-temps -o goneir2 / foo.o indir2 / foo.c &
có thể dẫn đến foo.i và foo.o được ghi đồng thời bởi cả hai trình biên dịch.
-save-temps = obj
Lưu trữ vĩnh viễn các tệp trung gian "tạm thời" thông thường. Nếu -o tùy chọn được sử dụng,
các tệp tạm thời dựa trên tệp đối tượng. Nếu -o tùy chọn không được sử dụng,
-save-temps = obj chuyển đổi hoạt động như thế nào -save-temps.
Ví dụ:
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
tạo ra foo.i, foo.s, dir / xbar.i, dir / xbar.s, dir2 / yfoobar.i, dir2 / yfoobar.svà
dir2 / yfoobar.o.
-thời gian[=hồ sơ]
Báo cáo thời gian CPU được thực hiện bởi mỗi quy trình con trong trình tự biên dịch. Đối với C
các tệp nguồn, đây là trình biên dịch thích hợp và trình hợp dịch (cộng với trình liên kết nếu liên kết là
xong).
Nếu không có đặc điểm kỹ thuật của tệp đầu ra, đầu ra sẽ giống như sau:
# cc1 0.12 0.01
# như 0.00 0.01
Số đầu tiên trên mỗi dòng là "thời gian của người dùng", đó là thời gian dành cho việc thực thi
chương trình của chính nó. Con số thứ hai là "thời gian hệ thống", thời gian dành cho việc thực thi hoạt động
các thói quen hệ thống thay mặt cho chương trình. Cả hai số đều tính bằng giây.
Với đặc điểm kỹ thuật của tệp đầu ra, đầu ra được nối vào tệp được đặt tên,
và nó trông như thế này:
0.12 0.01 cc1
0.00 0.01 dưới dạng
"Thời gian người dùng" và "thời gian hệ thống" được di chuyển trước tên chương trình và
các tùy chọn được chuyển đến chương trình được hiển thị, để sau này người ta có thể biết tệp nào là
đang được biên dịch và với các tùy chọn nào.
-fvar-theo dõi
Chạy vượt qua theo dõi biến. Nó tính toán nơi các biến được lưu trữ tại mỗi vị trí
trong mã. Thông tin gỡ lỗi tốt hơn sau đó được tạo (nếu thông tin gỡ lỗi
định dạng hỗ trợ thông tin này).
Nó được bật theo mặc định khi biên dịch với tối ưu hóa (-Bạn, -O, -O2, ...),
thông tin gỡ lỗi (-g) và định dạng thông tin gỡ lỗi hỗ trợ nó.
-fvar-theo dõi-phân công
Chú thích các nhiệm vụ cho các biến người dùng sớm trong quá trình biên dịch và cố gắng thực hiện
các chú thích trong suốt quá trình biên dịch từ đầu đến cuối, trong một nỗ lực
để cải thiện thông tin gỡ lỗi trong khi tối ưu hóa. Sử dụng -gdwarf-4 được đề nghị cùng
với nó.
Nó có thể được bật ngay cả khi theo dõi var bị vô hiệu hóa, trong trường hợp này, chú thích là
được tạo và duy trì, nhưng bị loại bỏ ở cuối.
-fvar-theo dõi-phân công-chuyển đổi
Chuyển đổi -fvar-theo dõi-phân công, theo cùng một cách mà -gtoggle bật tắt -g.
-print-file-name =thư viện
In tên tuyệt đối đầy đủ của tệp thư viện thư viện nó sẽ được sử dụng khi
liên kết --- và không làm bất cứ điều gì khác. Với tùy chọn này, GCC không biên dịch hoặc liên kết
bất cứ điều gì; nó chỉ in tên tệp.
-print-đa thư mục
In tên thư mục tương ứng với multilib được chọn bởi bất kỳ công tắc nào khác
hiện trong dòng lệnh. Thư mục này được cho là tồn tại trong GCC_EXEC_PREFIX.
-print-multi-lib
In ánh xạ từ các tên thư mục multilib đến các công tắc trình biên dịch cho phép chúng.
Tên thư mục được phân tách khỏi các công tắc bằng ;và mỗi công tắc bắt đầu bằng một
@ thay cho -, không có khoảng cách giữa nhiều công tắc. Điều này được cho là
gia công vỏ dễ dàng.
-print-multi-os-thư mục
In đường dẫn đến thư viện hệ điều hành cho multilib đã chọn, liên quan đến một số lib
thư mục con. Nếu thư viện hệ điều hành có trong lib thư mục con và không có multilibs
được sử dụng, điều này thường chỉ ., nếu thư viện hệ điều hành có trong hậu tố lib anh chị em
thư mục này in ra, ví dụ: ../ lib64, ../ lib or ../ lib32hoặc nếu các thư viện hệ điều hành
trình bày trong lib / subir thư mục con nó in ra, ví dụ: amd64, spacv9 or ev6.
-print-multiarch
In đường dẫn đến thư viện hệ điều hành cho nhiều tìm kiếm đã chọn, liên quan đến một số lib
thư mục con.
-print-prog-name =chương trình
Như -in-file-name, nhưng tìm kiếm một chương trình chẳng hạn như cpp.
-print-libgcc-tên tệp
Giống như -print-file-name = libgcc.a.
Điều này rất hữu ích khi bạn sử dụng -nostdlib or -nodedefaultlibs nhưng bạn muốn liên kết với
libgcc.a. Bạn có thể làm:
gcc -nostdlib ... `gcc -print-libgcc-file-name`
-print-search-dirs
In tên của thư mục cài đặt đã định cấu hình và danh sách chương trình và
thư viện thư viện gcc tìm kiếm --- và không làm bất cứ điều gì khác.
Điều này hữu ích khi gcc in thông báo lỗi cài đặt vấn đề không thể giám đốc điều hành
cpp0: Không như vậy hồ sơ or thư mục. Để giải quyết điều này, bạn cần phải đặt cpp0 và
các thành phần trình biên dịch khác ở đâu gcc mong đợi để tìm thấy chúng, hoặc bạn có thể đặt
biến môi trường GCC_EXEC_PREFIX vào thư mục mà bạn đã cài đặt chúng. Đừng
quên dấu vết /.
-print-sysroot
In thư mục sysroot đích được sử dụng trong quá trình biên dịch. Đây là
mục tiêu sysroot được chỉ định tại thời điểm định cấu hình hoặc sử dụng --sysroot Tùy chọn,
có thể có thêm một hậu tố phụ thuộc vào các tùy chọn biên dịch. Nếu không có mục tiêu
sysroot được chỉ định, tùy chọn không in gì.
hậu tố -print-sysroot-headers-
In hậu tố được thêm vào sysroot đích khi tìm kiếm tiêu đề hoặc đưa ra
lỗi nếu trình biên dịch không được định cấu hình với hậu tố như vậy --- và không làm bất cứ điều gì
khác
-máy đổ rác
In máy đích của trình biên dịch (ví dụ: i686-pc-linux-gnu) --- và đừng làm
còn gì nữa không.
-dumpversion
In phiên bản trình biên dịch (ví dụ: 3.0) --- và không làm bất cứ điều gì khác.
-dumpspecs
In thông số kỹ thuật tích hợp của trình biên dịch --- và không làm bất cứ điều gì khác. (Điều này được sử dụng khi
Bản thân GCC đang được xây dựng.)
-fno-loại bỏ-không sử dụng-loại gỡ lỗi
Thông thường, khi sản xuất đầu ra DWARF 2, GCC tránh tạo đầu ra biểu tượng gỡ lỗi cho
loại không được sử dụng trong tệp nguồn đang được biên dịch. Đôi khi nó hữu ích
để GCC phát ra thông tin gỡ lỗi cho tất cả các loại được khai báo trong một đơn vị biên dịch,
bất kể chúng có thực sự được sử dụng trong đơn vị biên dịch đó hay không, đối với
ví dụ nếu, trong trình gỡ lỗi, bạn muốn truyền một giá trị cho một kiểu không thực sự
được sử dụng trong chương trình của bạn (nhưng được khai báo). Tuy nhiên, thường xuyên hơn, điều này dẫn đến
lượng không gian lãng phí đáng kể.
Các lựa chọn Đó Kiểm soát Tối ưu hóa
Các tùy chọn này kiểm soát nhiều loại tối ưu hóa khác nhau.
Không có bất kỳ tùy chọn tối ưu hóa nào, mục tiêu của trình biên dịch là giảm chi phí biên dịch
và để việc gỡ lỗi tạo ra kết quả như mong đợi. Các tuyên bố là độc lập: nếu bạn
dừng chương trình bằng một điểm ngắt giữa các câu lệnh, sau đó bạn có thể gán một giá trị mới cho
bất kỳ biến nào hoặc thay đổi bộ đếm chương trình thành bất kỳ câu lệnh nào khác trong hàm và nhận
chính xác là kết quả bạn mong đợi từ mã nguồn.
Bật cờ tối ưu hóa làm cho trình biên dịch cố gắng cải thiện hiệu suất và / hoặc
kích thước mã với chi phí thời gian biên dịch và có thể có khả năng gỡ lỗi
chương trình.
Trình biên dịch thực hiện tối ưu hóa dựa trên kiến thức mà nó có về chương trình.
Biên dịch nhiều tệp cùng một lúc sang một chế độ tệp đầu ra duy nhất cho phép trình biên dịch sử dụng
thông tin thu được từ tất cả các tệp khi biên dịch từng tệp.
Không phải tất cả các tối ưu hóa đều được kiểm soát trực tiếp bởi một cờ. Chỉ những tối ưu hóa có
cờ được liệt kê trong phần này.
Hầu hết các tối ưu hóa chỉ được bật nếu một -O mức được đặt trên dòng lệnh. Nếu không thì
chúng bị vô hiệu hóa, ngay cả khi các cờ tối ưu hóa riêng lẻ được chỉ định.
Tùy thuộc vào mục tiêu và cách GCC được định cấu hình, một tập hợp các
tối ưu hóa có thể được bật ở mỗi -O cấp hơn những người được liệt kê ở đây. Bạn có thể gọi GCC
với -Q --help = trình tối ưu hóa để tìm ra bộ tối ưu hóa chính xác được bật tại
mỗi cấp độ.
-O
-O1 Tối ưu hóa. Việc tối ưu hóa quá trình biên dịch sẽ mất nhiều thời gian hơn và nhiều bộ nhớ hơn cho
một chức năng lớn.
Với -O, trình biên dịch cố gắng giảm kích thước mã và thời gian thực thi, mà không thực hiện
bất kỳ tối ưu hóa nào cần nhiều thời gian biên dịch.
-O bật các cờ tối ưu hóa sau:
-fauto-inc-dec -fso sánh-elim -fcprop-đăng ký -fdce -fdefer-pop -chi nhánh trả chậm
-fdse -fguess-chi nhánh-xác suất -fif-chuyển đổi2 -fif-chuyển đổi -fipa-thuần-const
-fipa-hồ sơ -fipa-tham khảo -fmerge-hằng số -fsplit-rộng-các loại -ftree-bit-ccp
-ftree-buildin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
-sree-Dominator-opts -ftree-dse -ftree-forwprop - miễn phí -ftree-phiprop -ftree-slsr
-ftree-sra -ftree-pta -độ ba -funit-at-a-time
-O cũng bật -fomit-frame-con trỏ trên máy mà làm như vậy không can thiệp
với gỡ lỗi.
-O2 Tối ưu hóa nhiều hơn nữa. GCC thực hiện gần như tất cả các tối ưu hóa được hỗ trợ không
liên quan đến sự đánh đổi tốc độ không gian. So với -O, tùy chọn này làm tăng cả hai
thời gian biên dịch và hiệu suất của mã được tạo.
-O2 bật tất cả các cờ tối ưu hóa được chỉ định bởi -O. Nó cũng bật như sau
cờ tối ưu hóa: -fthread-nhảy -falign-các chức năng -falign-nhảy -falign-vòng
-falign-nhãn -fcaller-tiết kiệm -nhảy qua -fcse-theo-nhảy -fcse-bỏ qua-khối
-fdelete-null-con trỏ-kiểm tra -fdevirtualize -féxpensive-tối ưu hóa -fgcse
-fgcse-lm -fhoist-liền kề-tải -finline-chức năng nhỏ -findirect-inline
-fipa-sra -foptimize-anh chị em-cuộc gọi -fpartial-inline -fpeephole2 -fregmove
-freorder-khối -freorder-chức năng -frerun-cse-sau-vòng lặp -sched-interblock
-fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-tràn
-phải-chuyển-đổi-chuyển-đổi -đa-đuôi-hợp nhất -phải trước -ftree-vrp
Vui lòng lưu ý cảnh báo dưới -fgcse về việc mời gọi -O2 trên các chương trình sử dụng máy tính
gotos.
LƯU Ý: Trong Ubuntu 8.10 và các phiên bản mới hơn, -D_FORTIFY_SOURCE = 2 được đặt theo mặc định và là
kích hoạt khi -O được đặt thành 2 hoặc cao hơn. Điều này cho phép thời gian biên dịch bổ sung và
kiểm tra thời gian chạy cho một số hàm libc. Để tắt, hãy chỉ định một trong hai
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE = 0.
-O3 Tối ưu hóa nhiều hơn nữa. -O3 bật tất cả các tối ưu hóa được chỉ định bởi -O2 và cũng bật
các -finline-các chức năng, -funswitch-vòng, -fpredive-commoning, -fgcse-sau khi tải lại,
-vectơ hóa miễn phí, -fvect-chi phí-mô hình, -ftree-một phần-pre và -fipa-cp-clone tùy chọn.
-O0 Giảm thời gian biên dịch và làm cho việc gỡ lỗi mang lại kết quả như mong đợi. Đây là
mặc định.
-Bạn Tối ưu hóa cho kích thước. -Bạn cho phép tất cả -O2 tối ưu hóa thường không tăng
kích thước mã. Nó cũng thực hiện các tối ưu hóa hơn nữa được thiết kế để giảm kích thước mã.
-Bạn tắt các cờ tối ưu hóa sau: -falign-các chức năng -falign-nhảy
-falign-vòng -falign-nhãn -freorder-khối -freorder-khối-và-phân vùng
-fprefetch-loop-mảng
-Ăn sáng
Bỏ qua việc tuân thủ các tiêu chuẩn nghiêm ngặt. -Ăn sáng cho phép tất cả -O3 tối ưu hóa. Nó cũng
cho phép tối ưu hóa không hợp lệ cho tất cả các chương trình tuân thủ tiêu chuẩn. Nó
bật lên -ffast-toán và dành riêng cho Fortran -fno-bảo vệ-parens và -fstack-array.
-Og Tối ưu hóa trải nghiệm gỡ lỗi. -Og cho phép tối ưu hóa mà không ảnh hưởng đến
gỡ lỗi. Nó phải là mức tối ưu hóa được lựa chọn cho bản chỉnh sửa tiêu chuẩn-
chu trình biên dịch-gỡ lỗi, đưa ra mức tối ưu hóa hợp lý trong khi duy trì
biên dịch nhanh và một trải nghiệm gỡ lỗi tốt.
Nếu bạn sử dụng nhiều -O tùy chọn, có hoặc không có số cấp, tùy chọn cuối cùng như vậy là
một trong những hiệu quả.
Tùy chọn của biểu mẫu -fcờ chỉ định các cờ độc lập với máy. Hầu hết các lá cờ đều có cả hai
hình thức tích cực và tiêu cực; dạng phủ định của -foo is -fno-foo. Trong bảng dưới đây,
chỉ một trong các biểu mẫu được liệt kê --- biểu mẫu bạn thường sử dụng. Bạn có thể tìm ra cái khác
hình thức bằng cách loại bỏ không- hoặc thêm nó.
Các tùy chọn sau kiểm soát các tối ưu hóa cụ thể. Chúng được kích hoạt bởi -O
các tùy chọn hoặc có liên quan đến những tùy chọn đó. Bạn có thể sử dụng các cờ sau trong trường hợp hiếm
các trường hợp mong muốn "tinh chỉnh" các tối ưu hóa sẽ được thực hiện.
-fno-mặc định-nội tuyến
Không đặt các hàm thành viên nội tuyến theo mặc định chỉ vì chúng được định nghĩa bên trong
phạm vi lớp (chỉ C ++). Ngược lại, khi bạn chỉ định -O, các chức năng thành viên được xác định
phạm vi bên trong lớp được biên dịch nội tuyến theo mặc định; tức là, bạn không cần thêm nội tuyến
phía trước tên chức năng thành viên.
-fno-defer-pop
Luôn bật các đối số cho mỗi lệnh gọi hàm ngay khi hàm đó trả về. Vì
máy phải bật đối số sau một lệnh gọi hàm, trình biên dịch thường cho phép
các đối số tích lũy trên ngăn xếp cho một số lệnh gọi hàm và bật tất cả chúng tại
Một lần.
Bị vô hiệu hóa ở các cấp độ -O, -O2, -O3, -Bạn.
-fforward-tuyên truyền
Thực hiện truyền chuyển tiếp trên RTL. Vượt qua cố gắng kết hợp hai hướng dẫn
và kiểm tra xem kết quả có thể được đơn giản hóa hay không. Nếu tính năng hủy cuộn vòng lặp đang hoạt động, hai lần vượt qua
được thực hiện và lần thứ hai được lên lịch sau khi mở vòng lặp.
Tùy chọn này được bật theo mặc định ở các cấp độ tối ưu hóa -O, -O2, -O3, -Bạn.
-ffp-hợp đồng =phong cách
-ffp-contract = tắt tắt tính năng co biểu thức dấu phẩy động. -ffp-contract = nhanh
cho phép thu hẹp biểu thức dấu phẩy động chẳng hạn như hình thành phép nhân-cộng hợp nhất
nếu mục tiêu có hỗ trợ gốc cho chúng. -ffp-contract = on cho phép
sự co lại biểu thức dấu phẩy động nếu tiêu chuẩn ngôn ngữ cho phép. Đây là
hiện không được thực hiện và đối xử bình đẳng với -ffp-contract = tắt.
Mặc định là -ffp-contract = nhanh.
-fomit-frame-con trỏ
Không giữ con trỏ khung trong sổ đăng ký cho các chức năng không cần. Cái này
tránh các hướng dẫn để lưu, thiết lập và khôi phục con trỏ khung; nó cũng làm cho một
đăng ký bổ sung có sẵn trong nhiều chức năng. It Ngoài ra làm cho gỡ lỗi không thể on
một số máy móc.
Trên một số máy, chẳng hạn như VAX, cờ này không có hiệu lực, vì tiêu chuẩn
trình tự gọi tự động xử lý con trỏ khung và không có gì được lưu bởi
giả vờ như nó không tồn tại. Macro mô tả máy "FRAME_POINTER_REQUIRED"
kiểm soát xem máy mục tiêu có hỗ trợ cờ này hay không.
Bắt đầu với GCC phiên bản 4.6, cài đặt mặc định (khi không tối ưu hóa kích thước) cho
Các mục tiêu GNU / Linux x32 86 bit và Darwin x32 86 bit đã được thay đổi thành
-fomit-frame-con trỏ. Giá trị mặc định có thể được hoàn nguyên về -fno-bỏ qua-khung-con trỏ by
cấu hình GCC với --enable-frame-con trỏ tùy chọn cấu hình.
Được kích hoạt ở các cấp độ -O, -O2, -O3, -Bạn.
-foptimize-anh chị em-cuộc gọi
Tối ưu hóa các cuộc gọi đệ quy đuôi và anh chị em.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-fno-nội tuyến
Không mở rộng bất kỳ hàm nội dòng nào ngoài những hàm được đánh dấu bằng "always_inline"
thuộc tính. Đây là mặc định khi không tối ưu hóa.
Các chức năng đơn lẻ có thể được miễn nội tuyến bằng cách đánh dấu chúng bằng "noinline"
thuộc tính.
-finline-chức năng nhỏ
Tích hợp các chức năng vào người gọi của họ khi cơ thể của họ nhỏ hơn mong đợi
mã lệnh gọi hàm (vì vậy kích thước tổng thể của chương trình sẽ nhỏ hơn). Trình biên dịch
dựa trên kinh nghiệm quyết định chức năng nào đủ đơn giản để có giá trị tích hợp vào
cách này. Nội tuyến này áp dụng cho tất cả các hàm, ngay cả những hàm không được khai báo nội tuyến.
Đã bật ở cấp độ -O2.
-findirect-inline
Các cuộc gọi nội tuyến cũng gián tiếp được phát hiện là đã biết tại thời điểm biên dịch nhờ vào
nội tuyến trước. Tùy chọn này chỉ có hiệu lực khi bản thân nội tuyến được bật
bởi -finline-các chức năng or -finline-chức năng nhỏ tùy chọn.
Đã bật ở cấp độ -O2.
-finline-các chức năng
Xem xét tất cả các hàm cho nội tuyến, ngay cả khi chúng không được khai báo nội tuyến. Các
trình biên dịch quyết định một cách dựa trên cơ sở dữ liệu những hàm nào đáng được tích hợp theo cách này.
Nếu tất cả các lệnh gọi đến một hàm nhất định được tích hợp và hàm được khai báo
"static", thì hàm thường không được xuất ra dưới dạng mã trình hợp dịch theo đúng nghĩa của nó.
Đã bật ở cấp độ -O3.
-finline-hàm-được gọi-một lần
Hãy xem xét tất cả các hàm "tĩnh" được gọi một lần để nội tuyến vào trình gọi của chúng ngay cả khi
chúng không được đánh dấu "nội dòng". Nếu một lệnh gọi đến một chức năng nhất định được tích hợp, thì
hàm không được xuất ra dưới dạng mã trình hợp dịch theo đúng nghĩa của nó.
Được kích hoạt ở các cấp độ -O1, -O2, -O3 và -Bạn.
-cao-trong-nội-tuyến
Các hàm nội tuyến được đánh dấu bằng "always_inline" và các hàm có phần thân có vẻ nhỏ hơn
hàm gọi chi phí sớm trước khi thực hiện -fprofile-create thiết bị đo đạc và
pass nội tuyến thực. Làm như vậy làm cho việc lập hồ sơ rẻ hơn đáng kể và thường
nội tuyến nhanh hơn trên các chương trình có chuỗi lớn các chức năng trình bao bọc lồng nhau.
Được bật theo mặc định.
-fipa-sra
Thực hiện thay thế tổng hợp vô hướng liên thủ tục, loại bỏ các tham số không sử dụng
và thay thế các tham số được truyền bởi tham chiếu bằng các tham số được truyền bởi giá trị.
Được kích hoạt ở các cấp độ -O2, -O3 và -Bạn.
-finline-limit =n
Theo mặc định, GCC giới hạn kích thước của các hàm có thể được nội tuyến. Cờ này cho phép
kiểm soát thô giới hạn này. n là kích thước của các hàm có thể được nội tuyến
số lượng các hướng dẫn giả.
Nội tuyến thực sự được kiểm soát bởi một số tham số, có thể được chỉ định
riêng lẻ bằng cách sử dụng --param tên=giá trị. Các -finline-limit =n tùy chọn đặt một số
các thông số này như sau:
max-inline-insns-đơn
được thiết lập để n/ 2.
max-inline-insns-auto
được thiết lập để n/ 2.
Xem bên dưới để biết tài liệu về các tham số riêng lẻ kiểm soát nội tuyến và
cho các giá trị mặc định của các tham số này.
Lưu ý: có thể không có giá trị -finline-giới hạn dẫn đến hành vi mặc định.
Lưu ý: hướng dẫn giả đại diện, trong ngữ cảnh cụ thể này, một bản tóm tắt
phép đo kích thước của chức năng. Không có cách nào nó đại diện cho một số lượng lắp ráp
hướng dẫn và do đó, ý nghĩa chính xác của nó có thể thay đổi từ một bản phát hành thành một
khác.
-fno-keep-inline-dllexport
Đây là phiên bản chi tiết hơn của -fkeep-inline-chức năng, chỉ áp dụng cho
các hàm được khai báo bằng cách sử dụng thuộc tính "dllexport" hoặc statementspec
-fkeep-inline-chức năng
Trong C, phát ra các hàm "tĩnh" được khai báo "nội tuyến" vào tệp đối tượng, ngay cả khi
hàm đã được đưa vào tất cả các trình gọi của nó. Công tắc này không ảnh hưởng
các chức năng sử dụng phần mở rộng "extern inline" trong GNU C90. Trong C ++, phát ra bất kỳ và tất cả
các hàm nội tuyến vào tệp đối tượng.
-fkeep-static-const
Phát ra các biến được khai báo "static const" khi tối ưu hóa không được bật, ngay cả khi
các biến không được tham chiếu.
GCC bật tùy chọn này theo mặc định. Nếu bạn muốn buộc trình biên dịch kiểm tra xem
biến được tham chiếu, bất kể tối ưu hóa có được bật hay không, hãy sử dụng
các -fno-keep-static-const tùy chọn.
-fmerge-hằng số
Cố gắng hợp nhất các hằng số giống hệt nhau (hằng số chuỗi và hằng số dấu phẩy động)
giữa các đơn vị biên soạn.
Tùy chọn này là mặc định để biên dịch được tối ưu hóa nếu trình hợp dịch và trình liên kết
ủng hộ điều này. Sử dụng -fno-merge-hằng số để ức chế hành vi này.
Được kích hoạt ở các cấp độ -O, -O2, -O3, -Bạn.
-fmerge-all-hằng số
Cố gắng hợp nhất các hằng số giống nhau và các biến giống nhau.
Tùy chọn này ngụ ý -fmerge-hằng số. Ngoài -fmerge-hằng số điều này
xem xét ví dụ, ngay cả các mảng được khởi tạo không đổi hoặc các biến hằng số được khởi tạo với
loại tích phân hoặc dấu phẩy động. Các ngôn ngữ như C hoặc C ++ yêu cầu mỗi biến,
bao gồm nhiều trường hợp của cùng một biến trong lời gọi đệ quy, để có
vị trí, vì vậy việc sử dụng tùy chọn này dẫn đến hành vi không phù hợp.
-fmodulo-lịch trình
Thực hiện lập lịch trình mô đun xoay ngay lập tức trước khi vượt qua lịch trình đầu tiên. Cái này
vượt qua xem xét các vòng trong cùng và sắp xếp lại các hướng dẫn của chúng bằng cách chồng lên các vòng khác nhau
các lần lặp lại.
-fmodulo-Schedule-allow-regmoves
Thực hiện lập lịch theo mô-đun dựa trên SMS tích cực hơn khi cho phép di chuyển đăng ký. Qua
đặt cờ này, các cạnh chống phụ thuộc nhất định sẽ bị xóa, điều này kích hoạt
tạo ra các bước di chuyển reg dựa trên phân tích phạm vi sống. Tùy chọn này có hiệu quả
chỉ với -fmodulo-lịch trình kích hoạt.
-fno-nhánh-đếm-reg
Không sử dụng hướng dẫn "giảm dần và rẽ nhánh" trên thanh ghi đếm, mà thay vào đó
tạo một chuỗi hướng dẫn làm giảm thanh ghi, so sánh nó với
XNUMX, sau đó phân nhánh dựa trên kết quả. Tùy chọn này chỉ có ý nghĩa trên
kiến trúc hỗ trợ các hướng dẫn như vậy, bao gồm x86, PowerPC, IA-64 và
S / 390.
Mặc định là -fnhánh-đếm-reg.
-fno-hàm-cse
Không đặt địa chỉ chức năng trong thanh ghi; thực hiện mỗi lệnh gọi một
hàm hằng chứa địa chỉ của hàm một cách rõ ràng.
Tùy chọn này dẫn đến mã kém hiệu quả hơn, nhưng một số hack kỳ lạ làm thay đổi
đầu ra trình hợp dịch có thể bị nhầm lẫn bởi các tối ưu hóa được thực hiện khi tùy chọn này
không được sử dụng.
Mặc định là -ffunction-cse
-fno-zero-khởi tạo-trong-bss
Nếu mục tiêu hỗ trợ một phần BSS, GCC theo mặc định sẽ đặt các biến
được khởi tạo bằng XNUMX vào BSS. Điều này có thể tiết kiệm không gian trong mã kết quả.
Tùy chọn này tắt hành vi này vì một số chương trình dựa trên các biến một cách rõ ràng
chuyển đến phần dữ liệu --- ví dụ: để tệp thực thi kết quả có thể tìm thấy
bắt đầu phần đó và / hoặc đưa ra các giả định dựa trên đó.
Mặc định là -fzero-khởi tạo-trong-bss.
-fmudflap -fmudflapth -fmudflapir
Đối với giao diện người dùng hỗ trợ nó (C và C ++), thiết bị tất cả con trỏ / mảng rủi ro
hoạt động hội nghị, một số hàm chuỗi / heap thư viện tiêu chuẩn và một số hàm khác
các cấu trúc liên quan với kiểm tra phạm vi / tính hợp lệ. Các mô-đun nên công cụ phải được
miễn nhiễm với lỗi tràn bộ đệm, sử dụng heap không hợp lệ và một số lớp khác của C / C ++
lỗi lập trình. Thiết bị đo đạc dựa trên một thư viện thời gian chạy riêng biệt
(libmudflap), được liên kết vào một chương trình nếu -fmudflap được đưa ra tại thời điểm liên kết. Chạy-
hành vi thời gian của chương trình công cụ được kiểm soát bởi MUDFLAP_OPTIONS
biến môi trường. Xem "env MUDFLAP_OPTIONS = -help a.out" để biết các tùy chọn của nó.
Sử dụng -fmudflapth thay vì -fmudflap để biên dịch và liên kết nếu chương trình của bạn có nhiều
luồng. Sử dụng -fmudflapir, Ngoài -fmudflap or -fmudflapth, Nếu
thiết bị đo nên bỏ qua các lần đọc con trỏ. Điều này tạo ra ít thiết bị đo hơn (và
do đó thực thi nhanh hơn) và vẫn cung cấp một số bảo vệ chống lại bộ nhớ hoàn toàn
làm hỏng việc ghi, nhưng cho phép dữ liệu đọc sai lan truyền trong một chương trình.
-fthread-nhảy
Thực hiện tối ưu hóa để kiểm tra xem liệu một bước nhảy có phân nhánh đến một vị trí nơi khác
so sánh được gộp bởi cái đầu tiên được tìm thấy. Nếu vậy, nhánh đầu tiên được chuyển hướng đến
điểm đến của nhánh thứ hai hoặc một điểm ngay sau nó,
tùy thuộc vào việc điều kiện được biết là đúng hay sai.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-fsplit-rộng-các loại
Khi sử dụng kiểu chiếm nhiều thanh ghi, chẳng hạn như "long long" trên 32-bit
hệ thống, tách các thanh ghi ra và phân bổ chúng một cách độc lập. Điều này bình thường
tạo mã tốt hơn cho những loại đó, nhưng có thể làm cho việc gỡ lỗi khó khăn hơn.
Được kích hoạt ở các cấp độ -O, -O2, -O3, -Bạn.
-fcse-theo-nhảy
Trong loại bỏ biểu thức con (CSE) phổ biến, hãy quét qua các hướng dẫn nhảy khi
mục tiêu của bước nhảy không đạt được bằng bất kỳ con đường nào khác. Ví dụ: khi CSE gặp
câu lệnh "if" với mệnh đề "else", CSE theo sau bước nhảy khi điều kiện
đã kiểm tra là sai.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-fcse-bỏ qua-khối
Điều này tương tự như -fcse-theo-nhảy, nhưng khiến CSE tuân theo các bước nhảy
có điều kiện bỏ qua các khối. Khi CSE gặp câu lệnh đơn giản "nếu" không có
mệnh đề khác, -fcse-bỏ qua-khối khiến CSE tuân theo bước nhảy xung quanh phần thân của
"nếu như".
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-frerun-cse-sau-vòng lặp
Chạy lại loại bỏ biểu thức con phổ biến sau khi thực hiện tối ưu hóa vòng lặp.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-fgcse
Thực hiện một phép loại bỏ biểu thức con chung toàn cục. Vượt qua này cũng thực hiện
hằng số toàn cục và truyền bản sao.
Lưu ý: Khi biên dịch một chương trình bằng cách sử dụng gotos máy tính, một phần mở rộng GCC, bạn có thể nhận được
hiệu suất thời gian chạy tốt hơn nếu bạn tắt tính năng loại bỏ biểu thức con chung toàn cầu
vượt qua bằng cách thêm -fno-gcse vào dòng lệnh.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-fgcse-lm
Thời Gian -fgcse-lm được bật, loại bỏ biểu thức con phổ biến toàn cầu cố gắng di chuyển
tải mà chỉ bị giết bởi các cửa hàng vào chính nó. Điều này cho phép một vòng lặp có chứa
trình tự tải / lưu trữ sẽ được thay đổi thành tải bên ngoài vòng lặp và bản sao / lưu trữ bên trong
vòng lặp.
Được bật theo mặc định khi -fgcse được kích hoạt.
-fgcse-sm
Thời Gian -fgcse-sm được bật, thẻ chuyển động cửa hàng được chạy sau khi chung toàn cầu
loại bỏ biểu thức con. Thẻ này cố gắng di chuyển các cửa hàng ra khỏi vòng lặp. Khi đã sử dụng
kết hợp với -fgcse-lm, các vòng lặp chứa chuỗi tải / cửa hàng có thể được thay đổi
tải trước vòng lặp và lưu trữ sau vòng lặp.
Không được kích hoạt ở bất kỳ cấp độ tối ưu hóa nào.
-fgcse-las
Thời Gian -fgcse-las được bật, vượt qua loại bỏ biểu thức con chung toàn cầu
loại bỏ tải dư thừa đến sau khi lưu trữ vào cùng một vị trí bộ nhớ (cả hai
dư thừa một phần và toàn bộ).
Không được kích hoạt ở bất kỳ cấp độ tối ưu hóa nào.
-fgcse-sau khi tải lại
Thời Gian -fgcse-sau khi tải lại được bật, quá trình loại bỏ tải dư thừa được thực hiện
sau khi tải lại. Mục đích của việc vượt qua này là để làm sạch các chất thừa tràn ra ngoài.
-faggressive-vòng lặp-tối ưu hóa
Tùy chọn này yêu cầu trình tối ưu hóa vòng lặp sử dụng các ràng buộc ngôn ngữ để lấy các giới hạn cho
số lần lặp của một vòng lặp. Điều này giả định rằng mã vòng lặp không gọi
hành vi không xác định bằng cách ví dụ như gây tràn số nguyên có dấu hoặc vượt quá giới hạn
truy cập mảng. Các giới hạn cho số lần lặp lại của một vòng lặp được sử dụng để hướng dẫn
tối ưu hóa kiểm tra thoát vòng lặp và bóc và thoát vòng lặp. Tùy chọn này được kích hoạt
theo mặc định.
-funsafe-loop-tối ưu hóa
Tùy chọn này cho trình tối ưu hóa vòng lặp giả sử rằng các chỉ số vòng lặp không bị tràn và
rằng các vòng lặp với điều kiện thoát không tầm thường không phải là vô hạn. Điều này cho phép mở rộng
phạm vi tối ưu hóa vòng lặp ngay cả khi bản thân trình tối ưu hóa vòng lặp không thể chứng minh rằng những
giả định là hợp lệ. Nếu bạn dùng -Tối ưu hóa vòng lặp an toàn, trình biên dịch cảnh báo bạn
nếu nó tìm thấy loại vòng lặp.
-nhảy qua
Thực hiện chuyển đổi nhảy chéo. Sự chuyển đổi này thống nhất mã tương đương và
tiết kiệm kích thước mã. Mã kết quả có thể hoạt động tốt hơn hoặc có thể không tốt hơn là không có dấu chéo
nhảy.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-fauto-inc-dec
Kết hợp tăng hoặc giảm địa chỉ với quyền truy cập bộ nhớ. Pass này là
luôn luôn bỏ qua các kiến trúc không có hướng dẫn để hỗ trợ điều này.
Được bật theo mặc định tại -O và cao hơn trên các kiến trúc hỗ trợ điều này.
-fdce
Thực hiện loại bỏ mã chết (DCE) trên RTL. Được bật theo mặc định tại -O và cao hơn.
-fdse
Thực hiện loại bỏ cửa hàng chết (DSE) trên RTL. Được bật theo mặc định tại -O và cao hơn.
-fif-chuyển đổi
Cố gắng chuyển các bước nhảy có điều kiện thành các bước tương đương ít nhánh hơn. Điêu nay bao gôm
sử dụng các bước di chuyển có điều kiện, tối thiểu, tối đa, đặt cờ và hướng dẫn cơ bụng, và một số thủ thuật
khả thi bằng số học tiêu chuẩn. Việc sử dụng thực thi có điều kiện trên các chip ở vị trí
khả dụng được kiểm soát bởi "if-convert2".
Được kích hoạt ở các cấp độ -O, -O2, -O3, -Bạn.
-fif-chuyển đổi2
Sử dụng thực thi có điều kiện (nếu có) để chuyển đổi các bước nhảy có điều kiện thành
tương đương ít nhánh.
Được kích hoạt ở các cấp độ -O, -O2, -O3, -Bạn.
-fdelete-null-con trỏ-kiểm tra
Giả sử rằng các chương trình không thể bỏ qua con trỏ rỗng một cách an toàn và không có mã hoặc dữ liệu
phần tử cư trú ở đó. Điều này cho phép tối ưu hóa gấp liên tục đơn giản ở tất cả
mức độ tối ưu hóa. Ngoài ra, các thẻ tối ưu hóa khác trong GCC sử dụng cờ này để
kiểm soát các phân tích luồng dữ liệu toàn cầu loại bỏ các kiểm tra vô ích đối với con trỏ null;
những điều này giả định rằng nếu một con trỏ được kiểm tra sau khi nó đã được tham chiếu, nó
không được rỗng.
Tuy nhiên, lưu ý rằng trong một số môi trường, giả định này không đúng. Sử dụng
-fno-xóa-null-con trỏ-kiểm tra để tắt tối ưu hóa này cho các chương trình phụ thuộc vào
về hành vi đó.
Một số mục tiêu, đặc biệt là các mục tiêu được nhúng, vô hiệu hóa tùy chọn này ở tất cả các cấp. Nếu không thì
nó được kích hoạt ở tất cả các cấp: -O0, -O1, -O2, -O3, -Bạn. Thẻ sử dụng thông tin
được bật độc lập ở các mức tối ưu hóa khác nhau.
-fdevirtualize
Cố gắng chuyển đổi các cuộc gọi sang các hàm ảo thành các cuộc gọi trực tiếp. Điều này được thực hiện cả hai
trong một thủ tục và liên thủ tục như một phần của nội tuyến gián tiếp
("-findirect-inline") và lan truyền hằng số liên thủ tục (-fipa-cp). Đã bật
ở các cấp độ -O2, -O3, -Bạn.
-féxpensive-tối ưu hóa
Thực hiện một số tối ưu hóa nhỏ tương đối tốn kém.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-miễn phí
Cố gắng xóa các hướng dẫn tiện ích mở rộng thừa. Điều này đặc biệt hữu ích cho
kiến trúc x86-64, hoàn toàn không mở rộng trong các thanh ghi 64-bit sau
viết cho nửa 32-bit thấp hơn của họ.
Đã bật cho x86 ở các cấp -O2, -O3.
-foptimize-đăng ký-di chuyển
-fregmove
Cố gắng gán lại các số đăng ký trong hướng dẫn di chuyển và dưới dạng toán hạng của các
hướng dẫn đơn giản để tối đa hóa số lượng đăng ký buộc. Đây là
đặc biệt hữu ích trên các máy có lệnh hai toán hạng.
Chú thích -fregmove và -foptimize-đăng ký-di chuyển là cùng một tối ưu hóa.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
thuật toán -fira =thuật toán
Sử dụng thuật toán tô màu được chỉ định cho bộ cấp phát thanh ghi tích hợp. Các
thuật toán đối số có thể được ưu tiên, chỉ định màu ưu tiên của Chow, hoặc CB,
chỉ định màu Chaitin-Briggs. Màu Chaitin-Briggs không được triển khai
cho tất cả các kiến trúc, nhưng đối với những mục tiêu hỗ trợ nó, nó là
bởi vì nó tạo ra mã tốt hơn.
-fira-region =khu
Sử dụng các vùng được chỉ định cho bộ cấp phát thanh ghi tích hợp. Các khu đối số
phải là một trong những điều sau:
tất cả các Sử dụng tất cả các vòng lặp làm vùng phân bổ thanh ghi. Điều này có thể mang lại kết quả tốt nhất cho
máy có bộ đăng ký nhỏ và / hoặc không thường xuyên.
hỗn hợp
Sử dụng tất cả các vòng lặp ngoại trừ các vòng lặp có áp suất thanh ghi nhỏ làm vùng. Cái này
giá trị thường mang lại kết quả tốt nhất trong hầu hết các trường hợp và cho hầu hết các kiến trúc, và
được bật theo mặc định khi biên dịch với tính năng tối ưu hóa cho tốc độ (-O, -O2,…).
một Sử dụng tất cả các chức năng như một vùng duy nhất. Điều này thường dẫn đến mã nhỏ nhất
kích thước và được bật theo mặc định cho -Bạn or -O0.
-fira-palăng-áp suất
Sử dụng IRA để đánh giá áp suất thanh ghi trong mã nâng cấp cho các quyết định vận thăng
biểu thức. Tùy chọn này thường dẫn đến mã nhỏ hơn, nhưng nó có thể làm chậm
trình biên dịch xuống.
Tùy chọn này được bật ở cấp độ -Bạn cho tất cả các mục tiêu.
-fira-loop-áp suất
Sử dụng IRA để đánh giá áp suất thanh ghi trong các vòng lặp để đưa ra quyết định di chuyển các bất biến của vòng lặp.
Tùy chọn này thường dẫn đến việc tạo mã nhanh hơn và nhỏ hơn trên các máy có
các tệp thanh ghi lớn (> = 32 thanh ghi), nhưng nó có thể làm chậm trình biên dịch.
Tùy chọn này được bật ở cấp độ -O3 cho một số mục tiêu.
-fno-ira-share-save-slot
Tắt tính năng chia sẻ các khe ngăn xếp được sử dụng để lưu các sổ đăng ký cứng sử dụng cuộc gọi đang tồn tại
một cuộc gọi. Mỗi thanh ghi cứng có một khe ngăn xếp riêng biệt và kết quả là ngăn xếp chức năng
khung lớn hơn.
-fno-ira-share-tràn-slot
Vô hiệu hóa việc chia sẻ các vị trí ngăn xếp được phân bổ cho các sổ đăng ký giả. Mỗi đăng ký giả
mà không nhận được một thanh ghi cứng nhận được một khe ngăn xếp riêng biệt và kết quả là một hàm
khung xếp chồng lớn hơn.
-fira-verbose =n
Kiểm soát độ dài của tệp kết xuất cho trình cấp phát thanh ghi tích hợp. Các
giá trị mặc định là 5. Nếu giá trị n lớn hơn hoặc bằng 10, đầu ra kết xuất được gửi
sang stderr bằng cách sử dụng cùng một định dạng như n trừ 10.
-chi nhánh trả chậm
Nếu được hỗ trợ cho máy đích, hãy cố gắng sắp xếp lại các hướng dẫn để khai thác
các khe lệnh có sẵn sau khi các lệnh rẽ nhánh bị trì hoãn.
Được kích hoạt ở các cấp độ -O, -O2, -O3, -Bạn.
-fschedule-insns
Nếu được hỗ trợ cho máy đích, hãy cố gắng sắp xếp lại các hướng dẫn để loại bỏ
gian hàng thực thi do dữ liệu yêu cầu không khả dụng. Điều này giúp máy móc
có dấu chấm động chậm hoặc hướng dẫn tải bộ nhớ bằng cách cho phép các hướng dẫn khác
được phát hành cho đến khi kết quả của lệnh tải hoặc dấu phẩy động được yêu cầu.
Được kích hoạt ở các cấp độ -O2, -O3.
-fschedule-insns2
Tương tự như -fschedule-insns, nhưng yêu cầu thêm một lần lập lịch hướng dẫn
sau khi cấp phát thanh ghi đã được thực hiện. Điều này đặc biệt hữu ích trên các máy có
số lượng thanh ghi tương đối nhỏ và nơi các lệnh tải bộ nhớ mất nhiều hơn
một chu kỳ.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-fno-lịch trình-interblock
Không lập lịch hướng dẫn trên các khối cơ bản. Điều này thường được bật theo mặc định
khi lập lịch trước khi cấp phát thanh ghi, tức là với -fschedule-insns hoặc tại -O2 or
cao hơn.
-fno-Sched-spec
Không cho phép chuyển động suy đoán của các hướng dẫn không tải. Điều này thường được kích hoạt bởi
mặc định khi lập lịch trước khi cấp phát thanh ghi, tức là với -fschedule-insns hoặc tại
-O2 hoặc cao hơn.
-sched-áp suất
Kích hoạt tính năng lập lịch trình nhạy cảm với áp suất thanh ghi trước khi cấp phát thanh ghi. Cái này
chỉ có ý nghĩa khi lập lịch trước khi bật phân bổ thanh ghi, tức là với
-fschedule-insns hoặc tại -O2 hoặc cao hơn. Việc sử dụng tùy chọn này có thể cải thiện
mã và giảm kích thước của nó bằng cách ngăn chặn áp suất thanh ghi tăng lên trên số
của các thanh ghi cứng có sẵn và các lần đổ tiếp theo trong phân bổ thanh ghi.
-sched-spec-load
Cho phép chuyển động suy đoán của một số hướng dẫn tải. Điều này chỉ có ý nghĩa khi
lập lịch trước khi phân bổ đăng ký, tức là với -fschedule-insns hoặc tại -O2 hoặc cao hơn.
-fched-spec-load-nguy hiểm
Cho phép chuyển động suy đoán của nhiều hướng dẫn tải hơn. Điều này chỉ có ý nghĩa khi
lập lịch trước khi phân bổ đăng ký, tức là với -fschedule-insns hoặc tại -O2 hoặc cao hơn.
-fsched-sted-insns
-fsched-sted-insns =n
Xác định có bao nhiêu phần lót (nếu có) có thể được di chuyển sớm khỏi hàng đợi bị đình trệ
điền vào danh sách sẵn sàng trong lần vượt qua lịch trình thứ hai. -fno-Sched-Stats-insns
có nghĩa là không có miếng lót nào bị di chuyển sớm, -fsched-sted-insns = 0 có nghĩa là không có
giới hạn số lượng đồ lót đã xếp hàng có thể được di chuyển sớm. -fsched-sted-insns
không có giá trị tương đương với -fsched-sted-insns = 1.
-fsched-sted-insns-dep
-fsched-sted-insns-dep =n
Xác định có bao nhiêu nhóm insn (chu kỳ) được kiểm tra phụ thuộc vào một insn bị đình trệ
đó là một ứng cử viên cho việc loại bỏ sớm khỏi hàng đợi các nội dung bị đình trệ. Cái này có
một hiệu ứng chỉ trong lần vượt qua lịch trình thứ hai và chỉ khi -fsched-sted-insns is
đã sử dụng. -fno-Sched-Stacked-insns-dep tương đương với -fsched-sted-insns-dep = 0.
-fsched-sted-insns-dep không có giá trị tương đương với
-fsched-sted-insns-dep = 1.
-fsched2-use-siêu khối
Khi lập lịch sau khi cấp phát thanh ghi, hãy sử dụng lập lịch siêu khối. Điều này cho phép
chuyển động qua các ranh giới khối cơ bản, dẫn đến lịch trình nhanh hơn. Tùy chọn này là
thử nghiệm, vì không phải tất cả các mô tả máy được GCC sử dụng đều mô hình CPU đủ chặt chẽ
để tránh các kết quả không đáng tin cậy từ thuật toán.
Điều này chỉ có ý nghĩa khi lập lịch sau khi cấp phát thanh ghi, tức là với
-fschedule-insns2 hoặc tại -O2 hoặc cao hơn.
-fsched-nhóm-heuristic
Bật kinh nghiệm nhóm trong bộ lập lịch. Heuristic này ủng hộ hướng dẫn
thuộc về một nhóm lịch trình. Điều này được bật theo mặc định khi lập lịch là
được kích hoạt, tức là với -fschedule-insns or -fschedule-insns2 hoặc tại -O2 hoặc cao hơn.
-sched-critical-path-heuristic
Bật phương pháp phỏng vấn đường dẫn tới hạn trong bộ lập lịch. Điều này ủng hộ heuristic
hướng dẫn về con đường quan trọng. Điều này được bật theo mặc định khi lập lịch là
được kích hoạt, tức là với -fschedule-insns or -fschedule-insns2 hoặc tại -O2 hoặc cao hơn.
-fsched-spec-insn-heuristic
Kích hoạt heuristic hướng dẫn suy đoán trong bộ lập lịch. Điều này ủng hộ heuristic
hướng dẫn đầu cơ với điểm yếu phụ thuộc lớn hơn. Điều này được kích hoạt theo mặc định
khi lập lịch được bật, tức là với -fschedule-insns or -fschedule-insns2 hoặc tại -O2
hoặc cao hơn.
-sched-rank-heuristic
Bật tính năng khám phá xếp hạng trong bộ lập lịch. Heuristic này ủng hộ hướng dẫn
thuộc về một khối cơ bản với kích thước hoặc tần số lớn hơn. Điều này được kích hoạt theo mặc định
khi lập lịch được bật, tức là với -fschedule-insns or -fschedule-insns2 hoặc tại -O2
hoặc cao hơn.
-fsched-last-insn-heuristic
Kích hoạt tính toán hướng dẫn cuối cùng trong bộ lập lịch trình. Heuristic này ủng hộ
lệnh ít phụ thuộc vào lệnh cuối cùng được lập lịch. Điều này được kích hoạt
theo mặc định khi tính năng lập lịch được bật, tức là với -fschedule-insns or -fschedule-insns2
hoặc tại -O2 hoặc cao hơn.
-fsched-dep-count-heuristic
Kích hoạt tính toán số phụ thuộc trong bộ lập lịch biểu. Heuristic này ủng hộ
hướng dẫn mà có nhiều hướng dẫn hơn tùy thuộc vào nó. Điều này được kích hoạt theo mặc định
khi lập lịch được bật, tức là với -fschedule-insns or -fschedule-insns2 hoặc tại -O2
hoặc cao hơn.
-freschedule-modulo-Schedule-loop
Lập lịch Modulo được thực hiện trước khi lập lịch truyền thống. Nếu một vòng lặp là mô-đun
đã lên lịch, vượt qua lịch trình sau này có thể thay đổi lịch trình của nó. Sử dụng tùy chọn này để
kiểm soát hành vi đó.
-chọn lọc-lập lịch trình
Lập lịch hướng dẫn sử dụng thuật toán lập lịch chọn lọc. Lập lịch trình có chọn lọc chạy
thay vì thẻ lên lịch đầu tiên.
-selective-Scheduling2
Lập lịch hướng dẫn sử dụng thuật toán lập lịch chọn lọc. Lập lịch trình có chọn lọc chạy
thay vì vượt qua lịch trình thứ hai.
-fel-lịch trình-pipelining
Cho phép phần mềm tổng hợp các vòng trong cùng trong quá trình lập lịch biểu chọn lọc. Cái này
tùy chọn không có hiệu lực trừ khi một trong số -chọn lọc-lập lịch trình or -selective-Scheduling2
Được bật.
-fsel-Sched-pipelining-ngoài-vòng
Khi đường ống vòng lặp trong quá trình lập lịch trình chọn lọc, thì đường ống vòng bên ngoài cũng vậy. Cái này
tùy chọn không có hiệu lực trừ khi -fel-lịch trình-pipelining Được bật.
-fshrink-quấn
Chỉ phát ra các câu mở đầu của hàm trước các phần của hàm cần nó, thay vì lúc
đầu của hàm. Cờ này được bật theo mặc định tại -O và cao hơn.
-fcaller-tiết kiệm
Cho phép phân bổ các giá trị cho các thanh ghi được che bởi các lệnh gọi hàm, bằng cách
phát ra các hướng dẫn bổ sung để lưu và khôi phục các đăng ký xung quanh các cuộc gọi như vậy. Như là
phân bổ chỉ được thực hiện khi nó có vẻ dẫn đến mã tốt hơn.
Tùy chọn này luôn được bật theo mặc định trên một số máy nhất định, thường là những máy có
không có đăng ký bảo tồn cuộc gọi để sử dụng thay thế.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-fcombine-stack-điều chỉnh
Theo dõi các điều chỉnh ngăn xếp (đẩy và bật) và ngăn xếp các tham chiếu bộ nhớ rồi thử
để tìm cách kết hợp chúng.
Được bật theo mặc định tại -O1 và cao hơn.
-fbảo tồn-stack
Cố gắng giảm thiểu việc sử dụng ngăn xếp. Trình biên dịch cố gắng sử dụng ít không gian ngăn xếp hơn, thậm chí
nếu điều đó làm cho chương trình chậm hơn. Tùy chọn này ngụ ý thiết lập khung chồng lớn
tham số 100 và lớn-chồng-khung-tăng trưởng tham số đến 400.
-ftree-hợp lý
Thực hiện liên kết lại trên cây. Cờ này được bật theo mặc định tại -O và cao hơn.
-phải trước
Thực hiện loại bỏ dư thừa một phần (PRE) trên cây. Cờ này được kích hoạt bởi
mặc định tại -O2 và -O3.
-ftree-một phần-pre
Làm cho loại bỏ dư thừa một phần (PRE) tích cực hơn. Cờ này được kích hoạt bởi
mặc định tại -O3.
-ftree-forwprop
Thực hiện nhân giống thuận trên cây. Cờ này được bật theo mặc định tại -O và
cao hơn.
- miễn phí
Thực hiện loại bỏ toàn bộ dư thừa (FRE) trên cây. Sự khác biệt giữa FRE và
TRƯỚC là FRE chỉ xem xét các biểu thức được tính toán trên tất cả các đường dẫn đến
tính toán dư thừa. Phân tích này nhanh hơn PRE, mặc dù nó cho thấy ít
sự thừa thãi. Cờ này được bật theo mặc định tại -O và cao hơn.
-ftree-phiprop
Thực hiện nâng tải từ các con trỏ có điều kiện trên cây. Thẻ này được kích hoạt bởi
mặc định tại -O và cao hơn.
-fhoist-liền kề-tải
Các tải cụ thể của Palăng từ cả hai nhánh của if-then-else nếu tải từ
các vị trí liền kề trong cùng một cấu trúc và kiến trúc đích có điều kiện
hướng dẫn di chuyển. Cờ này được bật theo mặc định tại -O2 và cao hơn.
-ftree-copy-prop
Thực hiện nhân giống sao chép trên cây. Vượt qua này giúp loại bỏ các thao tác sao chép không cần thiết.
Cờ này được bật theo mặc định tại -O và cao hơn.
-fipa-thuần-const
Khám phá những hàm nào là thuần túy hoặc không đổi. Được bật theo mặc định tại -O và cao hơn.
-fipa-tham khảo
Khám phá những biến tĩnh nào không thoát khỏi đơn vị biên dịch. Được kích hoạt bởi
mặc định tại -O và cao hơn.
-fipa-pta
Thực hiện phân tích con trỏ liên thủ tục và sửa đổi liên thủ tục và
phân tích tham khảo. Tùy chọn này có thể gây ra quá nhiều bộ nhớ và sử dụng thời gian biên dịch trên
các đơn vị biên soạn lớn. Nó không được bật theo mặc định ở bất kỳ cấp độ tối ưu hóa nào.
-fipa-hồ sơ
Thực hiện tuyên truyền hồ sơ liên thủ tục. Các chức năng chỉ được gọi từ lạnh
các chức năng được đánh dấu là lạnh. Ngoài ra, các hàm được thực thi một lần (chẳng hạn như "cold",
"noreturn", hàm tạo tĩnh hoặc hàm hủy) được xác định. Các chức năng lạnh và
Vòng lặp ít phần của các chức năng được thực thi một lần sau đó được tối ưu hóa cho kích thước. Được kích hoạt bởi
mặc định tại -O và cao hơn.
-fipa-cp
Thực hiện lan truyền hằng số liên thủ tục. Tối ưu hóa này phân tích chương trình
để xác định thời điểm các giá trị được truyền cho các hàm là hằng số và sau đó tối ưu hóa
cho phù hợp. Sự tối ưu hóa này về cơ bản có thể tăng hiệu suất nếu
ứng dụng có các hằng số được truyền cho các hàm. Cờ này được bật theo mặc định tại
-O2, -Bạn và -O3.
-fipa-cp-clone
Thực hiện nhân bản chức năng để làm cho sự lan truyền hằng số liên thủ tục mạnh hơn. Khi nào
đã kích hoạt, lan truyền hằng số liên thủ tục thực hiện sao chép chức năng khi
hàm có thể nhìn thấy bên ngoài có thể được gọi với các đối số không đổi. Bởi vì điều này
tối ưu hóa có thể tạo ra nhiều bản sao của các chức năng, nó có thể tăng lên đáng kể
kích thước mã (xem --param ipcp-unit-growth =giá trị). Cờ này được bật theo mặc định tại
-O3.
-sắp chìm
Thực hiện chuyển động cửa hàng về phía trước trên cây. Cờ này được bật theo mặc định tại -O và
cao hơn.
-ftree-bit-ccp
Thực hiện lan truyền hằng số bit có điều kiện thưa thớt trên cây và truyền con trỏ
thông tin căn chỉnh. Vượt qua này chỉ hoạt động trên các biến vô hướng cục bộ và
được bật theo mặc định tại -O và cao hơn. Nó đòi hỏi điều đó -ftree-ccp được kích hoạt.
-ftree-ccp
Thực hiện nhân giống không đổi có điều kiện thưa thớt (CCP) trên cây. Thẻ này chỉ vượt qua
hoạt động trên các biến vô hướng cục bộ và được bật theo mặc định tại -O và cao hơn.
-phải-chuyển-đổi-chuyển-đổi
Thực hiện chuyển đổi các khởi tạo đơn giản trong một chuyển đổi sang các khởi tạo từ một
mảng vô hướng. Cờ này được bật theo mặc định tại -O2 và cao hơn.
-đa-đuôi-hợp nhất
Tìm kiếm các chuỗi mã giống hệt nhau. Khi tìm thấy, hãy thay thế một cái bằng một bước nhảy sang cái kia.
Tối ưu hóa này được gọi là hợp nhất đuôi hoặc nhảy chéo. Cờ này được kích hoạt bởi
mặc định tại -O2 và cao hơn. Thời gian biên dịch trong thẻ này có thể bị giới hạn bằng cách sử dụng
max-tail-merge-so sánh tham số và max-tail-merge-lặp đi lặp lại tham số.
-ftree-dce
Thực hiện loại bỏ mã chết (DCE) trên cây. Cờ này được bật theo mặc định tại -O
và cao hơn.
-ftree-buildin-call-dce
Thực hiện loại bỏ mã chết có điều kiện (DCE) cho các lệnh gọi đến các hàm tích hợp sẵn
có thể đặt "errno" nhưng nếu không thì không có tác dụng phụ. Cờ này được bật theo mặc định
at -O2 và cao hơn nếu -Bạn cũng không được chỉ định.
-sree-Dominator-opts
Thực hiện nhiều kiểu dọn dẹp vô hướng đơn giản (truyền liên tục / sao chép, dự phòng
loại bỏ, lan truyền phạm vi và đơn giản hóa biểu thức) dựa trên một kẻ thống trị
cây đi ngang. Điều này cũng thực hiện phân luồng nhảy (để giảm các bước nhảy để nhảy). Cái này
cờ được bật theo mặc định tại -O và cao hơn.
-ftree-dse
Thực hiện loại bỏ kho chết (DSE) trên cây. Kho chết là kho lưu vào ký ức
vị trí sau đó được ghi đè bởi một cửa hàng khác mà không có bất kỳ tải nào can thiệp. Trong
trường hợp này cửa hàng trước đó có thể bị xóa. Cờ này được bật theo mặc định tại -O và
cao hơn.
-ftree-ch
Thực hiện sao chép tiêu đề vòng lặp trên cây. Điều này có lợi vì nó tăng
hiệu quả của tối ưu hóa chuyển động mã. Nó cũng tiết kiệm một bước nhảy. Lá cờ này là
được bật theo mặc định tại -O và cao hơn. Nó không được kích hoạt cho -Bạn, vì nó thường
tăng kích thước mã.
-cung cấp-vòng lặp-tối ưu hóa
Thực hiện tối ưu hóa vòng lặp trên cây. Cờ này được bật theo mặc định tại -O và
cao hơn.
-ftree-loop-tuyến tính
Thực hiện các phép biến đổi hoán đổi vòng lặp trên cây. Giống như -floop-trao đổi. Để sử dụng
chuyển đổi mã này, GCC phải được định cấu hình với --với-ppl và --với-clog đến
kích hoạt cơ sở hạ tầng chuyển đổi vòng lặp Graphite.
-floop-trao đổi
Thực hiện các phép biến đổi hoán đổi vòng lặp trên các vòng lặp. Trao đổi hai vòng lồng nhau
chuyển mạch vòng trong và vòng ngoài. Ví dụ, cho một vòng lặp như:
LÀM J = 1, M
TÔI = 1, N
A (J, I) = A (J, I) * C
KẾT THÚC
KẾT THÚC
loop interchange biến đổi vòng lặp như thể nó đã được viết:
TÔI = 1, N
LÀM J = 1, M
A (J, I) = A (J, I) * C
KẾT THÚC
KẾT THÚC
có thể có lợi khi "N" lớn hơn bộ nhớ đệm, bởi vì trong Fortran,
các phần tử của một mảng được lưu trữ trong bộ nhớ liên tục theo cột và
vòng lặp lặp qua các hàng, có khả năng tạo ra mỗi lần truy cập một lần bỏ lỡ bộ nhớ cache. Cái này
tối ưu hóa áp dụng cho tất cả các ngôn ngữ được GCC hỗ trợ và không giới hạn ở
Fortran. Để sử dụng chuyển đổi mã này, GCC phải được định cấu hình với --với-ppl
và --với-clog để kích hoạt cơ sở hạ tầng chuyển đổi vòng lặp Graphite.
-floop-dải-của tôi
Thực hiện các phép biến đổi khai thác dải vòng lặp trên các vòng lặp. Khai thác dải chia một vòng thành
hai vòng lặp lồng nhau. Vòng ngoài có các bước tương đương với kích thước dải và vòng trong
vòng lặp có các bước của vòng lặp ban đầu trong một dải. Chiều dài dải có thể được thay đổi
bằng cách sử dụng kích thước khối vòng lặp tham số. Ví dụ, cho một vòng lặp như:
TÔI = 1, N
A (I) = A (I) + C
KẾT THÚC
khai thác dải vòng lặp biến đổi vòng lặp như thể nó đã được viết:
LÀM II = 1, N, 51
DO I = II, phút (II + 50, N)
A (I) = A (I) + C
KẾT THÚC
KẾT THÚC
Tối ưu hóa này áp dụng cho tất cả các ngôn ngữ được GCC hỗ trợ và không giới hạn ở
Fortran. Để sử dụng chuyển đổi mã này, GCC phải được định cấu hình với --với-ppl
và --với-clog để kích hoạt cơ sở hạ tầng chuyển đổi vòng lặp Graphite.
-floop-khối
Thực hiện các phép biến đổi chặn vòng lặp trên các vòng lặp. Dải chặn khai thác mỗi vòng lặp trong
lồng vòng lặp sao cho các truy cập bộ nhớ của các vòng lặp phần tử phù hợp với bên trong bộ đệm. Các
chiều dài dải có thể được thay đổi bằng cách sử dụng kích thước khối vòng lặp tham số. Ví dụ,
đưa ra một vòng lặp như:
TÔI = 1, N
LÀM J = 1, M
A (J, I) = B (I) + C (J)
KẾT THÚC
KẾT THÚC
chặn vòng lặp biến đổi vòng lặp như thể nó đã được viết:
LÀM II = 1, N, 51
LÀM JJ = 1, M, 51
DO I = II, phút (II + 50, N)
DO J = JJ, tối thiểu (JJ + 50, M)
A (J, I) = B (I) + C (J)
KẾT THÚC
KẾT THÚC
KẾT THÚC
KẾT THÚC
có thể có lợi khi "M" lớn hơn bộ nhớ đệm, vì vòng lặp trong cùng
lặp lại một lượng nhỏ dữ liệu có thể được lưu trong bộ nhớ đệm. Cái này
tối ưu hóa áp dụng cho tất cả các ngôn ngữ được GCC hỗ trợ và không giới hạn ở
Fortran. Để sử dụng chuyển đổi mã này, GCC phải được định cấu hình với --với-ppl
và --với-clog để kích hoạt cơ sở hạ tầng chuyển đổi vòng lặp Graphite.
-fgraphite-nhận dạng
Cho phép chuyển đổi danh tính cho than chì. Đối với mỗi SCoP, chúng tôi tạo
biểu diễn đa diện và biến đổi nó trở lại gimple. Sử dụng -fgraphite-nhận dạng
chúng ta có thể kiểm tra chi phí hoặc lợi ích của chuyển đổi GIMPLE -> GRAPHITE -> GIMPLE.
Một số tối ưu hóa tối thiểu cũng được thực hiện bởi trình tạo mã CLooG, như chỉ mục
tách và loại bỏ mã chết trong vòng lặp.
-floop-nest-tối ưu hóa
Bật trình tối ưu hóa tổ vòng lặp dựa trên ISL. Đây là trình tối ưu hóa tổ vòng lặp chung dựa trên
trên các thuật toán tối ưu hóa sao Diêm Vương. Nó tính toán cấu trúc vòng lặp được tối ưu hóa cho
dữ liệu-địa phương và song song. Tùy chọn này là thử nghiệm.
-floop-song song-tất cả
Sử dụng phân tích sự phụ thuộc dữ liệu Graphite để xác định các vòng lặp có thể được ghép song song.
Song song tất cả các vòng lặp có thể được phân tích để không chứa các phụ thuộc trong vòng lặp
mà không cần kiểm tra xem việc song song các vòng lặp có sinh lợi hay không.
-fcheck-data-deps
So sánh kết quả của một số máy phân tích sự phụ thuộc dữ liệu. Tùy chọn này được sử dụng cho
gỡ lỗi bộ phân tích sự phụ thuộc dữ liệu.
-ftree-loop-if-chuyển đổi
Cố gắng chuyển đổi các bước nhảy có điều kiện trong các vòng trong cùng thành ít nhánh hơn
tương đương. Mục đích là loại bỏ luồng điều khiển khỏi các vòng trong cùng theo thứ tự
để cải thiện khả năng xử lý các vòng lặp này của đường truyền vector hóa. Đây là
được bật theo mặc định nếu vector hóa được bật.
-ftree-loop-if-convert-store
Cố gắng cũng như chuyển đổi các bước nhảy có điều kiện có chứa bộ nhớ ghi. Cái này
chuyển đổi có thể không an toàn đối với các chương trình đa luồng vì nó biến đổi có điều kiện
bộ nhớ ghi vào bộ nhớ không điều kiện ghi. Ví dụ,
cho (i = 0; i <N; i ++)
nếu (chung cư)
A [i] = expr;
được chuyển thành
cho (i = 0; i <N; i ++)
A [i] = cond? expr: A [i];
có khả năng tạo ra các cuộc đua dữ liệu.
-phân phối vòng lặp tự do
Thực hiện phân phối vòng lặp. Cờ này có thể cải thiện hiệu suất bộ nhớ cache trên các phần thân của vòng lặp lớn
và cho phép tối ưu hóa vòng lặp hơn nữa, như song song hóa hoặc vectơ hóa, để thực hiện
địa điểm. Ví dụ, vòng lặp
TÔI = 1, N
A (I) = B (I) + C
D (I) = E (I) * F
KẾT THÚC
được chuyển thành
TÔI = 1, N
A (I) = B (I) + C
KẾT THÚC
TÔI = 1, N
D (I) = E (I) * F
KẾT THÚC
-ftree-loop-phân phối-các mẫu
Thực hiện phân phối vòng lặp của các mẫu có thể được tạo mã bằng các lệnh gọi đến
thư viện. Cờ này được bật theo mặc định tại -O3.
Đường chuyền này phân phối các vòng lặp khởi tạo và tạo ra lời gọi đến memset zero.
Ví dụ, vòng lặp
TÔI = 1, N
A (I) = 0
B (I) = A (I) + I
KẾT THÚC
được chuyển thành
TÔI = 1, N
A (I) = 0
KẾT THÚC
TÔI = 1, N
B (I) = A (I) + I
KẾT THÚC
và vòng lặp khởi tạo được chuyển thành lời gọi đến memset zero.
-ftree-loop-im
Thực hiện chuyển động bất biến vòng lặp trên cây. Đường chuyền này chỉ di chuyển bất biến khó
để xử lý ở cấp RTL (các lệnh gọi hàm, các hoạt động mở rộng đến các chuỗi không thường xuyên
của lót). Với -funswitch-vòng nó cũng di chuyển các toán hạng của các điều kiện
bất biến ngoài vòng lặp, để chúng tôi có thể sử dụng phân tích bất biến nhỏ trong
vòng lặp không chuyển động. Vượt qua cũng bao gồm chuyển động cửa hàng.
-ftree-loop-ivcanon
Tạo một bộ đếm chính tắc cho số lần lặp lại trong các vòng để xác định
số lần lặp yêu cầu phân tích phức tạp. Các tối ưu hóa sau đó có thể
xác định số một cách dễ dàng. Đặc biệt hữu ích liên quan đến việc mở cuộn.
-fivopts
Thực hiện tối ưu hóa biến cảm ứng (giảm cường độ, biến cảm ứng
hợp nhất và khử biến cảm ứng) trên cây.
-ftree-song song-vòng = n
Song song hóa các vòng lặp, tức là chia không gian lặp của chúng để chạy trong n luồng. Đây là
chỉ có thể đối với các vòng lặp có các lần lặp là độc lập và có thể tùy ý
sắp xếp lại. Việc tối ưu hóa chỉ mang lại lợi nhuận trên các máy đa xử lý, đối với các vòng lặp
sử dụng nhiều CPU, thay vì bị ràng buộc bởi băng thông bộ nhớ. Tùy chọn này
ngụ ý -pthreadvà do đó chỉ được hỗ trợ trên các mục tiêu có hỗ trợ
-pthread.
-ftree-pta
Thực hiện phân tích chức năng-địa phương-điểm-tới trên cây. Cờ này được bật theo mặc định
at -O và cao hơn.
-ftree-sra
Thực hiện thay thế vô hướng các tập hợp. Thẻ này thay thế các tham chiếu cấu trúc
với vô hướng để ngăn việc xác nhận cấu trúc vào bộ nhớ quá sớm. Lá cờ này là
được bật theo mặc định tại -O và cao hơn.
-ftree-copyrename
Thực hiện đổi tên bản sao trên cây. Vượt qua này cố gắng đổi tên thời gian tạm thời của trình biên dịch thành
các biến khác tại các vị trí sao chép, thường dẫn đến các tên biến
gần giống với các biến ban đầu. Cờ này được bật theo mặc định tại -O và
cao hơn.
-ftree-thanesce-inline-vars
Cho biết pass copyrename (xem -ftree-copyrename) để cố gắng kết hợp người dùng nhỏ-
các biến được xác định cũng vậy, nhưng chỉ khi chúng được nội dòng từ các hàm khác. Nó là một
hình thức hạn chế hơn của -ftree-thanesce-vars. Điều này có thể gây hại cho thông tin gỡ lỗi của
các biến nội tuyến, nhưng nó sẽ giữ các biến của hàm nội tuyến thành ngoài
nhau, sao cho chúng có nhiều khả năng chứa các giá trị mong đợi hơn trong một
phiên gỡ lỗi. Đây là cài đặt mặc định trong các phiên bản GCC cũ hơn 4.7.
-ftree-thanesce-vars
Cho biết pass copyrename (xem -ftree-copyrename) để cố gắng kết hợp người dùng nhỏ-
các biến được xác định cũng vậy, thay vì chỉ là thời gian tạm thời của trình biên dịch. Điều này có thể hạn chế nghiêm trọng
khả năng gỡ lỗi một chương trình được tối ưu hóa được biên dịch với -fno-var-theo dõi-phân công.
Ở dạng phủ định, cờ này ngăn SSA liên kết các biến người dùng, bao gồm
những cái nội tuyến. Tùy chọn này được kích hoạt theo mặc định.
-độ ba
Thực hiện thay thế biểu hiện tạm thời trong giai đoạn SSA-> bình thường. Duy nhất
sử dụng / tạm thời xác định một lần được thay thế tại vị trí sử dụng của chúng bằng xác định của chúng
biểu hiện. Điều này dẫn đến mã không phải GIMPLE, nhưng cung cấp cho các trình mở rộng nhiều hơn
cây phức tạp để làm việc dẫn đến tạo RTL tốt hơn. Điều này được kích hoạt bởi
mặc định tại -O và cao hơn.
-ftree-slsr
Thực hiện giảm cường độ đường thẳng trên cây. Điều này nhận ra có liên quan
các biểu thức liên quan đến phép nhân và thay thế chúng bằng các phép tính ít tốn kém hơn
khi có thể. Điều này được bật theo mặc định tại -O và cao hơn.
-vectơ hóa miễn phí
Thực hiện vectơ hóa vòng lặp trên cây. Cờ này được bật theo mặc định tại -O3.
-ftree-slp-vector hóa
Thực hiện vector hóa khối cơ bản trên cây. Cờ này được bật theo mặc định tại -O3 và
khi nào -vectơ hóa miễn phí được kích hoạt.
-fvect-chi phí-mô hình =kiểu mẫu
Thay đổi mô hình chi phí được sử dụng để vector hóa. Các kiểu mẫu đối số nên là một trong những
"không giới hạn", "năng động" hoặc "giá rẻ". Với mô hình "không giới hạn", mã được vector hóa-
đường dẫn được giả định là sinh lợi trong khi với mô hình "động", kiểm tra thời gian chạy sẽ
bảo vệ đường dẫn mã được vector hóa để chỉ bật nó cho số lần lặp lại có thể sẽ
thực thi nhanh hơn so với khi thực hiện vòng lặp vô hướng ban đầu. Mô hình "giá rẻ" sẽ
vô hiệu hóa vectơ hóa các vòng lặp, ví dụ như làm như vậy sẽ rất tốn kém
do thời gian chạy bắt buộc kiểm tra sự phụ thuộc hoặc liên kết dữ liệu nhưng nếu không thì bằng
sang mô hình "động". Mô hình chi phí mặc định phụ thuộc vào các cờ tối ưu hóa khác
và là "năng động" hoặc "rẻ".
-ftree-vrp
Thực hiện Nhân giống Phạm vi Giá trị trên cây. Điều này tương tự với sự lan truyền không đổi
vượt qua, nhưng thay vì giá trị, phạm vi giá trị được truyền. Điều này cho phép
trình tối ưu hóa để loại bỏ các kiểm tra phạm vi không cần thiết như kiểm tra giới hạn mảng và con trỏ null
Séc. Điều này được bật theo mặc định tại -O2 và cao hơn. Loại bỏ kiểm tra con trỏ rỗng
chỉ được thực hiện nếu -fdelete-null-con trỏ-kiểm tra được kích hoạt.
-ftracer
Thực hiện nhân bản đuôi để phóng to kích thước khối siêu lớn. Sự chuyển đổi này đơn giản hóa
luồng điều khiển của chức năng cho phép các tối ưu hóa khác thực hiện công việc tốt hơn.
-funroll-vòng
Bỏ cuộn các vòng có số lần lặp có thể được xác định tại thời điểm biên dịch hoặc khi
mục vào vòng lặp. -funroll-vòng ngụ ý -frerun-cse-sau-vòng lặp. Tùy chọn này làm cho
mã lớn hơn, và có thể làm cho nó chạy nhanh hơn hoặc không.
-funroll-all-loop
Bỏ cuộn tất cả các vòng lặp, ngay cả khi số lần lặp lại của chúng là không chắc chắn khi vòng lặp là
đã nhập. Điều này thường làm cho các chương trình chạy chậm hơn. -funroll-all-loop ngụ ý
các tùy chọn tương tự như -funroll-vòng,
-fsplit-ivs-in-unroller
Cho phép biểu thị các giá trị của biến cảm ứng trong các lần lặp lại sau của
vòng lặp không được cuộn bằng cách sử dụng giá trị trong lần lặp đầu tiên. Điều này phá vỡ sự phụ thuộc lâu dài
dây chuyền, do đó cải thiện hiệu quả của các lần vượt qua lịch trình.
Một sự kết hợp của -fweb và CSE thường là đủ để đạt được hiệu quả tương tự.
Tuy nhiên, điều đó không đáng tin cậy trong trường hợp thân vòng lặp phức tạp hơn
khối cơ bản duy nhất. Nó cũng không hoạt động trên một số kiến trúc do
hạn chế trong thẻ CSE.
Tối ưu hóa này được bật theo mặc định.
-fvariable-extension-in-unroller
Với tùy chọn này, trình biên dịch tạo nhiều bản sao của một số biến cục bộ khi
mở vòng lặp, điều này có thể dẫn đến mã vượt trội.
-fpartial-inline
Các phần nội tuyến của các hàm. Tùy chọn này chỉ có bất kỳ tác dụng nào khi nội tuyến chính nó là
được bật bởi -finline-các chức năng or -finline-chức năng nhỏ tùy chọn.
Đã bật ở cấp độ -O2.
-fpredive-commoning
Thực hiện tối ưu hóa khởi động dự đoán, tức là sử dụng lại các phép tính (đặc biệt là
tải và lưu trữ bộ nhớ) được thực hiện trong các lần lặp trước của vòng lặp.
Tùy chọn này được bật ở cấp độ -O3.
-fprefetch-loop-mảng
Nếu được máy đích hỗ trợ, hãy tạo hướng dẫn để tìm nạp trước bộ nhớ
cải thiện hiệu suất của các vòng lặp truy cập các mảng lớn.
Tùy chọn này có thể tạo mã tốt hơn hoặc xấu hơn; kết quả phụ thuộc nhiều vào
cấu trúc của các vòng trong mã nguồn.
Bị vô hiệu hóa ở cấp độ -Bạn.
-fno-lỗ nhìn trộm
-fno-lỗ nhìn trộm2
Tắt mọi tối ưu hóa lỗ nhìn trộm dành riêng cho máy. Sự khác biệt giữa
-fno-lỗ nhìn trộm và -fno-lỗ nhìn trộm2 là cách chúng được triển khai trong trình biên dịch; một vài
mục tiêu sử dụng một, một số sử dụng khác, một số ít sử dụng cả hai.
-fpeephole được bật theo mặc định. -fpeephole2 được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-fno-đoán-nhánh-xác suất
Không đoán xác suất nhánh bằng cách sử dụng phương pháp phỏng đoán.
GCC sử dụng phương pháp heuristics để đoán xác suất chi nhánh nếu chúng không được cung cấp bởi
phản hồi hồ sơ (-fprofile-arc). Các kinh nghiệm này dựa trên luồng điều khiển
đồ thị. Nếu một số xác suất nhánh được xác định bởi __buildin_expect, sau đó
heuristics được sử dụng để đoán xác suất nhánh cho phần còn lại của luồng kiểm soát
đồ thị, lấy __buildin_expect thông tin vào tài khoản. Sự tương tác giữa
heuristics và __buildin_expect có thể phức tạp và trong một số trường hợp, nó có thể hữu ích
vô hiệu hóa heuristics để các tác động của __buildin_expect dễ dàng hơn
hiểu không.
Mặc định là -fguess-chi nhánh-xác suất ở các cấp độ -O, -O2, -O3, -Bạn.
-freorder-khối
Sắp xếp lại các khối cơ bản trong hàm đã biên dịch để giảm số lần thực hiện
các chi nhánh và cải thiện địa phương mã.
Được kích hoạt ở các cấp độ -O2, -O3.
-freorder-khối-và-phân vùng
Ngoài việc sắp xếp lại các khối cơ bản trong hàm đã biên dịch, để giảm
Số nhánh đã lấy, phân chia khối cơ bản nóng lạnh thành các phần riêng biệt
của tập hợp và tệp .o, để cải thiện hiệu suất phân trang và bộ đệm ẩn cục bộ.
Tính năng tối ưu hóa này tự động bị tắt khi có xử lý ngoại lệ,
cho các phần liên kết, cho các chức năng có thuộc tính phần do người dùng xác định và trên bất kỳ
kiến trúc không hỗ trợ các phần được đặt tên.
-freorder-chức năng
Sắp xếp lại các chức năng trong tệp đối tượng để cải thiện vị trí mã. Đây là
được triển khai bằng cách sử dụng các tiểu mục đặc biệt ".text.hot" để được thực thi thường xuyên nhất
các hàm và ".text.unliosystem" cho các hàm không thực thi được. Việc sắp xếp lại được thực hiện bởi
trình liên kết để định dạng tệp đối tượng phải hỗ trợ các phần được đặt tên và trình liên kết phải đặt
chúng một cách hợp lý.
Ngoài ra, phản hồi hồ sơ phải có sẵn để làm cho tùy chọn này hiệu quả. Nhìn thấy
-fprofile-arc để biết thêm chi tiết.
Được kích hoạt ở các cấp độ -O2, -O3, -Bạn.
-fstrict-aliasing
Cho phép trình biên dịch giả định các quy tắc răng cưa nghiêm ngặt nhất áp dụng cho ngôn ngữ
đang được biên dịch. Đối với C (và C ++), điều này sẽ kích hoạt tối ưu hóa dựa trên loại
biểu thức. Đặc biệt, một đối tượng của một loại được cho là không bao giờ cư trú tại
cùng địa chỉ với một đối tượng thuộc kiểu khác, trừ khi các kiểu gần như giống nhau.
Ví dụ: "unsigned int" có thể là bí danh "int", nhưng không phải là "void *" hoặc "double". MỘT
kiểu ký tự có thể là bí danh bất kỳ kiểu nào khác.
Đặc biệt chú ý đến mã như thế này:
công đoàn a_union {
int tôi;
gấp đôi d;
};
int f () {
công đoàn a_công đoàn t;
td = 3.0;
trả lại ti;
}
Tập đọc của một đoàn viên khác với đoàn viên gần đây nhất
được viết cho (được gọi là "type-punning") là phổ biến. Ngay cả với -fstrict-aliasing, kiểu-
punning được cho phép, miễn là bộ nhớ được truy cập thông qua loại liên hợp. Nên
mã trên hoạt động như mong đợi. Tuy nhiên, mã này có thể không:
int f () {
công đoàn a_công đoàn t;
int * ip;
td = 3.0;
ip = & t.i;
trả về * ip;
}
Tương tự, truy cập bằng cách lấy địa chỉ, truyền con trỏ kết quả và
tham chiếu đến kết quả có hành vi không xác định, ngay cả khi kết hợp sử dụng kiểu liên hợp,
ví dụ:
int f () {
đôi d = 3.0;
return ((union a_union *) & d) -> i;
}
Sản phẩm -fstrict-aliasing tùy chọn được bật ở các cấp độ -O2, -O3, -Bạn.
-fstrict-tràn
Cho phép trình biên dịch giả định các quy tắc tràn đã ký nghiêm ngặt, tùy thuộc vào ngôn ngữ
đang được biên dịch. Đối với C (và C ++), điều này có nghĩa là tràn khi thực hiện số học với
số có dấu là không xác định, có nghĩa là trình biên dịch có thể cho rằng nó không
xảy ra. Điều này cho phép các tối ưu hóa khác nhau. Ví dụ, trình biên dịch giả định rằng
một biểu thức như "i + 10> i" luôn đúng với "i" có dấu. Giả định này là
chỉ hợp lệ nếu tràn có dấu là không xác định, vì biểu thức là sai nếu "i + 10"
tràn khi sử dụng số học bổ sung hai phần. Khi tùy chọn này có hiệu lực, bất kỳ
cố gắng xác định xem có phải viết một thao tác trên tràn số có dấu hay không
cẩn thận để không thực sự liên quan đến tràn.
Tùy chọn này cũng cho phép trình biên dịch giả định ngữ nghĩa con trỏ nghiêm ngặt:
con trỏ tới một đối tượng, nếu việc thêm một độ lệch vào con trỏ đó không tạo ra một con trỏ
cho cùng một đối tượng, việc bổ sung là không xác định. Điều này cho phép trình biên dịch kết luận
rằng "p + u> p" luôn đúng với một con trỏ "p" và số nguyên không dấu "u". Cái này
giả định chỉ hợp lệ vì bao quanh con trỏ là không xác định, vì biểu thức là
false nếu "p + u" tràn bằng cách sử dụng số học bổ sung hai phần.
Xem thêm -fwrapv Lựa chọn. Sử dụng -fwrapv có nghĩa là tràn số nguyên có dấu là
được định nghĩa đầy đủ: nó kết thúc. Khi nào -fwrapv được sử dụng, không có sự khác biệt giữa
-fstrict-tràn và -fno-nghiêm ngặt-tràn cho số nguyên. Với -fwrapv một số loại
tràn được cho phép. Ví dụ: nếu trình biên dịch bị tràn khi thực hiện
số học trên hằng số, giá trị bị tràn vẫn có thể được sử dụng với -fwrapv, Nhưng không
nếu không thì.
Sản phẩm -fstrict-tràn tùy chọn được bật ở các cấp độ -O2, -O3, -Bạn.
-falign-các chức năng
-falign-functions =n
Căn chỉnh phần bắt đầu của các chức năng thành lũy thừa của hai tiếp theo lớn hơn n, bỏ qua n
byte. Ví dụ, -falign-functions = 32 căn chỉnh các chức năng thành 32 byte tiếp theo
ranh giới, nhưng -falign-functions = 24 căn chỉnh với ranh giới 32 byte tiếp theo chỉ khi điều này
có thể được thực hiện bằng cách bỏ qua 23 byte hoặc ít hơn.
-fno-align-chức năng và -falign-functions = 1 tương đương và có nghĩa là các chức năng
không thẳng hàng.
Một số nhà lắp ráp chỉ hỗ trợ cờ này khi n là một sức mạnh của hai; trong trường hợp đó, nó là
làm tròn.
If n không được chỉ định hoặc bằng XNUMX, hãy sử dụng mặc định phụ thuộc vào máy.
Được kích hoạt ở các cấp độ -O2, -O3.
-falign-nhãn
-falign-label =n
Căn chỉnh tất cả các mục tiêu nhánh theo ranh giới lũy thừa hai, bỏ qua n byte như
-falign-các chức năng. Tùy chọn này có thể dễ dàng làm cho mã chậm hơn, vì nó phải chèn
hoạt động giả khi đạt được mục tiêu nhánh trong luồng mã thông thường.
-fno-align-label và -falign-label = 1 tương đương và có nghĩa là các nhãn không
thẳng hàng.
If -falign-vòng or -falign-nhảy có thể áp dụng và lớn hơn giá trị này, khi đó
giá trị của chúng được sử dụng thay thế.
If n không được chỉ định hoặc bằng XNUMX, hãy sử dụng mặc định phụ thuộc vào máy, điều này rất có thể
được 1, nghĩa là không có sự liên kết.
Được kích hoạt ở các cấp độ -O2, -O3.
-falign-vòng
-falign-vòng =n
Căn chỉnh các vòng lặp theo ranh giới lũy thừa của hai, bỏ qua n byte như -falign-các chức năng.
Nếu các vòng lặp được thực thi nhiều lần, điều này sẽ bù đắp cho bất kỳ quá trình thực thi giả nào
hoạt động.
-fno-align-vòng và -falign-vòng = 1 là tương đương và có nghĩa là các vòng lặp không
thẳng hàng.
If n không được chỉ định hoặc bằng XNUMX, hãy sử dụng mặc định phụ thuộc vào máy.
Được kích hoạt ở các cấp độ -O2, -O3.
-falign-nhảy
-falign-jumps =n
Căn chỉnh mục tiêu nhánh thành ranh giới lũy thừa hai, đối với mục tiêu nhánh có mục tiêu
chỉ có thể đạt được bằng cách nhảy, bỏ qua n byte như -falign-các chức năng. Trong
trong trường hợp này, không cần thực hiện thao tác giả nào.
-fno-align-nhảy và -falign-jumps = 1 là tương đương và có nghĩa là các vòng lặp không
thẳng hàng.
If n không được chỉ định hoặc bằng XNUMX, hãy sử dụng mặc định phụ thuộc vào máy.
Được kích hoạt ở các cấp độ -O2, -O3.
-funit-at-a-time
Tùy chọn này được để lại vì lý do tương thích. -funit-at-a-time không có hiệu lực, trong khi
-fno-đơn vị-tại-một-thời điểm ngụ ý -fno-toplevel-sắp xếp lại và -fno-section-anchor.
Được bật theo mặc định.
-fno-toplevel-sắp xếp lại
Không sắp xếp lại các hàm, biến và câu lệnh "asm" cấp cao nhất. Xuất chúng trong
cùng thứ tự mà chúng xuất hiện trong tệp đầu vào. Khi tùy chọn này được sử dụng,
các biến tĩnh không được tham chiếu sẽ không bị loại bỏ. Tùy chọn này nhằm hỗ trợ
mã hiện có dựa trên một thứ tự cụ thể. Đối với mã mới, tốt hơn là sử dụng
thuộc tính.
Đã bật ở cấp độ -O0. Khi bị vô hiệu hóa một cách rõ ràng, nó cũng ngụ ý -fno-section-anchor,
mặt khác được kích hoạt tại -O0 trên một số mục tiêu.
-fweb
Xây dựng các trang web thường được sử dụng cho mục đích phân bổ đăng ký và chỉ định mỗi trang web
sổ đăng ký giả cá nhân. Điều này cho phép thẻ cấp phát thanh ghi hoạt động trên
trực tiếp giả, nhưng cũng tăng cường một số vượt qua tối ưu hóa khác, chẳng hạn như CSE,
trình tối ưu hóa vòng lặp và loại bỏ mã chết tầm thường. Tuy nhiên, nó có thể thực hiện gỡ lỗi
không thể, vì các biến không còn ở trong "home register".
Được bật theo mặc định với -funroll-vòng.
-fwhole-chương trình
Giả sử rằng đơn vị biên dịch hiện tại đại diện cho toàn bộ chương trình đang được biên dịch.
Tất cả các hàm và biến công khai ngoại trừ "main" và những biến và hàm được hợp nhất bởi
thuộc tính "externally_visible" trở thành các hàm tĩnh và có hiệu lực là được tối ưu hóa
mạnh mẽ hơn bởi các trình tối ưu hóa liên thủ tục.
Tùy chọn này không nên được sử dụng kết hợp với "-flto". Thay vào đó dựa vào một
plugin liên kết phải cung cấp thông tin an toàn và chính xác hơn.
-flto [=n]
Tùy chọn này chạy trình tối ưu hóa thời gian liên kết tiêu chuẩn. Khi được gọi bằng mã nguồn, nó
tạo GIMPLE (một trong những đại diện nội bộ của GCC) và ghi nó vào ELF đặc biệt
các phần trong tệp đối tượng. Khi các tệp đối tượng được liên kết với nhau, tất cả
các cơ quan chức năng được đọc từ các phần ELF này và được khởi tạo như thể chúng đã từng
một phần của cùng một đơn vị dịch.
Để sử dụng trình tối ưu hóa thời gian liên kết, -flto cần được chỉ định tại thời điểm biên dịch và trong thời gian
liên kết cuối cùng. Ví dụ:
gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o
Hai lệnh gọi đầu tiên tới GCC lưu một biểu diễn bytecode của GIMPLE thành đặc biệt
Các phần ELF bên trong foo.o và thanh.o. Lời gọi cuối cùng đọc mã bytecode GIMPLE
từ foo.o và thanh.o, hợp nhất hai tệp thành một hình ảnh nội bộ duy nhất và biên dịch
kết quả như bình thường. Từ khi cả hai foo.o và thanh.o được hợp nhất thành một hình ảnh duy nhất, cái này
khiến tất cả các phân tích và tối ưu hóa liên thủ tục trong GCC hoạt động trên
hai tệp như thể chúng là một tệp duy nhất. Điều này có nghĩa là, ví dụ, rằng bộ nội tuyến là
có thể nội dòng các chức năng trong thanh.o vào các chức năng trong foo.o và ngược lại.
Một cách khác (đơn giản hơn) để kích hoạt tối ưu hóa thời gian liên kết là:
gcc -o myprog -flto -O2 foo.c bar.c
Ở trên tạo bytecode cho foo.c và thanh.c, kết hợp chúng lại với nhau thành một
Biểu diễn GIMPLE và tối ưu hóa chúng như bình thường để sản xuất myprog.
Điều quan trọng duy nhất cần ghi nhớ là để kích hoạt tối ưu hóa thời gian liên kết,
-flto cờ cần được chuyển cho cả lệnh biên dịch và liên kết.
Để tối ưu hóa toàn bộ chương trình có hiệu quả, cần phải thực hiện một số
giả định của chương trình. Trình biên dịch cần biết những hàm và biến nào có thể
được truy cập bởi các thư viện và thời gian chạy bên ngoài đơn vị được tối ưu hóa thời gian liên kết. Khi nào
được hỗ trợ bởi trình liên kết, plugin trình liên kết (xem -fuse-linker-plugin) vượt qua
thông tin cho trình biên dịch về các ký hiệu đã sử dụng và có thể nhìn thấy bên ngoài. Khi mà
plugin trình liên kết không khả dụng, -fwhole-chương trình nên được sử dụng để cho phép trình biên dịch
để đưa ra các giả định này, dẫn đến các quyết định tối ưu hóa linh hoạt hơn.
Lưu ý rằng khi một tệp được biên dịch với -flto, tệp đối tượng được tạo lớn hơn
một tệp đối tượng thông thường vì nó chứa mã bytecodes GIMPLE và mã cuối cùng thông thường.
Điều này có nghĩa là các tệp đối tượng có thông tin LTO có thể được liên kết như đối tượng bình thường
các tập tin; nếu như -flto không được chuyển đến trình liên kết, không có tối ưu hóa liên thủ tục
đã áp dụng.
Ngoài ra, các cờ tối ưu hóa được sử dụng để biên dịch các tệp riêng lẻ không
nhất thiết phải liên quan đến những người được sử dụng tại thời gian liên kết. Ví dụ,
gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -O3 foo.o bar.o
Điều này tạo ra các tệp đối tượng riêng lẻ với mã trình hợp dịch chưa được tối ưu hóa, nhưng
kết quả nhị phân myprog được tối ưu hóa tại -O3. Nếu, thay vào đó, nhị phân cuối cùng là
được tạo ra mà không có -fltothì myprog không được tối ưu hóa.
Khi tạo tệp nhị phân cuối cùng với -flto, GCC chỉ áp dụng tối ưu hóa thời gian liên kết
vào những tệp có chứa mã bytecode. Do đó, bạn có thể trộn và kết hợp các tệp đối tượng
và các thư viện với mã byte GIMPLE và mã đối tượng cuối cùng. GCC tự động chọn
tệp nào cần tối ưu hóa ở chế độ LTO và tệp nào cần liên kết mà không cần thêm
Chế biến.
Có một số cờ tạo mã được GCC lưu giữ khi tạo mã bytecodes, như
chúng cần được sử dụng trong giai đoạn liên kết cuối cùng. Hiện tại, các tùy chọn sau
được lưu vào tệp GIMPLE bytecode: -fPIC, -thường xuyên và tất cả -m cờ mục tiêu.
Tại thời điểm liên kết, các tùy chọn này được đọc và áp dụng lại. Lưu ý rằng hiện tại
triển khai không cố gắng nhận ra các giá trị xung đột cho các tùy chọn này. Nếu như
các tệp khác nhau có các giá trị tùy chọn xung đột (ví dụ: một tệp được biên dịch với -fPIC
và cái khác thì không), trình biên dịch chỉ đơn giản sử dụng giá trị cuối cùng được đọc từ mã bytecode
các tập tin. Do đó, bạn nên biên dịch tất cả các tệp tham gia vào
cùng một liên kết với các tùy chọn giống nhau.
Nếu LTO gặp các đối tượng có liên kết C được khai báo với các loại không tương thích riêng biệt
các đơn vị dịch thuật được liên kết với nhau (hành vi không xác định theo ISO C99
6.2.7), một chẩn đoán không gây tử vong có thể được đưa ra. Hành vi vẫn chưa được xác định khi chạy
thời gian.
Một tính năng khác của LTO là có thể áp dụng tối ưu hóa liên thủ tục
trên các tệp được viết bằng các ngôn ngữ khác nhau. Điều này yêu cầu hỗ trợ về ngôn ngữ
kết thúc. Hiện tại, giao diện người dùng C, C ++ và Fortran có khả năng phát ra GIMPLE
bytecodes, vì vậy một cái gì đó như thế này sẽ hoạt động:
gcc -c -flto foo.c
g ++ -c -flto bar.cc
gfortran -c -flto baz.f90
g ++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
Lưu ý rằng liên kết cuối cùng được thực hiện với g ++ để lấy các thư viện thời gian chạy C ++ và
-lgfortran được thêm vào để lấy các thư viện thời gian chạy Fortran. Nói chung, khi trộn
ngôn ngữ ở chế độ LTO, bạn nên sử dụng các tùy chọn lệnh liên kết giống như khi trộn
ngôn ngữ trong biên dịch thông thường (không phải LTO); tất cả những gì bạn cần thêm là -flto cho tất cả các
biên dịch và liên kết các lệnh.
Nếu tệp đối tượng chứa mã bytecode GIMPLE được lưu trữ trong kho lưu trữ thư viện, hãy nói
libfoo.a, có thể trích xuất và sử dụng chúng trong liên kết LTO nếu bạn đang sử dụng
trình liên kết có hỗ trợ plugin. Để bật tính năng này, hãy sử dụng cờ -fuse-linker-plugin
tại thời điểm liên kết:
gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo
Với plugin trình liên kết được bật, trình liên kết sẽ trích xuất các tệp GIMPLE cần thiết từ
libfoo.a và chuyển chúng cho GCC đang chạy để biến chúng thành một phần của tổng hợp
Hình ảnh GIMPLE được tối ưu hóa.
Nếu bạn không sử dụng trình liên kết có hỗ trợ plugin và / hoặc không bật trình liên kết
plugin, sau đó là các đối tượng bên trong libfoo.a được trích xuất và liên kết như bình thường, nhưng chúng
không tham gia vào quá trình tối ưu hóa LTO.
Tối ưu hóa thời gian liên kết không yêu cầu sự hiện diện của toàn bộ chương trình để hoạt động.
Nếu chương trình không yêu cầu xuất ký hiệu nào thì có thể kết hợp
-flto và -fwhole-chương trình để cho phép các trình tối ưu hóa liên thủ tục sử dụng nhiều hơn
các giả định tích cực có thể dẫn đến các cơ hội tối ưu hóa được cải thiện. Sử dụng
-fwhole-chương trình không cần thiết khi plugin trình liên kết đang hoạt động (xem -fuse-linker-plugin).
Việc triển khai LTO hiện tại không cố gắng tạo ra mã bytecode đó là
di động giữa các loại máy chủ khác nhau. Các tệp bytecode được tạo phiên bản và ở đó
là kiểm tra phiên bản nghiêm ngặt, vì vậy các tệp bytecode được tạo trong một phiên bản GCC sẽ không
làm việc với phiên bản GCC cũ hơn / mới hơn.
Tối ưu hóa thời gian liên kết không hoạt động tốt với việc tạo thông tin gỡ lỗi.
Kết hợp -flto với -g hiện đang thử nghiệm và dự kiến sẽ tạo ra sai
kết quả.
Nếu bạn chỉ định tùy chọn n, việc tối ưu hóa và tạo mã được thực hiện tại thời điểm liên kết
được thực hiện song song bằng cách sử dụng n công việc song song bằng cách sử dụng một làm cho chương trình.
Biến môi trường MAKE có thể được sử dụng để ghi đè chương trình được sử dụng. Mặc định
giá trị cho n là 1.
Bạn cũng có thể chỉ định -flto = máy chủ công việc sử dụng chế độ máy chủ công việc của GNU make để xác định
số lượng công việc song song. Điều này hữu ích khi Makefile gọi GCC đã được
thực hiện song song. Bạn phải thêm một + đến công thức lệnh trong cha mẹ
Makefile để cái này hoạt động. Tùy chọn này có thể chỉ hoạt động nếu MAKE là GNU thực hiện.
Tùy chọn này được tắt theo mặc định.
-flto-partition =loài rong
Chỉ định thuật toán phân vùng được sử dụng bởi trình tối ưu hóa thời gian liên kết. Giá trị là
"1to1" để chỉ định phân vùng sao chép các tệp nguồn ban đầu hoặc
"cân bằng" để chỉ định phân vùng thành các phần có kích thước bằng nhau (bất cứ khi nào có thể) hoặc
"max" để tạo phân vùng mới cho mọi ký hiệu nếu có thể. Chỉ định "không" là
một thuật toán vô hiệu hóa hoàn toàn tính năng phân vùng và phát trực tuyến. Giá trị mặc định là
"cân bằng". Mặc dù "1to1" có thể được sử dụng như một giải pháp thay thế cho các thứ tự mã khác nhau
vấn đề, phân vùng "tối đa" chỉ dành cho thử nghiệm nội bộ.
-flto-nén-cấp =n
Tùy chọn này chỉ định mức độ nén được sử dụng cho ngôn ngữ trung gian được viết
đối với tệp đối tượng LTO và chỉ có ý nghĩa khi kết hợp với chế độ LTO (-flto).
Các giá trị hợp lệ là 0 (không nén) đến 9 (nén tối đa). Giá trị bên ngoài này
phạm vi được kẹp vào 0 hoặc 9. Nếu tùy chọn không được cung cấp, một số dư mặc định
cài đặt nén được sử dụng.
-flo-báo cáo
In báo cáo với các chi tiết nội bộ về hoạt động của trình tối ưu hóa thời gian liên kết. Các
nội dung của báo cáo này khác nhau giữa các phiên bản. Nó có nghĩa là hữu ích cho GCC
nhà phát triển khi xử lý tệp đối tượng ở chế độ LTO (thông qua -flto).
Vô hiệu hóa theo mặc định.
-fuse-linker-plugin
Cho phép sử dụng plugin trình liên kết trong quá trình tối ưu hóa thời gian liên kết. Tùy chọn này dựa vào
hỗ trợ plugin trong trình liên kết, có sẵn bằng vàng hoặc trong GNU ld 2.21 hoặc
mới hơn.
Tùy chọn này cho phép trích xuất các tệp đối tượng với mã bytecode GIMPLE ngoài thư viện
kho lưu trữ. Điều này cải thiện chất lượng tối ưu hóa bằng cách hiển thị nhiều mã hơn cho liên kết-
trình tối ưu hóa thời gian. Thông tin này chỉ định những biểu tượng nào có thể được truy cập từ bên ngoài
(bởi đối tượng không phải LTO hoặc trong quá trình liên kết động). Kết quả là cải tiến chất lượng mã trên
nhị phân (và thư viện được chia sẻ sử dụng chế độ hiển thị ẩn) tương tự như
"-fwhole-chương trình". Nhìn thấy -flto để biết mô tả về tác dụng của lá cờ này và cách
sử dụng nó.
Tùy chọn này được bật theo mặc định khi hỗ trợ LTO trong GCC được bật và GCC là
được cấu hình để sử dụng với trình liên kết hỗ trợ plugin (GNU ld 2.21 trở lên hoặc vàng).
-ffat-lto-đối tượng
Đối tượng Fat LTO là các tệp đối tượng chứa cả ngôn ngữ trung gian và
mã đối tượng. Điều này làm cho chúng có thể sử dụng được cho cả liên kết LTO và liên kết bình thường. Cái này
tùy chọn chỉ có hiệu quả khi biên dịch với -flto và bị bỏ qua tại thời điểm liên kết.
-fno-fat-lto-đối tượng cải thiện thời gian biên dịch so với LTO thuần túy, nhưng yêu cầu
chuỗi công cụ hoàn chỉnh để nhận biết về LTO. Nó yêu cầu một trình liên kết có hỗ trợ plugin trình liên kết
cho chức năng cơ bản. Ngoài ra, nm, ar và ranlib cần hỗ trợ trình liên kết
các plugin để cho phép một môi trường xây dựng đầy đủ tính năng (có khả năng xây dựng tĩnh
thư viện, v.v.). GCC cung cấp gcc-ar, gcc-nm, gcc-ranlib giấy gói để vượt qua
các tùy chọn phù hợp với các công cụ này. Với các cấu hình LTO không béo cần được sửa đổi để sử dụng
Chúng.
Mặc định là -ffat-lto-đối tượng nhưng mặc định này sẽ thay đổi trong tương lai
phát hành khi môi trường kích hoạt plugin trình liên kết trở nên phổ biến hơn.
-fso sánh-elim
Sau khi phân bổ thanh ghi và phân bổ lệnh sau đăng ký, hãy xác định
hướng dẫn số học tính toán cờ bộ xử lý tương tự như phép toán so sánh
dựa trên số học đó. Nếu có thể, hãy loại bỏ thao tác so sánh rõ ràng.
Thẻ này chỉ áp dụng cho một số mục tiêu nhất định không thể đại diện rõ ràng cho
hoạt động so sánh trước khi cấp phát thanh ghi hoàn tất.
Được kích hoạt ở các cấp độ -O, -O2, -O3, -Bạn.
-fuse-ld = bfd
Sử dụng bạn trai trình liên kết thay vì trình liên kết mặc định.
-fuse-ld = vàng
Sử dụng vàng trình liên kết thay vì trình liên kết mặc định.
-fcprop-đăng ký
Sau khi phân bổ thanh ghi và phân bổ lệnh sau đăng ký, hãy thực hiện
một thẻ truyền bản sao để cố gắng giảm bớt sự phụ thuộc vào lịch trình và đôi khi
loại bỏ các bản sao.
Được kích hoạt ở các cấp độ -O, -O2, -O3, -Bạn.
-fprofile-Correction
Các cấu hình được thu thập bằng cách sử dụng nhị phân công cụ cho các chương trình đa luồng có thể
không nhất quán do cập nhật bộ đếm bị bỏ lỡ. Khi tùy chọn này được chỉ định, GCC sử dụng
heuristics để sửa chữa hoặc giải quyết những mâu thuẫn như vậy. Theo mặc định, GCC phát ra một
thông báo lỗi khi một cấu hình không nhất quán được phát hiện.
-fprofile-dir =con đường
Đặt thư mục để tìm kiếm các tệp dữ liệu hồ sơ trong con đường. Tùy chọn này
chỉ ảnh hưởng đến dữ liệu hồ sơ được tạo bởi -fprofile-create, -phải bảo hiểm tốt nhất,
-fprofile-arc và được sử dụng bởi -fprofile-sử dụng và -fbranch-xác suất và nó liên quan
tùy chọn. Cả hai đường dẫn tuyệt đối và tương đối đều có thể được sử dụng. Theo mặc định, GCC sử dụng
thư mục hiện tại là con đường, do đó tệp dữ liệu hồ sơ xuất hiện trong cùng một thư mục với
tệp đối tượng.
-fprofile-create
-fprofile-create =con đường
Kích hoạt các tùy chọn thường được sử dụng cho ứng dụng thiết bị để tạo ra hồ sơ hữu ích
để biên dịch lại sau này với tối ưu hóa dựa trên phản hồi hồ sơ. Bạn phải dùng
-fprofile-create cả khi biên dịch và khi liên kết chương trình của bạn.
Các tùy chọn sau được bật: "-fprofile-arcs", "-fprofile-values", "-fvpt".
If con đường được chỉ định, GCC xem xét con đường để tìm các tệp dữ liệu phản hồi hồ sơ.
Xem -fprofile-dir.
-fprofile-sử dụng
-fprofile-use =con đường
Bật tính năng tối ưu hóa theo hướng phản hồi hồ sơ và tối ưu hóa thường sinh lợi
chỉ với phản hồi hồ sơ có sẵn.
Các tùy chọn sau được bật: "-fbranch-probilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer", "-ftree-vectorize",
"ftree-loop-Distribution-styles"
Theo mặc định, GCC phát ra thông báo lỗi nếu cấu hình phản hồi không khớp với
mã nguồn. Lỗi này có thể được chuyển thành cảnh báo bằng cách sử dụng -Phù hợp-không phù hợp.
Lưu ý rằng điều này có thể dẫn đến mã được tối ưu hóa kém.
If con đường được chỉ định, GCC xem xét con đường để tìm các tệp dữ liệu phản hồi hồ sơ.
Xem -fprofile-dir.
Các tùy chọn sau kiểm soát hành vi của trình biên dịch liên quan đến số học dấu phẩy động.
Các tùy chọn này đánh đổi giữa tốc độ và tính đúng đắn. Tất cả phải được kích hoạt cụ thể.
-cửa hàng vải thô
Không lưu trữ các biến dấu phẩy động trong sổ đăng ký và hạn chế các tùy chọn khác
có thể thay đổi liệu giá trị dấu phẩy động có được lấy từ thanh ghi hoặc bộ nhớ hay không.
Tùy chọn này ngăn chặn độ chính xác vượt quá không mong muốn trên các máy như 68000 trong đó
các thanh ghi nổi (của 68881) giữ độ chính xác cao hơn so với "kép" được cho là
có. Tương tự như vậy đối với kiến trúc x86. Đối với hầu hết các chương trình, độ chính xác vượt quá
chỉ hoạt động tốt, nhưng một số chương trình dựa trên định nghĩa chính xác của IEEE nổi
chỉ trỏ. Sử dụng -cửa hàng vải thô đối với các chương trình như vậy, sau khi sửa đổi chúng để lưu trữ tất cả
tính toán trung gian thích hợp thành các biến.
-fexcess-precision =phong cách
Tùy chọn này cho phép kiểm soát nhiều hơn đối với độ chính xác vượt quá trên các máy có
thanh ghi điểm có độ chính xác cao hơn các loại IEEE "float" và "double" và
bộ xử lý không hỗ trợ các hoạt động làm tròn đến các loại đó. Theo mặc định,
-fexcess-precision = nhanh chóng đang có hiệu lực; điều này có nghĩa là các hoạt động được thực hiện trong
độ chính xác của các thanh ghi và không thể đoán trước được khi làm tròn thành các kiểu
được chỉ định trong mã nguồn diễn ra. Khi biên dịch C, nếu
-fexcess-precision = standard được chỉ định thì độ chính xác vượt quá sẽ tuân theo các quy tắc
quy định trong ISO C99; đặc biệt, cả phôi và phép gán đều làm cho các giá trị được
được làm tròn thành các kiểu ngữ nghĩa của chúng (trong khi -cửa hàng vải thô chỉ ảnh hưởng đến bài tập).
Tùy chọn này được bật theo mặc định cho C nếu một tùy chọn tuân thủ nghiêm ngặt chẳng hạn như
-std = c99 Được sử dụng.
-fexcess-precision = standard không được triển khai cho các ngôn ngữ khác ngoài C và không có
có hiệu lực nếu -funsafe-math-Optimizations or -ffast-toán được quy định. Trên x86, nó
cũng không có hiệu lực nếu -mfpmath = sse or -mfpmath = sse + 387 được quy định; trước đây
trường hợp, ngữ nghĩa IEEE được áp dụng mà không có độ chính xác vượt quá và trong trường hợp sau, làm tròn là
không thể đoán trước.
-ffast-toán
bộ -fno-toán-errno, -funsafe-math-Optimizations, -ffinite-math-chỉ,
-fno-rounding-toán, -fno-signal-nans và -fcx-phạm vi giới hạn.
Tùy chọn này khiến macro bộ xử lý trước "__FAST_MATH__" được xác định.
Tùy chọn này không được bật bởi bất kỳ -O tùy chọn bên cạnh -Ăn sáng vì nó có thể dẫn đến
đầu ra không chính xác cho các chương trình phụ thuộc vào việc triển khai chính xác IEEE hoặc ISO
quy tắc / thông số kỹ thuật cho các hàm toán học. Tuy nhiên, nó có thể mang lại mã nhanh hơn cho
các chương trình không yêu cầu đảm bảo các thông số kỹ thuật này.
-fno-toán-errno
Không đặt "errno" sau khi gọi các hàm toán học được thực thi với một
hướng dẫn, ví dụ: "sqrt". Một chương trình dựa trên các ngoại lệ IEEE cho lỗi toán học
việc xử lý có thể muốn sử dụng cờ này để tăng tốc độ trong khi vẫn duy trì số học IEEE
khả năng tương thích.
Tùy chọn này không được bật bởi bất kỳ -O vì nó có thể dẫn đến đầu ra không chính xác
cho các chương trình phụ thuộc vào việc triển khai chính xác IEEE hoặc ISO
quy tắc / thông số kỹ thuật cho các hàm toán học. Tuy nhiên, nó có thể mang lại mã nhanh hơn cho
các chương trình không yêu cầu đảm bảo các thông số kỹ thuật này.
Mặc định là -fmath-errno.
Trên hệ thống Darwin, thư viện toán học không bao giờ đặt "errno". Do đó không có lý do
để trình biên dịch xem xét khả năng nó có thể xảy ra, và -fno-toán-errno là
mặc định.
-funsafe-math-Optimizations
Cho phép tối ưu hóa số học dấu phẩy động (a) giả sử rằng các đối số và
kết quả hợp lệ và (b) có thể vi phạm tiêu chuẩn IEEE hoặc ANSI. Khi được sử dụng tại thời điểm liên kết,
nó có thể bao gồm các thư viện hoặc tệp khởi động thay đổi từ điều khiển FPU mặc định hoặc
các tối ưu hóa tương tự khác.
Tùy chọn này không được bật bởi bất kỳ -O vì nó có thể dẫn đến đầu ra không chính xác
cho các chương trình phụ thuộc vào việc triển khai chính xác IEEE hoặc ISO
quy tắc / thông số kỹ thuật cho các hàm toán học. Tuy nhiên, nó có thể mang lại mã nhanh hơn cho
các chương trình không yêu cầu đảm bảo các thông số kỹ thuật này. Cho phép
-fno-ký-số không, -fno-bẫy-toán học, -fassociative-toán học và -freciprocal-toán.
Mặc định là -fno-không an toàn-toán học-tối ưu hóa.
-fassociative-toán học
Cho phép liên kết lại các toán hạng trong chuỗi các phép toán dấu phẩy động. Cái này
vi phạm tiêu chuẩn ngôn ngữ ISO C và C ++ do có thể thay đổi kết quả tính toán.
LƯU Ý: việc sắp xếp lại có thể thay đổi dấu của XNUMX cũng như bỏ qua các NaN và ức chế hoặc
tạo dòng chảy dưới hoặc dòng tràn (và do đó không thể được sử dụng trên mã dựa vào làm tròn
hành vi như "(x + 2 ** 52) - 2 ** 52". Cũng có thể sắp xếp lại thứ tự so sánh dấu phẩy động và
do đó có thể không được sử dụng khi cần so sánh theo thứ tự. Tùy chọn này yêu cầu rằng
cả hai -fno-ký-số không và -fno-bẫy-toán học có hiệu lực. Hơn nữa, nó không làm cho
nhiều ý nghĩa với -nền tảng-toán học. Đối với Fortran, tùy chọn được tự động bật khi
cả hai -fno-ký-số không và -fno-bẫy-toán học đang có hiệu lực.
Mặc định là -fno-kết hợp-toán học.
-freciprocal-toán
Cho phép nghịch đảo của một giá trị được sử dụng thay vì chia cho giá trị nếu điều này
cho phép tối ưu hóa. Ví dụ: "x / y" có thể được thay thế bằng "x * (1 / y)", là
hữu ích nếu "(1 / y)" bị loại bỏ biểu thức con chung. Lưu ý rằng điều này
làm mất độ chính xác và tăng số lần dừng hoạt động trên giá trị.
Mặc định là -fno-đối ứng-toán học.
-ffinite-math-chỉ
Cho phép tối ưu hóa số học dấu phẩy động giả sử rằng các đối số và
kết quả không phải là NaN hoặc + -Infs.
Tùy chọn này không được bật bởi bất kỳ -O vì nó có thể dẫn đến đầu ra không chính xác
cho các chương trình phụ thuộc vào việc triển khai chính xác IEEE hoặc ISO
quy tắc / thông số kỹ thuật cho các hàm toán học. Tuy nhiên, nó có thể mang lại mã nhanh hơn cho
các chương trình không yêu cầu đảm bảo các thông số kỹ thuật này.
Mặc định là -fno-finite-math-chỉ.
-fno-ký-số không
Cho phép tối ưu hóa số học dấu phẩy động bỏ qua dấu của số không.
Số học IEEE chỉ định hành vi của các giá trị +0.0 và -0.0 riêng biệt, sau đó
cấm đơn giản hóa các biểu thức chẳng hạn như x + 0.0 hoặc 0.0 * x (ngay cả với
-ffinite-math-chỉ). Tùy chọn này ngụ ý rằng dấu hiệu của một kết quả không
có ý nghĩa.
Mặc định là -signed-số không.
-fno-bẫy-toán học
Biên dịch mã giả định rằng các hoạt động dấu phẩy động không thể tạo ra người dùng hiển thị
bẫy. Các bẫy này bao gồm chia cho không, tràn, tràn, kết quả không chính xác và
Hoạt động không hợp lệ. Tùy chọn này yêu cầu rằng -fno-signal-nans có hiệu lực.
Đặt tùy chọn này có thể cho phép mã nhanh hơn nếu người ta dựa vào số học IEEE "không ngừng",
ví dụ.
Tùy chọn này không bao giờ được bật bởi bất kỳ -O vì nó có thể dẫn đến
đầu ra không chính xác cho các chương trình phụ thuộc vào việc triển khai chính xác IEEE hoặc ISO
quy tắc / thông số kỹ thuật cho các hàm toán học.
Mặc định là -ftrapping-toán.
-nền tảng-toán học
Tắt các phép biến đổi và tối ưu hóa giả định làm tròn dấu phẩy động mặc định
cư xử. Đây là giá trị làm tròn đến XNUMX cho tất cả các chuyển đổi dấu phẩy động sang số nguyên và
làm tròn đến gần nhất cho tất cả các phần tử số học khác. Tùy chọn này nên
được chỉ định cho các chương trình thay đổi chế độ làm tròn FP động hoặc có thể
được thực thi với chế độ làm tròn không mặc định. Tùy chọn này vô hiệu hóa việc gấp liên tục của
biểu thức dấu phẩy động tại thời điểm biên dịch (có thể bị ảnh hưởng bởi chế độ làm tròn)
và các phép biến đổi số học không an toàn khi có phụ thuộc vào dấu
các chế độ làm tròn.
Mặc định là -fno-rounding-toán.
Tùy chọn này là thử nghiệm và hiện không đảm bảo vô hiệu hóa tất cả GCC
tối ưu hóa bị ảnh hưởng bởi chế độ làm tròn. Các phiên bản GCC trong tương lai có thể cung cấp
kiểm soát tốt hơn cài đặt này bằng cách sử dụng pragma "FENV_ACCESS" của C99. Dòng lệnh này
tùy chọn sẽ được sử dụng để chỉ định trạng thái mặc định cho "FENV_ACCESS".
-fsignaling-nans
Biên dịch mã giả định rằng các NaN báo hiệu IEEE có thể tạo ra các bẫy mà người dùng có thể nhìn thấy trong
các phép toán dấu phẩy động. Đặt tùy chọn này sẽ tắt các tối ưu hóa có thể thay đổi
số lượng ngoại lệ có thể nhìn thấy với các NaN báo hiệu. Tùy chọn này ngụ ý
-ftrapping-toán.
Tùy chọn này khiến macro bộ xử lý trước "__SUPPORT_SNAN__" được xác định.
Mặc định là -fno-signal-nans.
Tùy chọn này là thử nghiệm và hiện không đảm bảo vô hiệu hóa tất cả GCC
tối ưu hóa ảnh hưởng đến hành vi NaN báo hiệu.
-fsingle-chính xác-hằng số
Coi các hằng số dấu phẩy động là một độ chính xác đơn lẻ thay vì chuyển đổi hoàn toàn
chúng thành hằng số chính xác kép.
-fcx-phạm vi giới hạn
Khi được bật, tùy chọn này cho biết rằng không cần bước giảm phạm vi khi
thực hiện phép chia phức tạp. Ngoài ra, không có kiểm tra xem kết quả của một
phép nhân hoặc phép chia phức tạp là "NaN + I * NaN", với nỗ lực giải cứu
tình huống trong trường hợp đó. Mặc định là -fno-cx-giới hạn-phạm vi, nhưng được kích hoạt bởi
-ffast-toán.
Tùy chọn này kiểm soát cài đặt mặc định của ISO C99 "CX_LIMITED_RANGE" pragma.
Tuy nhiên, tùy chọn áp dụng cho tất cả các ngôn ngữ.
-fcx-fortran-quy tắc
Phép nhân và phép chia phức tạp tuân theo quy tắc Fortran. Giảm phạm vi được thực hiện như
một phần của phép chia phức, nhưng không có kiểm tra xem kết quả của một phức
phép nhân hoặc phép chia là "NaN + I * NaN", với nỗ lực giải cứu tình hình
trong trường hợp đó.
Mặc định là -fno-cx-fortran-quy tắc.
Các tùy chọn sau kiểm soát các tối ưu hóa có thể cải thiện hiệu suất, nhưng không
được kích hoạt bởi bất kỳ -O tùy chọn. Phần này bao gồm các tùy chọn thử nghiệm có thể tạo ra
mã bị hỏng.
-fbranch-xác suất
Sau khi chạy một chương trình được biên dịch với -fprofile-arc, bạn có thể biên dịch nó lần thứ hai
sử dụng -fbranch-xác suất, để cải thiện tối ưu hóa dựa trên số lần
mỗi nhánh đã được thực hiện. Khi một chương trình được biên dịch với -fprofile-arc thoát ra, nó tiết kiệm
Số lần thực thi vòng cung vào một tệp được gọi là tên nguồn.gcda cho mỗi tệp nguồn. Các
thông tin trong tệp dữ liệu này rất phụ thuộc vào cấu trúc của
mã, vì vậy bạn phải sử dụng cùng một mã nguồn và các tùy chọn tối ưu hóa giống nhau cho cả hai
bộ sưu tập.
Với -fbranch-xác suất, GCC đặt một REG_BR_PROB ghi chú trên mỗi JUMP_INSN và
CALL_INSN. Chúng có thể được sử dụng để cải thiện tối ưu hóa. Hiện tại, chúng chỉ được sử dụng
ở một nơi: ở tổ chức lại.c, thay vì đoán con đường mà một nhánh có nhiều khả năng
lấy, REG_BR_PROB các giá trị được sử dụng để xác định chính xác đường dẫn nào được thực hiện nhiều hơn
thường xuyên
-fprofile-giá trị
Nếu kết hợp với -fprofile-arc, nó thêm mã để một số dữ liệu về các giá trị của
các biểu thức trong chương trình được tập hợp.
Với -fbranch-xác suất, nó đọc lại dữ liệu thu thập được từ các giá trị cấu hình của
biểu thức để sử dụng trong tối ưu hóa.
Được kích hoạt với -fprofile-create và -fprofile-sử dụng.
-fvpt
Nếu kết hợp với -fprofile-arc, tùy chọn này hướng dẫn trình biên dịch thêm mã vào
thu thập thông tin về giá trị của biểu thức.
Với -fbranch-xác suất, nó đọc lại dữ liệu được thu thập và thực sự thực hiện
tối ưu hóa dựa trên chúng. Hiện tại, các tối ưu hóa bao gồm chuyên môn hóa
các phép chia sử dụng kiến thức về giá trị của mẫu số.
-frename-đăng ký
Cố gắng tránh phụ thuộc sai trong mã đã lập lịch bằng cách sử dụng các thanh ghi còn lại
hơn sau khi phân bổ đăng ký. Sự tối ưu hóa này mang lại nhiều lợi ích nhất cho bộ xử lý với nhiều
trong số các thanh ghi. Tùy thuộc vào định dạng thông tin gỡ lỗi được mục tiêu chấp nhận,
tuy nhiên, nó có thể làm cho việc gỡ lỗi không thể thực hiện được, vì các biến không còn ở trong một "nhà
Đăng ký".
Được bật theo mặc định với -funroll-vòng và -fpeel-loop.
-ftracer
Thực hiện nhân bản đuôi để phóng to kích thước khối siêu lớn. Sự chuyển đổi này đơn giản hóa
luồng điều khiển của chức năng cho phép các tối ưu hóa khác thực hiện công việc tốt hơn.
Được kích hoạt với -fprofile-sử dụng.
-funroll-vòng
Bỏ cuộn các vòng có số lần lặp có thể được xác định tại thời điểm biên dịch hoặc khi
mục vào vòng lặp. -funroll-vòng ngụ ý -frerun-cse-sau-vòng lặp, -fweb và
-frename-đăng ký. Nó cũng bật tính năng bóc vòng lặp hoàn toàn (tức là loại bỏ hoàn toàn
vòng lặp với số lần lặp không đổi nhỏ). Tùy chọn này làm cho mã lớn hơn và
có thể làm cho nó chạy nhanh hơn.
Được kích hoạt với -fprofile-sử dụng.
-funroll-all-loop
Bỏ cuộn tất cả các vòng lặp, ngay cả khi số lần lặp lại của chúng là không chắc chắn khi vòng lặp là
đã nhập. Điều này thường làm cho các chương trình chạy chậm hơn. -funroll-all-loop ngụ ý
các tùy chọn tương tự như -funroll-vòng.
-fpeel-loop
Các vòng lặp bóc tách mà có đủ thông tin mà chúng không cuộn nhiều (từ
phản hồi hồ sơ). Nó cũng bật tính năng bóc vòng lặp hoàn toàn (tức là loại bỏ hoàn toàn
vòng lặp với số lần lặp không đổi nhỏ).
Được kích hoạt với -fprofile-sử dụng.
-fmove-loop-bất biến
Cho phép truyền chuyển động bất biến của vòng lặp trong trình tối ưu hóa vòng lặp RTL. Đã bật ở cấp độ
-O1
-funswitch-vòng
Di chuyển các nhánh có điều kiện bất biến của vòng lặp ra khỏi vòng lặp, với các bản sao của
vòng lặp trên cả hai nhánh (sửa đổi theo kết quả của điều kiện).
-ffunction-section
-fdata-section
Đặt từng chức năng hoặc mục dữ liệu vào phần riêng của nó trong tệp đầu ra nếu mục tiêu
hỗ trợ các phần tùy ý. Tên của hàm hoặc tên của mục dữ liệu
xác định tên của phần trong tệp đầu ra.
Sử dụng các tùy chọn này trên các hệ thống mà trình liên kết có thể thực hiện tối ưu hóa để cải thiện
vị trí của tham chiếu trong không gian hướng dẫn. Hầu hết các hệ thống sử dụng đối tượng ELF
định dạng và bộ xử lý SPARC chạy Solaris 2 có trình liên kết với các tối ưu hóa như vậy.
AIX có thể có những tối ưu hóa này trong tương lai.
Chỉ sử dụng các tùy chọn này khi có những lợi ích đáng kể từ việc làm đó. Khi bạn
chỉ định các tùy chọn này, trình hợp dịch và trình liên kết tạo đối tượng lớn hơn và có thể thực thi
và cũng chậm hơn. Bạn không thể sử dụng "gprof" trên tất cả các hệ thống nếu bạn chỉ định điều này
và bạn có thể gặp sự cố với gỡ lỗi nếu bạn chỉ định cả tùy chọn này và
-g.
-fbranch-target-load-tối ưu hóa
Thực hiện tối ưu hóa tải thanh ghi mục tiêu nhánh trước khi phân luồng phần mở đầu / phần kết.
Việc sử dụng các thanh ghi đích thường chỉ có thể được tiếp xúc trong quá trình tải lại, do đó
tải ra khỏi vòng lặp và thực hiện lập lịch liên khối cần một tối ưu hóa riêng
vượt qua.
-fbranch-target-load-Optimization2
Thực hiện tối ưu hóa tải thanh ghi mục tiêu nhánh sau khi phân luồng phần mở đầu / phần kết.
-fbtr-bb-độc quyền
Khi thực hiện tối ưu hóa tải thanh ghi mục tiêu nhánh, không sử dụng lại mục tiêu nhánh
đăng ký trong bất kỳ khối cơ bản nào.
-fstack-protectionor
Phát ra mã bổ sung để kiểm tra lỗi tràn bộ đệm, chẳng hạn như các cuộc tấn công đập ngăn xếp. Cái này
được thực hiện bằng cách thêm một biến bảo vệ vào các hàm có các đối tượng dễ bị tấn công. Cái này
bao gồm các hàm gọi "alloca" và các hàm có bộ đệm lớn hơn 8 byte.
Các biện pháp bảo vệ được khởi tạo khi một chức năng được nhập và sau đó được kiểm tra khi
chức năng thoát. Nếu kiểm tra bảo vệ không thành công, một thông báo lỗi sẽ được in và chương trình
lối thoát hiểm.
LƯU Ý: Trong Ubuntu 6.10 và các phiên bản mới hơn, tùy chọn này được bật theo mặc định cho C, C ++,
ObjC, objC ++, nếu không có -fno-ngăn xếp-bảo vệ, -nostdlib, cũng không -chỉ cần đang
tìm.
-fstack-bảo vệ-tất cả
Như -fstack-protectionor ngoại trừ việc tất cả các chức năng đều được bảo vệ.
-fsection-anchor
Cố gắng giảm số lượng phép tính địa chỉ tượng trưng bằng cách sử dụng "liên kết" được chia sẻ
biểu tượng để giải quyết các đối tượng lân cận. Sự chuyển đổi này có thể giúp giảm số lượng
trong số các mục nhập GOT và truy cập GOT trên một số mục tiêu.
Ví dụ: việc triển khai hàm sau "foo":
int tĩnh a, b, c;
int foo (void) {return a + b + c; }
thường tính toán địa chỉ của cả ba biến, nhưng nếu bạn biên dịch nó với
-fsection-anchor, nó truy cập các biến từ một điểm neo chung. Các
hiệu ứng tương tự như mã giả sau (mã này không hợp lệ C):
int foo (khoảng trống)
{
đăng ký int * xr = & x;
trả về xr [& a - & x] + xr [& b - & x] + xr [& c - & x];
}
Không phải tất cả các mục tiêu đều hỗ trợ tùy chọn này.
--param tên=giá trị
Ở một số nơi, GCC sử dụng các hằng số khác nhau để kiểm soát mức độ tối ưu hóa
hoan thanh. Ví dụ: GCC không nội dòng các hàm chứa nhiều hơn một
số lượng hướng dẫn. Bạn có thể kiểm soát một số hằng số này trên dòng lệnh
bằng cách sử dụng --param tùy chọn.
Tên của các tham số cụ thể và ý nghĩa của các giá trị được gắn với
nội bộ của trình biên dịch và có thể thay đổi mà không cần thông báo trong tương lai
phát hành.
Trong mỗi trường hợp, giá trị là một số nguyên. Các lựa chọn được phép cho tên là:
dự đoán-nhánh-kết quả
Khi nhánh được dự đoán sẽ được thực hiện với xác suất thấp hơn ngưỡng này
(tính bằng phần trăm), thì nó được coi là có thể dự đoán được. Giá trị mặc định là 10.
tối đa-crossjump-edge
Số lượng các cạnh đến tối đa để xem xét cho nhảy chéo. Thuật toán
được sử dụng bởi -nhảy qua là O (N ^ 2) về số cạnh của mỗi khối.
Giá trị tăng lên có nghĩa là tối ưu hóa tích cực hơn, làm cho thời gian biên dịch
tăng với sự cải thiện có lẽ nhỏ về kích thước thực thi.
min-crossjump-in
Số lượng lệnh tối thiểu phải được khớp ở cuối hai khối
trước khi nhảy chéo được thực hiện trên chúng. Giá trị này bị bỏ qua trong trường hợp
nơi tất cả các hướng dẫn trong khối được chuyển đổi từ được khớp với nhau. Các
giá trị mặc định là 5.
max-grow-copy-bb-insns
Hệ số mở rộng kích thước mã tối đa khi sao chép các khối cơ bản thay vì
nhảy. Việc mở rộng có liên quan đến một lệnh nhảy. Giá trị mặc định là
8.
max-goto-Duplication-insns
Số lượng lệnh tối đa để sao chép vào một khối chuyển đến một
goto tính toán. Để tránh hành vi O (N ^ 2) trong một số đường chuyền, các yếu tố GCC
đã tính toán các gotos sớm trong quá trình biên dịch và giải nén chúng muộn nhất là
khả thi. Chỉ các bước nhảy được tính toán ở cuối khối cơ bản với không quá max-
goto-Duplication-insns không được lưu trữ. Giá trị mặc định là 8.
max-delay-slot-inn-search
Số lượng hướng dẫn tối đa cần xem xét khi tìm kiếm một hướng dẫn để
lấp đầy một khe trễ. Nếu nhiều hơn số lượng hướng dẫn tùy ý này thì
đã tìm kiếm, thời gian tiết kiệm được từ việc lấp đầy khoảng thời gian trễ là tối thiểu, vì vậy hãy dừng lại
đang tìm kiếm. Giá trị tăng lên có nghĩa là tối ưu hóa tích cực hơn, làm cho
tăng thời gian biên dịch với sự cải thiện nhỏ về thời gian thực thi.
độ trễ tối đa-khe-live-tìm kiếm
Khi cố gắng lấp đầy các khoảng thời gian trễ, số lượng hướng dẫn tối đa cần xem xét
khi tìm kiếm một khối có thông tin đăng ký trực tiếp hợp lệ. Tăng điều này
giá trị được chọn tùy ý có nghĩa là tối ưu hóa tích cực hơn, làm tăng
thời gian biên soạn. Tham số này sẽ bị loại bỏ khi mã vị trí trễ là
được viết lại để duy trì biểu đồ luồng điều khiển.
max-gcse-bộ nhớ
Lượng bộ nhớ tối đa gần đúng có thể được cấp phát để thực hiện
tối ưu hóa loại bỏ biểu thức con chung toàn cầu. Nếu nhiều bộ nhớ hơn
được chỉ định là bắt buộc, việc tối ưu hóa không được thực hiện.
max-gcse-insert-ratio
Nếu tỷ lệ giữa số lần chèn biểu thức và số lần xóa lớn hơn giá trị này cho
bất kỳ biểu thức nào, sau đó RTL PRE sẽ chèn hoặc xóa biểu thức và do đó rời khỏi
các tính toán dư thừa một phần trong dòng lệnh. Giá trị mặc định là
20.
độ dài danh sách tối đa đang chờ xử lý
Số lượng tối đa của việc lập lịch phụ thuộc đang chờ xử lý cho phép trước khi xóa
trạng thái hiện tại và bắt đầu lại. Các chức năng lớn với ít nhánh hoặc cuộc gọi có thể
tạo danh sách quá lớn mà không cần dùng đến bộ nhớ và tài nguyên.
max-modulo-backtrack-try
Số lần thử backtrack tối đa mà bộ lập lịch phải thực hiện khi modulo
lập lịch một vòng lặp. Các giá trị lớn hơn có thể làm tăng thời gian biên dịch theo cấp số nhân.
max-inline-insns-đơn
Một số tham số điều khiển cây nội dòng được sử dụng trong GCC. Con số này đặt
số lượng hướng dẫn tối đa (được tính trong đại diện nội bộ của GCC) trong một
chức năng duy nhất mà cây nội dòng xem xét cho nội dòng. Điều này chỉ ảnh hưởng đến
các hàm được khai báo nội tuyến và các phương thức được thực hiện trong một khai báo lớp (C ++).
Giá trị mặc định là 400.
max-inline-insns-auto
Khi bạn sử dụng -finline-các chức năng (bao gồm trong -O3), rất nhiều chức năng sẽ
nếu không, trình biên dịch không được xem xét cho nội tuyến được điều tra. Đến
các chức năng đó, một giới hạn khác (hạn chế hơn) so với các chức năng
đã khai báo nội tuyến có thể được áp dụng. Giá trị mặc định là 40.
nội tuyến-min-speedup
Khi cải thiện hiệu suất ước tính của người gọi + thời gian chạy callee vượt quá mức này
ngưỡng (ở phần trước), hàm có thể được nội tuyến bất kể giới hạn trên
--param max-inline-insns-đơn và --param max-inline-insns-auto.
big-function-inns
Giới hạn chỉ định các chức năng thực sự lớn. Đối với các chức năng lớn hơn giới hạn này
sau khi nội tuyến, nội tuyến bị hạn chế bởi --param chức năng lớn-tăng trưởng. Điều này
tham số này hữu ích chủ yếu để tránh thời gian biên dịch quá cao gây ra bởi
các thuật toán tuyến tính được sử dụng bởi back end. Giá trị mặc định là 2700.
chức năng lớn-tăng trưởng
Chỉ định mức tăng trưởng tối đa của hàm lớn do nội tuyến trong phần trăm gây ra. Các
giá trị mặc định là 100, giới hạn mức tăng trưởng của hàm lớn đến 2.0 lần so với giá trị ban đầu
kích cỡ.
đơn vị lớn
Giới hạn chỉ định đơn vị dịch lớn. Tăng trưởng do nội tuyến của các đơn vị
lớn hơn giới hạn này bị giới hạn bởi --param nội dòng-đơn vị-tăng trưởng. Đối với các đơn vị nhỏ
cái này có thể quá chặt. Ví dụ, hãy xem xét một đơn vị bao gồm chức năng A
đó là nội tuyến và B chỉ gọi A ba lần. Nếu B nhỏ so với A,
sự tăng trưởng của đơn vị là 300 \% và nhưng nội tuyến như vậy là rất lành mạnh. Cho rất lớn
các đơn vị bao gồm các chức năng nội tuyến nhỏ, tuy nhiên, tăng trưởng đơn vị tổng thể
giới hạn là cần thiết để tránh sự bùng nổ theo cấp số nhân của kích thước mã. Vì vậy, nhỏ hơn
đơn vị, kích thước được tăng lên --param đơn vị lớn trước khi áp dụng --param
nội dòng-đơn vị-tăng trưởng. Giá trị mặc định là 10000.
nội dòng-đơn vị-tăng trưởng
Chỉ định mức tăng trưởng tổng thể tối đa của đơn vị biên dịch do nội tuyến gây ra. Các
giá trị mặc định là 30 giới hạn tốc độ tăng đơn vị lên 1.3 lần kích thước ban đầu.
ipcp-đơn vị-tăng trưởng
Chỉ định mức tăng trưởng tổng thể tối đa của đơn vị biên dịch do liên thủ tục gây ra
sự lan truyền không đổi. Giá trị mặc định là 10, giới hạn mức tăng đơn vị là 1.1
lần kích thước ban đầu.
khung chồng lớn
Giới hạn chỉ định khung ngăn xếp lớn. Trong khi nội tuyến thuật toán đang thử
để không vượt quá giới hạn này quá nhiều. Giá trị mặc định là 256 byte.
lớn-chồng-khung-tăng trưởng
Chỉ định mức tăng trưởng tối đa của các khung ngăn xếp lớn do nội tuyến theo phần trăm gây ra.
Giá trị mặc định là 1000, giới hạn tốc độ tăng khung ngăn xếp lớn lên 11 lần
kích thước nguyên mẫu.
max-inline-insns-đệ quy
max-inline-insns-đệ quy-auto
Chỉ định số lượng hướng dẫn tối đa mà một bản sao ngoài dòng của một bản sao tự
Hàm nội tuyến đệ quy có thể phát triển thành bằng cách thực hiện nội tuyến đệ quy.
Đối với các hàm được khai báo nội dòng, --param max-inline-insns-đệ quy được đưa vào
tài khoản. Đối với các hàm không được khai báo nội tuyến, nội tuyến đệ quy chỉ xảy ra khi
-finline-các chức năng (bao gồm trong -O3) được kích hoạt và --param max-inline-insns-
đệ quy-tự động Được sử dụng. Giá trị mặc định là 450.
max-inline-đệ quy-độ sâu
max-inline-đệ quy-độ sâu-tự động
Chỉ định độ sâu đệ quy tối đa được sử dụng cho nội tuyến đệ quy.
Đối với các hàm được khai báo nội dòng, --param max-inline-đệ quy-độ sâu được đưa vào
tài khoản. Đối với các hàm không được khai báo nội tuyến, nội tuyến đệ quy chỉ xảy ra khi
-finline-các chức năng (bao gồm trong -O3) được kích hoạt và --param max-inline-đệ quy-
độ sâu tự động Được sử dụng. Giá trị mặc định là 8.
xác suất tối thiểu nội tuyến-đệ quy
Nội tuyến đệ quy chỉ có lợi cho hàm có đệ quy sâu trong
trung bình và có thể bị tổn thương đối với hàm có độ sâu đệ quy nhỏ bằng cách tăng
kích thước mở đầu hoặc độ phức tạp của phần thân hàm đối với các trình tối ưu hóa khác.
Khi có phản hồi về hồ sơ (xem -fprofile-create) đệ quy thực tế
độ sâu có thể được đoán từ xác suất mà hàm lặp lại thông qua một lệnh gọi nhất định
biểu hiện. Tham số này giới hạn nội tuyến chỉ để gọi các biểu thức có
xác suất vượt quá ngưỡng đã cho (tính bằng phần trăm). Giá trị mặc định là 10.
đầu inline-inns
Chỉ định mức tăng trưởng mà người nội tuyến sớm có thể thực hiện. Trên thực tế, nó làm tăng số lượng
nội tuyến đối với mã có hình phạt trừu tượng lớn. Giá trị mặc định là 10.
tối đa-đầu-inliner-lặp lại
tối đa-đầu-inliner-lặp lại
Giới hạn số lần lặp lại của đầu inliner. Về cơ bản, điều này giới hạn số lượng
các cuộc gọi gián tiếp lồng nhau mà người nội tuyến sớm có thể giải quyết. Các chuỗi sâu hơn vẫn còn
xử lý bằng nội tuyến muộn.
comdat-chia sẻ-xác suất
comdat-chia sẻ-xác suất
Xác suất (tính bằng phần trăm) mà hàm nội tuyến C ++ có khả năng hiển thị comdat là
được chia sẻ trên nhiều đơn vị biên dịch. Giá trị mặc định là 20.
min-vect-loop-ràng buộc
Số lần lặp lại tối thiểu mà các vòng lặp không được vectơ hóa khi
-vectơ hóa miễn phí Được sử dụng. Số lần lặp lại sau khi vector hóa cần
lớn hơn giá trị được chỉ định bởi tùy chọn này để cho phép vector hóa. Các
giá trị mặc định là 0.
gcse-chi phí-khoảng cách-tỷ lệ
Hệ số tỷ lệ trong tính toán khoảng cách tối đa mà một biểu thức có thể được di chuyển bằng
Tối ưu hóa GCSE. Điều này hiện chỉ được hỗ trợ trong thẻ lưu trữ mã.
Tỷ lệ này càng lớn, thì việc lưu mã càng tích cực với đơn giản
biểu thức, tức là, các biểu thức có giá thấp hơn gcse-không hạn chế-
chi phí. Việc chỉ định 0 vô hiệu hóa việc lưu trữ các biểu thức đơn giản. Giá trị mặc định là
10.
gcse-không hạn chế-chi phí
Chi phí, được đo lường gần như chi phí của một lệnh máy điển hình, tại
mà các tối ưu hóa GCSE không hạn chế khoảng cách mà một biểu thức có thể di chuyển.
Điều này hiện chỉ được hỗ trợ trong thẻ lưu trữ mã. Chi phí càng thấp,
mã lưu trữ càng tích cực hơn. Việc chỉ định 0 cho phép tất cả các biểu thức
di chuyển khoảng cách không bị giới hạn. Giá trị mặc định là 3.
độ sâu tối đa của palăng
Độ sâu tìm kiếm trong cây thống trị cho các biểu thức cần lưu. Cái này được sử dụng
để tránh hành vi bậc hai trong thuật toán cẩu. Giá trị của 0 không giới hạn
trên tìm kiếm, nhưng có thể làm chậm quá trình biên dịch các hàm lớn. Giá trị mặc định
là 30.
max-tail-merge-so sánh
Số lượng bbs tương tự tối đa để so sánh một bb với. Điều này được sử dụng để tránh
hành vi bậc hai trong hợp nhất đuôi cây. Giá trị mặc định là 10.
max-tail-merge-lặp đi lặp lại
Số lần lặp lại tối đa của lần vượt qua hàm. Điều này được sử dụng để
giới hạn thời gian biên dịch trong hợp nhất đuôi cây. Giá trị mặc định là 2.
max-unrolled-inns
Số lượng lệnh tối đa mà một vòng lặp có thể phải được hủy cuộn. Nếu một vòng lặp
không được cuộn, tham số này cũng xác định số lần mã vòng lặp là
chưa cuộn.
max-trung bình-không kiểm soát-insns
Số lượng tối đa các hướng dẫn bị sai lệch bởi xác suất thực hiện của chúng
một vòng lặp có thể phải được hủy cuộn. Nếu một vòng lặp không được cuộn, thông số này cũng
xác định số lần mã vòng lặp không được cuộn.
số lần giải nén tối đa
Số lần hủy cuộn tối đa của một vòng lặp.
max-tróc-in
Số lượng lệnh tối đa mà một vòng lặp có thể phải được bóc. Nếu một vòng lặp
được bóc, tham số này cũng xác định số lần mã vòng lặp được bóc.
thời gian bóc tối đa
Số lần bóc tối đa của một vòng lặp.
cành tối đa
Số nhánh tối đa trên đường dẫn nóng qua trình tự đã bóc.
max-hoàn toàn-bóc-in
Số lượng lót tối đa của một vòng lặp bị bóc tách hoàn toàn.
max-hoàn toàn-bóc-lần
Số lần lặp lại tối đa của một vòng lặp để phù hợp cho việc bóc tách hoàn toàn.
max-perfect-peel-loop-nest-depth
Độ sâu tối đa của tổ vòng phù hợp để bóc hoàn toàn.
max-unswitch-in
Số lượng bên trong tối đa của một vòng lặp không chuyển đổi.
mức tối đa không chuyển đổi
Số nhánh tối đa không chuyển đổi trong một vòng lặp.
lim-đắt
Chi phí tối thiểu của một biểu thức đắt tiền trong chuyển động bất biến của vòng lặp.
iv-xem xét-tất cả-ứng viên-ràng buộc
Giới hạn về số lượng ứng viên cho các biến quy nạp, dưới mức đó tất cả các ứng viên
được xem xét cho mỗi lần sử dụng trong tối ưu hóa biến cảm ứng. Nếu có
nhiều ứng cử viên hơn mức này, chỉ những ứng cử viên phù hợp nhất được xem xét để tránh
độ phức tạp thời gian bậc hai.
iv-max-coi-sử dụng
Các tối ưu hóa biến cảm ứng từ bỏ các vòng lặp chứa nhiều cảm ứng hơn
sử dụng biến.
iv-luôn-mận-cand-đặt-ràng buộc
Nếu số lượng ứng viên trong tập hợp nhỏ hơn giá trị này, hãy luôn cố gắng
loại bỏ các iv không cần thiết khỏi tập hợp khi thêm một iv mới.
kích thước quyền trượng-max-expr-
Giới hạn về kích thước của các biểu thức được sử dụng trong trình phân tích diễn biến vô hướng. Lớn
biểu thức làm chậm máy phân tích.
trượng-max-expr-độ phức tạp
Bị ràng buộc về độ phức tạp của các biểu thức trong trình phân tích diễn biến vô hướng.
Các biểu thức phức tạp làm chậm máy phân tích.
omega-max-vars
Số lượng biến tối đa trong hệ thống ràng buộc Omega. Giá trị mặc định
là 128.
omega-max-geqs
Số bất đẳng thức tối đa trong hệ thống ràng buộc Omega. Mặc định
giá trị là 256.
omega-max-eqs
Số lượng bằng nhau tối đa trong hệ thống ràng buộc Omega. Giá trị mặc định
là 128.
omega-max-wild-card
Số lượng biến ký tự đại diện tối đa mà bộ giải Omega có thể chèn.
Giá trị mặc định là 18.
kích thước bảng omega-băm
Kích thước của bảng băm trong bộ giải Omega. Giá trị mặc định là 550.
omega-max-key
Số lượng phím tối đa được sử dụng bởi bộ giải Omega. Giá trị mặc định là 500.
omega-loại bỏ-dư thừa-ràng buộc
Khi được đặt thành 1, hãy sử dụng các phương pháp đắt tiền để loại bỏ tất cả các ràng buộc dư thừa. Các
giá trị mặc định là 0.
vect-max-phiên bản-cho-kiểm tra căn chỉnh
Số lần kiểm tra thời gian chạy tối đa có thể được thực hiện khi thực hiện vòng lặp
lập phiên bản để căn chỉnh trong vectorizer.
vect-max-phiên bản-cho-bí danh-kiểm tra
Số lần kiểm tra thời gian chạy tối đa có thể được thực hiện khi thực hiện vòng lặp
lập phiên bản cho bí danh trong vectorizer.
vect-max-peel-for-alignment
Số lượng vòng lặp tối đa để tăng cường liên kết truy cập cho vectơ. Giá trị
-1 có nghĩa là 'không có giới hạn'.
số lần lặp tối đa để theo dõi
Số lần lặp lại tối đa của một vòng lặp mà thuật toán brute-force để phân tích
của số lần lặp lại của vòng lặp cố gắng đánh giá.
hot-bb-count-ws-permille
Số lượng hồ sơ khối cơ bản được coi là nóng nếu nó góp phần vào
permillage (tức là 0 ... 1000) của toàn bộ quá trình thực thi đã định cấu hình.
hot-bb-tần số-fraction
Chọn một phần của tần suất khối mục nhập thực hiện khối cơ bản trong
chức năng cho trước khối cơ bản cần phải được coi là nóng.
số lần lặp lại được dự đoán tối đa
Số lần lặp lại vòng lặp tối đa mà chúng tôi dự đoán tĩnh. Điều này hữu ích trong
các trường hợp trong đó một hàm chứa một vòng lặp đơn với giới hạn đã biết và một vòng lặp khác
với ràng buộc không xác định. Số lần lặp lại đã biết được dự đoán chính xác, trong khi
số lần lặp chưa biết trung bình khoảng 10. Điều này có nghĩa là vòng lặp
không có giới hạn xuất hiện lạnh một cách giả tạo so với cái còn lại.
căn chỉnh ngưỡng
Chọn một phần của tần suất thực thi tối đa của một khối cơ bản trong
chức năng căn chỉnh khối cơ bản.
căn chỉnh-vòng lặp-lặp lại
Một vòng lặp dự kiến sẽ lặp lại ít nhất số lần lặp đã chọn được căn chỉnh.
lần vết-động-phạm vi bảo hiểm
dấu vết-động-phạm vi-phản hồi
Giá trị này được sử dụng để giới hạn sự hình thành siêu khối khi tỷ lệ phần trăm đã cho của
các hướng dẫn đã thực thi được bảo hiểm. Điều này hạn chế việc mở rộng kích thước mã không cần thiết.
Sản phẩm dấu vết-động-phạm vi-phản hồi chỉ được sử dụng khi phản hồi hồ sơ là
có sẵn. Các cấu hình thực (trái ngược với các cấu hình được ước tính tĩnh) là nhiều
ít cân bằng hơn cho phép ngưỡng có giá trị lớn hơn.
tracer-max-code-tăng trưởng
Dừng sao chép đuôi khi tốc độ phát triển mã đã đạt đến tỷ lệ phần trăm nhất định. Đây là một
thay vì giới hạn nhân tạo, vì hầu hết các bản sao bị loại bỏ sau đó
nhảy, vì vậy nó có thể được đặt thành các giá trị cao hơn nhiều so với tốc độ phát triển mã mong muốn.
dấu vết-phút-chi nhánh-tỷ lệ
Dừng tăng trưởng ngược lại khi xác suất đảo ngược của cạnh tốt nhất nhỏ hơn giá trị này
ngưỡng (tính bằng phần trăm).
dấu vết-phút-chi nhánh-tỷ lệ
tracer-min-nhánh-tỷ lệ phản hồi
Dừng tăng trưởng về phía trước nếu cạnh tốt nhất có xác suất thấp hơn ngưỡng này.
Tương tự như lần vết-động-phạm vi bảo hiểm hai giá trị hiện có, một giá trị để biên dịch
để phản hồi hồ sơ và một để biên dịch mà không có. Giá trị của việc biên dịch
với phản hồi hồ sơ cần thận trọng hơn (cao hơn) để làm cho
đánh dấu hiệu quả.
độ dài đường dẫn tối đa-cse
Số khối cơ bản tối đa trên đường dẫn mà CSE xem xét. Giá trị mặc định là 10.
max-cse-in
Số lượng lệnh tối đa CSE xử lý trước khi xả. Mặc định là
1000.
ggc-min-mở rộng
GCC sử dụng bộ thu gom rác để quản lý phân bổ bộ nhớ của chính nó. Tham số này
chỉ định tỷ lệ phần trăm tối thiểu mà đống rác của người thu gom phải là
được phép mở rộng giữa các bộ sưu tập. Điều chỉnh điều này có thể cải thiện tốc độ biên dịch;
nó không ảnh hưởng đến việc tạo mã.
Giá trị mặc định là 30% + 70% * (RAM / 1GB) với giới hạn trên là 100% khi RAM> = 1GB.
Nếu "getrlimit" có sẵn, khái niệm "RAM" là RAM thực tế nhỏ nhất và
"RLIMIT_DATA" hoặc "RLIMIT_AS". Nếu GCC không thể tính toán RAM trên một
nền tảng, giới hạn dưới 30% được sử dụng. Đặt thông số này và ggc-min-
kích thước kinh ngạc về XNUMX gây ra một bộ sưu tập đầy đủ xảy ra ở mọi cơ hội. Đây là
cực kỳ chậm, nhưng có thể hữu ích để gỡ lỗi.
ggc-min-heapsize
Kích thước tối thiểu của đống rác của người thu gom rác trước khi nó bắt đầu bận tâm đến việc thu gom
rác. Bộ sưu tập đầu tiên xảy ra sau khi heap mở rộng bằng ggc-min-mở rộng%
Ngoài ggc-min-heapsize. Một lần nữa, điều chỉnh điều này có thể cải thiện tốc độ biên dịch và
không ảnh hưởng đến việc tạo mã.
Giá trị mặc định là RAM / 8 nhỏ hơn, RLIMIT_RSS hoặc giới hạn cố gắng đảm bảo
RLIMIT_DATA hoặc RLIMIT_AS đó không bị vượt quá, nhưng có giới hạn dưới 4096
(bốn megabyte) và giới hạn trên là 131072 (128 megabyte). Nếu GCC không thể
để tính toán RAM trên một nền tảng cụ thể, giới hạn dưới được sử dụng. Đặt cái này
tham số rất lớn vô hiệu hóa hiệu quả việc thu gom rác. Đặt cái này
tham số và ggc-min-mở rộng về XNUMX khiến một bộ sưu tập đầy đủ xảy ra ở mọi
cơ hội.
max-tải lại-tìm kiếm-insns
Số lần tải lại lệnh tối đa sẽ tương đương
Đăng ký. Giá trị tăng lên có nghĩa là tối ưu hóa tích cực hơn, làm cho
tăng thời gian biên dịch với hiệu suất có lẽ tốt hơn một chút. Mặc định
giá trị là 100.
max-cselib-memory-location
Số lượng vị trí bộ nhớ tối đa mà cselib nên tính đến.
Giá trị tăng lên có nghĩa là tối ưu hóa tích cực hơn, làm cho thời gian biên dịch
tăng với hiệu suất có lẽ tốt hơn một chút. Giá trị mặc định là 500.
sắp xếp lại-khối-trùng lặp
sắp xếp lại-khối-trùng lặp-phản hồi
Được sử dụng bởi thẻ sắp xếp lại khối cơ bản để quyết định xem có sử dụng vô điều kiện hay không
phân nhánh hoặc sao chép mã trên đích của nó. Mã được nhân đôi khi
kích thước ước tính nhỏ hơn giá trị này nhân với kích thước ước tính của
nhảy vô điều kiện tại các điểm nóng của chương trình.
Sản phẩm sắp xếp lại-khối-trùng lặp-phản hồi chỉ được sử dụng khi phản hồi hồ sơ là
có sẵn. Nó có thể được đặt thành các giá trị cao hơn sắp xếp lại-khối-trùng lặp kể từ khi
thông tin về các điểm nóng chính xác hơn.
max-Sched-ready-insns
Số lượng tối đa các hướng dẫn sẵn sàng được phát hành, bộ lập lịch phải
xem xét tại bất kỳ thời điểm nào trong lần vượt qua lịch trình đầu tiên. Tăng giá trị
nghĩa là tìm kiếm kỹ lưỡng hơn, làm cho thời gian biên dịch tăng lên với
lợi ít. Giá trị mặc định là 100.
khối-vùng-lịch-biểu tối đa
Số khối tối đa trong một vùng được xem xét cho khóa liên động
lập kế hoạch. Giá trị mặc định là 10.
tối đa-đường ống-khu vực-khối
Số lượng khối tối đa trong một khu vực được xem xét để tạo đường ống trong
bộ lập lịch chọn lọc. Giá trị mặc định là 15.
max-Sched-region-inns
Số lượng lót tối đa trong một vùng được xem xét cho khóa liên động
lập kế hoạch. Giá trị mặc định là 100.
max-pipe-region-inns
Số lượng lót tối đa trong một khu vực được xem xét để ghép nối trong
bộ lập lịch chọn lọc. Giá trị mặc định là 200.
min-spec-thăm dò
Xác suất tối thiểu (tính bằng phần trăm) đạt được khối nguồn cho khóa liên động
lập kế hoạch đầu cơ. Giá trị mặc định là 40.
max-lịch-mở rộng-vùng-iters
Số lần lặp lại tối đa thông qua CFG để mở rộng vùng. Giá trị 0 (
mặc định) tắt tiện ích mở rộng vùng.
max-lịch-in-xung-đột-chậm trễ
Độ trễ xung đột tối đa cho một nội dung được xem xét đối với chuyển động đầu cơ.
Giá trị mặc định là 3.
lịch-spec-prob-cutoff
Xác suất đầu cơ thành công tối thiểu (tính bằng phần trăm), do đó đầu cơ
lót được lên lịch. Giá trị mặc định là 40.
Sched-spec-state-edge-prob-cutoff
Xác suất tối thiểu mà một cạnh phải có để bộ lập lịch lưu trạng thái của nó
Băng qua nó. Giá trị mặc định là 10.
Sched-mem-true-dep-cost
Khoảng cách tối thiểu (theo chu kỳ CPU) giữa lưu trữ và tải nhắm mục tiêu cùng một bộ nhớ
các địa điểm. Giá trị mặc định là 1.
selched-max-lookahead
Kích thước tối đa của cửa sổ lookahead của lập lịch chọn lọc. Nó là một chiều sâu
tìm kiếm các hướng dẫn có sẵn. Giá trị mặc định là 50.
đã chọn-thời-gian-tối-đa
Số lần tối đa mà một lệnh được lên lịch trong quá trình chọn lọc
lập kế hoạch. Đây là giới hạn về số lần lặp lại mà qua đó
hướng dẫn có thể được pipelined. Giá trị mặc định là 2.
sesched-max-insns-to-rename
Số lượng tối đa các hướng dẫn tốt nhất trong danh sách sẵn sàng được xem xét
đổi tên trong bộ lập lịch chọn lọc. Giá trị mặc định là 2.
sms-min-sc
Giá trị tối thiểu của số giai đoạn mà bộ lập lịch trình mô đun xoay tạo ra. Các
giá trị mặc định là 2.
giá trị cuối cùng tối đa-rtl
Kích thước tối đa được đo bằng số RTL có thể được ghi lại trong một biểu thức
trong bộ kết hợp cho một thanh ghi giả là giá trị cuối cùng được biết đến của thanh ghi đó. Các
mặc định là 10000.
số nguyên-chia sẻ-giới hạn
Các hằng số nguyên nhỏ có thể sử dụng cấu trúc dữ liệu được chia sẻ, làm giảm trình biên dịch
sử dụng bộ nhớ và tăng tốc độ của nó. Điều này đặt giá trị tối đa của một chia sẻ
hằng số nguyên. Giá trị mặc định là 256.
kích thước bộ đệm ssp
Kích thước tối thiểu của bộ đệm (tức là mảng) nhận được bảo vệ đập ngăn xếp
khi nào -fstack-bảo vệ Được sử dụng.
Mặc định này trước Ubuntu 10.10 là "8". Hiện tại nó là "4", để tăng
số chức năng được bảo vệ bởi trình bảo vệ ngăn xếp.
max-jump-thread-Copy-stmts
Số lượng câu lệnh tối đa được phép trong một khối cần được sao chép khi
bước nhảy luồng.
max-fields-for-field-nhạy cảm
Số lượng trường tối đa trong cấu trúc được xử lý theo cách trường nhạy cảm trong quá trình
phân tích con trỏ. Giá trị mặc định là XNUMX cho -O0 và -O1và 100 cho -Bạn, -O2và
-O3.
tìm nạp trước độ trễ
Ước tính số lượng hướng dẫn trung bình được thực thi trước khi tìm nạp trước
kết thúc. Khoảng cách được tìm nạp trước tỷ lệ với hằng số này.
Việc tăng số lượng này cũng có thể dẫn đến việc tìm nạp trước ít luồng hơn (xem
tìm nạp trước đồng thời).
tìm nạp trước đồng thời
Số lượng tìm nạp trước tối đa có thể chạy cùng một lúc.
l1-cache-line-size
Kích thước của dòng bộ đệm trong bộ đệm L1, tính bằng byte.
kích thước bộ đệm l1
Kích thước của bộ đệm L1, tính bằng kilobyte.
kích thước bộ đệm l2
Kích thước của bộ đệm L2, tính bằng kilobyte.
min-inn-to-prefetch-ratio
Tỷ lệ tối thiểu giữa số lượng lệnh và số lần tìm nạp trước
để cho phép tìm nạp trước trong một vòng lặp.
prefetch-min-inn-to-mem-ratio
Tỷ lệ tối thiểu giữa số lượng lệnh và số lượng bộ nhớ
tham chiếu để cho phép tìm nạp trước trong một vòng lặp.
use-canonical-type
Trình biên dịch có nên sử dụng hệ thống kiểu "chuẩn" hay không. Theo mặc định, điều này
luôn phải là 1, sử dụng cơ chế nội bộ hiệu quả hơn để so sánh
các loại trong C ++ và Objective-C ++. Tuy nhiên, nếu lỗi trong hệ thống loại chuẩn
gây ra lỗi biên dịch, hãy đặt giá trị này thành 0 để tắt các loại chuẩn.
chuyển đổi-chuyển đổi-tối đa-chi nhánh-tỷ lệ
Chuyển đổi khởi tạo Switch từ chối tạo mảng lớn hơn
chuyển đổi-chuyển đổi-tối đa-chi nhánh-tỷ lệ nhân với số nhánh trong công tắc.
tối đa-một phần-chống-dài
Chiều dài tối đa của tập hợp ngược từng phần được tính toán trong từng phần của cây
tối ưu hóa loại bỏ dư thừa (-phải trước) khi tối ưu hóa tại -O3 và ở trên.
Đối với một số loại mã nguồn, việc loại bỏ dư thừa từng phần được nâng cao
tối ưu hóa có thể chạy mất, tiêu tốn tất cả bộ nhớ có sẵn trên máy chủ
cỗ máy. Tham số này đặt giới hạn về độ dài của các tập hợp được tính toán,
ngăn chặn hành vi chạy trốn. Đặt giá trị 0 cho tham số này
cho phép chiều dài thiết lập không giới hạn.
sccvn-max-scc-size
Kích thước tối đa của thành phần được kết nối mạnh (SCC) trong quá trình xử lý SCCVN. Nếu như
giới hạn này đạt đến, quá trình xử lý SCCVN cho toàn bộ chức năng không được thực hiện và
tối ưu hóa tùy thuộc vào nó bị vô hiệu hóa. Kích thước SCC tối đa mặc định là
10000.
sccvn-max-alias-queries-per-access
Số lượng truy vấn bí danh-tiên tri tối đa mà chúng tôi thực hiện khi tìm kiếm dư thừa
cho tải và cửa hàng. Nếu đạt đến giới hạn này, tìm kiếm sẽ bị hủy bỏ và tải hoặc
cửa hàng không được coi là thừa. Số lượng truy vấn được tính theo thuật toán
giới hạn số lượng cửa hàng trên tất cả các con đường từ tải đến mục nhập chức năng.
Số truy vấn tối đa mặc định là 1000.
ira-max-vòng-num
IRA sử dụng phân bổ đăng ký khu vực theo mặc định. Nếu một hàm chứa nhiều hơn
số vòng lặp hơn số được cho bởi tham số này, chỉ nhiều nhất là số
các vòng lặp được thực hiện thường xuyên nhất tạo thành các vùng để phân bổ đăng ký vùng.
Giá trị mặc định của tham số là 100.
ira-max-xung đột-kích thước bảng
Mặc dù IRA sử dụng một thuật toán phức tạp để nén bảng xung đột,
bảng vẫn có thể yêu cầu quá nhiều bộ nhớ cho các chức năng lớn. Nếu
bảng xung đột cho một chức năng có thể lớn hơn kích thước tính bằng MB được cung cấp bởi
, thay vào đó, trình cấp phát thanh ghi sử dụng một tham số nhanh hơn, đơn giản hơn và thấp hơn
thuật toán chất lượng không yêu cầu xây dựng bảng xung đột thanh ghi giả.
Giá trị mặc định của tham số là 2000.
ira-loop-dành riêng-regs
IRA có thể được sử dụng để đánh giá áp suất thanh ghi chính xác hơn trong các vòng lặp để đưa ra quyết định
để di chuyển các bất biến của vòng lặp (xem -O3). Số lượng đăng ký có sẵn được dành riêng cho
một số mục đích khác được cung cấp bởi tham số này. Giá trị mặc định của
tham số là 2, là số lượng thanh ghi tối thiểu cần thiết bởi
hướng dẫn. Giá trị này là giá trị tốt nhất được tìm thấy từ nhiều thử nghiệm.
vòng lặp bất biến-max-bbs-in-loop
Chuyển động bất biến vòng lặp có thể rất tốn kém, cả về thời gian biên dịch và
lượng bộ nhớ thời gian biên dịch cần thiết, với các vòng lặp rất lớn. Vòng lặp với nhiều hơn nữa
các khối cơ bản hơn tham số này sẽ không có tối ưu hóa chuyển động bất biến vòng lặp
thực hiện trên chúng. Giá trị mặc định của tham số là 1000 cho -O1 và 10000
cho -O2 và ở trên.
loop-max-datarefs-for-datadeps
Việc xây dựng mức phụ thuộc dữ liệu rất tốn kém đối với các vòng lặp rất lớn. Tham số này
giới hạn số lượng tham chiếu dữ liệu trong các vòng lặp được coi là dữ liệu
phân tích sự phụ thuộc. Các vòng lặp lớn này không được xử lý bởi tối ưu hóa bằng cách sử dụng
phụ thuộc dữ liệu vòng lặp. Giá trị mặc định là 1000.
kích thước tối đa vartrack
Đặt số lượng vị trí bảng băm tối đa để sử dụng trong luồng dữ liệu theo dõi biến đổi
phân tích của bất kỳ chức năng nào. Nếu vượt quá giới hạn này với theo dõi biến đổi tại
nhiệm vụ được kích hoạt, phân tích cho chức năng đó được thử lại mà không có nó, sau khi
loại bỏ tất cả các nội dung gỡ lỗi khỏi hàm. Nếu vượt quá giới hạn ngay cả khi không có
gỡ lỗi bên trong, phân tích theo dõi var hoàn toàn bị vô hiệu hóa cho chức năng.
Đặt tham số bằng XNUMX làm cho nó không giới hạn.
max-vartrack-expr-độ sâu
Đặt số lượng mức đệ quy tối đa khi cố gắng ánh xạ các tên biến hoặc
gỡ lỗi tạm thời thành giá trị biểu thức. Điều này giao dịch thời gian biên dịch để biết thêm
hoàn thành thông tin gỡ lỗi. Nếu giá trị này được đặt quá thấp, các biểu thức giá trị được
có sẵn và có thể được trình bày trong thông tin gỡ lỗi có thể không được sử dụng;
cài đặt này cao hơn có thể cho phép trình biên dịch tìm thấy các bản gỡ lỗi phức tạp hơn
nhưng thời gian biên dịch và sử dụng bộ nhớ có thể tăng lên. Giá trị mặc định là 12.
min-nondebug-inn-uid
Sử dụng uids bắt đầu từ tham số này cho nội dung nondebug. Phạm vi bên dưới
tham số được dành riêng cho nội dung gỡ lỗi được tạo bởi
-fvar-theo dõi-phân công, nhưng bên trong gỡ lỗi có thể nhận được các uid (không chồng chéo) ở trên
nó nếu phạm vi dành riêng đã hết.
ipa-sra-ptr-yếu tố tăng trưởng
IPA-SRA chỉ thay thế một con trỏ đến một tổng thể bằng một hoặc nhiều tham số mới
khi kích thước tích lũy của chúng nhỏ hơn hoặc bằng ipa-sra-ptr-yếu tố tăng trưởng lần
kích thước của tham số con trỏ ban đầu.
tm-max-tổng hợp-kích thước
Khi tạo bản sao của các biến cục bộ chuỗi trong một giao dịch, tham số này
chỉ định kích thước tính bằng byte mà sau đó các biến được lưu bằng ghi nhật ký
các chức năng trái ngược với lưu / khôi phục các cặp chuỗi mã. Chỉ tùy chọn này
áp dụng khi sử dụng -fgnu-tm.
than chì-max-nb-scop-params
Để tránh các hiệu ứng theo cấp số nhân trong các phép biến đổi vòng lặp Graphite, số lượng
các tham số trong Phần điều khiển tĩnh (SCoP) bị giới hạn. Giá trị mặc định là 10
thông số. Một biến có giá trị không xác định tại thời điểm biên dịch và được xác định
bên ngoài SCoP là một tham số của SCoP.
than chì-max-bbs-mỗi chức năng
Để tránh các tác động theo cấp số nhân trong việc phát hiện SCoP, kích thước của các hàm
được phân tích bằng Graphite bị ràng buộc. Giá trị mặc định là 100 khối cơ bản.
kích thước khối vòng lặp
Chặn vòng lặp hoặc chuyển đổi khai thác theo dải, được kích hoạt với -floop-khối or
-floop-dải-của tôi, khai thác từng vòng lặp trong tổ vòng lặp theo một số lượng nhất định
các lần lặp lại. Chiều dài dải có thể được thay đổi bằng cách sử dụng kích thước khối vòng lặp
tham số. Giá trị mặc định là 51 lần lặp.
ipa-cp-giá trị-danh sách-kích thước
IPA-CP cố gắng theo dõi tất cả các giá trị và kiểu có thể được chuyển đến của một hàm
tham số để truyền bá chúng và thực hiện phân tích. ipa-cp-giá trị-
kích thước danh sách là số lượng giá trị và kiểu tối đa mà nó lưu trữ trên một trang chính thức
tham số của một hàm.
phân vùng lto
Chỉ định số lượng phân vùng mong muốn được tạo ra trong quá trình biên dịch WHOPR. Các
số lượng phân vùng phải vượt quá số lượng CPU được sử dụng để biên dịch. Các
giá trị mặc định là 32.
phân vùng lto-min
Kích thước của phân vùng tối thiểu cho WHOPR (trong hướng dẫn ước tính). Điều này ngăn cản
chi phí chia các chương trình rất nhỏ thành quá nhiều phân vùng.
cxx-max-namespaces-cho-chẩn đoán-trợ giúp
Số lượng không gian tên tối đa cần tham khảo cho các đề xuất khi tra cứu tên C ++
không thành công cho một số nhận dạng. Giá trị mặc định là 1000.
tần số chìm-ngưỡng
Tần suất thực thi tương đối tối đa (tính bằng phần trăm) của khối đích
liên quan đến khối ban đầu của một câu lệnh để cho phép câu lệnh chìm
tuyên bố. Các con số lớn hơn dẫn đến tuyên bố tích cực hơn bị chìm. Các
giá trị mặc định là 75. Một điều chỉnh tích cực nhỏ được áp dụng cho các câu lệnh có
toán hạng bộ nhớ vì chúng thậm chí còn sinh lợi nhiều hơn nên chìm xuống.
max-store-to-chìm
Số lượng tối đa các cặp cửa hàng có điều kiện có thể bị đánh chìm. Đặt thành 0 nếu
hoặc vectơ hóa (-vectơ hóa miễn phí) hoặc chuyển đổi if (-ftree-loop-if-chuyển đổi)
bị vô hiệu hóa. Giá trị mặc định là 2.
cho phép-tải-dữ liệu-cuộc đua
Cho phép trình tối ưu hóa giới thiệu các chủng tộc dữ liệu mới khi tải. Đặt thành 1 để cho phép,
nếu không thì thành 0. Tùy chọn này được bật theo mặc định trừ khi được đặt hoàn toàn bởi
-fmemory-model = tùy chọn.
cho phép-lưu trữ-dữ liệu-cuộc đua
Cho phép trình tối ưu hóa giới thiệu các cuộc đua dữ liệu mới trên các cửa hàng. Đặt thành 1 để cho phép,
nếu không thì thành 0. Tùy chọn này được bật theo mặc định trừ khi được đặt hoàn toàn bởi
-fmemory-model = tùy chọn.
cho phép-đóng gói-tải-dữ liệu-cuộc đua
Cho phép trình tối ưu hóa giới thiệu các cuộc đua dữ liệu mới khi tải dữ liệu được đóng gói. Đặt thành 1 thành
cho phép, ngược lại là 0. Tùy chọn này được bật theo mặc định trừ khi được đặt ngầm bởi
các -fmemory-model = tùy chọn.
cho phép-đóng gói-cửa hàng-dữ liệu-cuộc đua
Cho phép trình tối ưu hóa giới thiệu các cuộc đua dữ liệu mới trên các kho dữ liệu được đóng gói. Đặt thành 1 thành
cho phép, ngược lại là 0. Tùy chọn này được bật theo mặc định trừ khi được đặt ngầm bởi
các -fmemory-model = tùy chọn.
trường hợp-giá trị-ngưỡng
Số lượng nhỏ nhất của các giá trị khác nhau mà tốt nhất là sử dụng bảng nhảy
thay cho cây thuộc cành có điều kiện. Nếu giá trị là 0, hãy sử dụng giá trị mặc định cho
máy. Giá trị mặc định là 0.
tree-ressoc-width
Đặt số lượng lệnh tối đa được thực thi song song trong cây được liên kết lại.
Tham số này ghi đè các phương pháp chẩn đoán phụ thuộc vào mục tiêu được sử dụng theo mặc định nếu có
giá trị bằng không.
lập lịch-áp-thuật-toán
Chọn giữa hai cách triển khai có sẵn của -sched-áp suất. Thuật toán 1
là triển khai ban đầu và có nhiều khả năng ngăn chặn các hướng dẫn từ
đang được sắp xếp lại. Thuật toán 2 được thiết kế để thỏa hiệp giữa
cách tiếp cận tương đối thận trọng được thực hiện bởi thuật toán 1 và khá tích cực
phương pháp tiếp cận được thực hiện bởi bộ lập lịch mặc định. Nó phụ thuộc nhiều hơn vào việc có
tập tin đăng ký thường xuyên và đăng ký chính xác các lớp học áp lực. Nhìn thấy haifa-calendar.c
trong các nguồn GCC để biết thêm chi tiết.
Sự lựa chọn mặc định phụ thuộc vào mục tiêu.
max-slsr-cand-quét
Đặt số lượng ứng viên hiện có tối đa sẽ được xem xét khi tìm kiếm
một cơ sở cho một ứng cử viên giảm cường độ đường thẳng mới.
Các lựa chọn Kiểm soát các Bộ tiền xử lý
Các tùy chọn này kiểm soát bộ tiền xử lý C, được chạy trên mỗi tệp nguồn C trước khi thực
biên dịch.
Nếu bạn sử dụng -E tùy chọn, không có gì được thực hiện ngoại trừ tiền xử lý. Một số tùy chọn này
chỉ có ý nghĩa cùng với -E bởi vì chúng khiến đầu ra của bộ xử lý trước là
không thích hợp cho việc biên dịch thực tế.
-wp,tùy chọn
Bạn có thể sử dụng -wp,tùy chọn để bỏ qua trình điều khiển trình biên dịch và vượt qua tùy chọn trực tiếp thông qua
tới bộ tiền xử lý. Nếu như tùy chọn chứa dấu phẩy, nó được chia thành nhiều tùy chọn tại
dấu phẩy. Tuy nhiên, nhiều tùy chọn được sửa đổi, dịch hoặc giải thích bởi
trình điều khiển trình biên dịch trước khi được chuyển cho bộ tiền xử lý, và -Wp bỏ qua cưỡng bức
giai đoạn này. Giao diện trực tiếp của bộ tiền xử lý là không có tài liệu và phải tuân theo
thay đổi, vì vậy bất cứ khi nào có thể, bạn nên tránh sử dụng -Wp và để người lái xe xử lý
thay vào đó.
-Xtiền xử lý tùy chọn
Qua tùy chọn như một tùy chọn cho bộ tiền xử lý. Bạn có thể sử dụng cái này để cung cấp hệ thống-
các tùy chọn tiền xử lý cụ thể mà GCC không nhận ra.
Nếu bạn muốn chuyển một tùy chọn có đối số, bạn phải sử dụng -Xtiền xử lý
hai lần, một lần cho tùy chọn và một lần cho đối số.
-không tích hợp-cpp
Thực hiện tiền xử lý như một lần vượt qua riêng biệt trước khi biên dịch. Theo mặc định, GCC thực hiện
tiền xử lý như một phần tích hợp của mã hóa đầu vào và phân tích cú pháp. Nếu tùy chọn này
được cung cấp, giao diện người dùng ngôn ngữ thích hợp (Cc1, cc1plus, hoặc là cc1obj cho C, C ++,
và Objective-C, tương ứng) được gọi hai lần, một lần chỉ để xử lý trước
và một lần để biên dịch thực tế đầu vào được xử lý trước. Tùy chọn này có thể hữu ích
kết hợp với các -B or -vỏ bánh các tùy chọn để chỉ định một bộ tiền xử lý thay thế hoặc
thực hiện xử lý bổ sung nguồn chương trình giữa tiền xử lý thông thường và
biên dịch.
-D tên
Xác định trước tên dưới dạng macro, với định nghĩa 1.
-D tên=định nghĩa
Nội dung của định nghĩa được mã hóa và xử lý như thể chúng xuất hiện trong
dịch giai đoạn ba trong một #định nghĩa chỉ thị. Đặc biệt, định nghĩa sẽ là
bị cắt ngắn bởi các ký tự dòng mới được nhúng.
Nếu bạn đang gọi bộ xử lý tiền xử lý từ một chương trình tương tự như shell hoặc shell, bạn có thể cần
sử dụng cú pháp trích dẫn của shell để bảo vệ các ký tự chẳng hạn như dấu cách có
nghĩa trong cú pháp shell.
Nếu bạn muốn xác định một macro giống hàm trên dòng lệnh, hãy viết đối số của nó
liệt kê có dấu ngoặc bao quanh trước dấu bằng (nếu có). Dấu ngoặc đơn là
có ý nghĩa với hầu hết các shell, vì vậy bạn sẽ cần phải trích dẫn tùy chọn. Với sh và csh,
-NS'tên(args ...)=định nghĩa' công trình.
-D và -U các tùy chọn được xử lý theo thứ tự chúng được đưa ra trên dòng lệnh. Tất cả các
-imacro hồ sơ và bao gồm hồ sơ các tùy chọn được xử lý sau khi tất cả -D và -U tùy chọn.
-U tên
Hủy bỏ mọi định nghĩa trước đây về tên, được tích hợp sẵn hoặc được cung cấp với -D tùy chọn.
-nằm
Không xác định trước bất kỳ macro nào dành riêng cho hệ thống hoặc macro cụ thể cho GCC. Tiêu chuẩn được xác định trước
macro vẫn được xác định.
-I dir
Thêm thư mục dir vào danh sách các thư mục được tìm kiếm các tệp tiêu đề.
Thư mục được đặt tên bởi -I được tìm kiếm trước khi hệ thống tiêu chuẩn bao gồm các thư mục.
Nếu thư mục dir là một hệ thống tiêu chuẩn bao gồm thư mục, tùy chọn được bỏ qua để
đảm bảo rằng thứ tự tìm kiếm mặc định cho các thư mục hệ thống và cách xử lý đặc biệt
của tiêu đề hệ thống không bị đánh bại. Nếu như dir bắt đầu bằng "=", sau đó "=" sẽ là
được thay thế bằng tiền tố sysroot; Thấy chưa --sysroot và -isysroot.
-o hồ sơ
Ghi đầu ra vào hồ sơ. Điều này cũng giống như chỉ định hồ sơ là lựa chọn không phải thứ hai
tranh luận với cpp. gcc có cách giải thích khác về đối số không phải tùy chọn thứ hai,
vì vậy bạn phải sử dụng -o để chỉ định tệp đầu ra.
-Tường
Bật tất cả các cảnh báo tùy chọn mong muốn cho mã bình thường. Hiện tại cái này
is -Nhận xét, -Tranh, -Wmultichar và cảnh báo về việc quảng cáo số nguyên gây ra
thay đổi dấu hiệu trong biểu thức "#if". Lưu ý rằng nhiều cảnh báo của bộ xử lý trước
được bật theo mặc định và không có tùy chọn để kiểm soát chúng.
-Nhận xét
-Kể từ
Cảnh báo bất cứ khi nào chuỗi bắt đầu nhận xét /* xuất hiện trong một /* bình luận, hoặc bất cứ khi nào
dấu gạch chéo ngược-dòng mới xuất hiện trong một // bình luận. (Cả hai hình thức đều có tác dụng như nhau.)
-Tranh
Hầu hết các đoạn trong bình luận không thể ảnh hưởng đến ý nghĩa của chương trình. Tuy nhiên, một
biểu đồ sẽ tạo thành một dòng mới thoát (?? / ở cuối dòng) có thể, bởi
thay đổi nơi bắt đầu hoặc kết thúc nhận xét. Do đó, chỉ những đoạn sẽ hình thành
dòng mới thoát tạo ra cảnh báo bên trong một bình luận.
Tùy chọn này được ngụ ý bởi -Tường. Nếu -Tường không được cung cấp, tùy chọn này vẫn được bật
trừ khi các phần tử được kích hoạt. Để nhận được chuyển đổi theo đoạn mà không có cảnh báo, nhưng nhận được
khác -Tường cảnh báo, sử dụng -trigraphs -Tường -Không có đồ thị.
-Điều kiện
Cảnh báo về một số cấu trúc hoạt động khác nhau trong ISO truyền thống và ISO C. Ngoài ra
cảnh báo về cấu trúc ISO C không có tương đương C truyền thống và có vấn đề
cấu trúc nên tránh.
-Wundef
Cảnh báo bất cứ khi nào gặp phải mã định danh không phải là macro trong #nếu chỉ thị,
bên ngoài xác định. Các định danh như vậy được thay thế bằng số không.
-Wunused-macro
Cảnh báo về các macro được xác định trong tệp chính không được sử dụng. Macro là đã sử dụng nếu nó là
mở rộng hoặc kiểm tra sự tồn tại ít nhất một lần. Bộ xử lý trước cũng sẽ cảnh báo nếu
macro chưa được sử dụng tại thời điểm nó được xác định lại hoặc chưa được xác định.
Macro dựng sẵn, macro được xác định trên dòng lệnh và macro được xác định trong bao gồm
các tập tin không được cảnh báo về.
Lưu ý: Nếu macro thực sự được sử dụng, nhưng chỉ được sử dụng trong các khối điều kiện bị bỏ qua, thì
CPP sẽ báo cáo nó là chưa sử dụng. Để tránh cảnh báo trong trường hợp như vậy, bạn có thể cải thiện
phạm vi định nghĩa của macro, ví dụ, bằng cách chuyển nó vào định nghĩa đầu tiên bị bỏ qua
khối. Ngoài ra, bạn có thể cung cấp cách sử dụng giả với những thứ như:
#if đã xác định_macro_causing_the_warning
#endif
-Wendif-label
Cảnh báo bất cứ khi nào #khác hoặc một #endif được theo sau bởi văn bản. Điều này thường xảy ra trong
mã của biểu mẫu
# nếu FOO
...
#else FOO
...
#endif FOO
"FOO" thứ hai và thứ ba nên có trong nhận xét, nhưng thường không có trong các chương trình cũ hơn.
Cảnh báo này được bật theo mặc định.
- Lỗi
Thực hiện tất cả các cảnh báo thành lỗi khó. Mã nguồn kích hoạt cảnh báo sẽ là
từ chối.
-Các tiêu đề hệ thống
Đưa ra cảnh báo cho mã trong tiêu đề hệ thống. Những thứ này thường không hữu ích trong việc tìm kiếm
lỗi trong mã của riêng bạn, do đó bị loại bỏ. Nếu bạn chịu trách nhiệm về hệ thống
thư viện, bạn có thể muốn xem chúng.
-w Loại bỏ tất cả các cảnh báo, bao gồm cả những cảnh báo mà GNU CPP đưa ra theo mặc định.
- mang tính mô phạm
Đưa ra tất cả các chẩn đoán bắt buộc được liệt kê trong tiêu chuẩn C. Một số trong số họ còn lại
theo mặc định, vì chúng thường kích hoạt trên mã vô hại.
-pedantic-error
Đưa ra tất cả các chẩn đoán bắt buộc và biến tất cả các chẩn đoán bắt buộc thành lỗi.
Điều này bao gồm các chẩn đoán bắt buộc mà GCC đưa ra mà không có - mang tính mô phạm nhưng đối xử như
cảnh báo.
-M Thay vì xuất ra kết quả của quá trình tiền xử lý, hãy xuất ra một quy tắc phù hợp với làm cho
mô tả các phần phụ thuộc của tệp nguồn chính. Bộ tiền xử lý xuất ra một
làm cho quy tắc chứa tên tệp đối tượng cho tệp nguồn đó, dấu hai chấm và tên
của tất cả các tệp được bao gồm, bao gồm cả những tệp đến từ bao gồm or -imacro lệnh
tùy chọn dòng.
Trừ khi được chỉ định rõ ràng (với -MT or -MQ), tên tệp đối tượng bao gồm
tên của tệp nguồn với bất kỳ hậu tố nào được thay thế bằng hậu tố tệp đối tượng và bằng bất kỳ
phần thư mục hàng đầu bị xóa. Nếu có nhiều tệp được bao gồm thì quy tắc là
chia thành nhiều dòng bằng cách sử dụng \-dòng mới. Quy tắc không có lệnh.
Tùy chọn này không ngăn chặn đầu ra gỡ lỗi của bộ xử lý trước, chẳng hạn như -dM. Tránh
trộn kết quả gỡ lỗi như vậy với các quy tắc phụ thuộc, bạn nên chỉ định rõ ràng
tệp đầu ra phụ thuộc với -MFhoặc sử dụng một biến môi trường như
DEPENDENCIES_OUTPUT. Đầu ra gỡ lỗi sẽ vẫn được gửi đến luồng đầu ra thông thường như
Bình thường.
Đi qua -M cho người lái xe ngụ ý -Evà ngăn chặn các cảnh báo với hàm ý -w.
-MM Như -M nhưng không đề cập đến các tệp tiêu đề được tìm thấy trong thư mục tiêu đề hệ thống,
cũng không phải các tệp tiêu đề được bao gồm, trực tiếp hoặc gián tiếp, từ tiêu đề đó.
Điều này ngụ ý rằng việc lựa chọn dấu ngoặc nhọn hoặc dấu ngoặc kép trong dấu ngoặc #include
Bản thân chỉ thị không xác định liệu tiêu đề đó có xuất hiện trong -MM
sản lượng phụ thuộc. Đây là một thay đổi nhỏ về ngữ nghĩa từ phiên bản GCC 3.0 và
sớm hơn.
-MF hồ sơ
Khi sử dụng với -M or -MM, chỉ định một tệp để ghi các phụ thuộc vào. Nếu không -MF
chuyển đổi được cung cấp cho bộ xử lý trước gửi các quy tắc đến cùng một nơi mà nó sẽ gửi
đầu ra được xử lý trước.
Khi được sử dụng với các tùy chọn trình điều khiển -MD or -MMD, -MF ghi đè phần phụ thuộc mặc định
tập tin đầu ra.
-MG Cùng với một tùy chọn như -M yêu cầu tạo phụ thuộc, -MG giả định
các tệp tiêu đề bị thiếu là các tệp được tạo và thêm chúng vào danh sách phụ thuộc mà không có
nêu ra một lỗi. Tên tệp phụ thuộc được lấy trực tiếp từ "#include"
chỉ thị mà không có đường dẫn trước nào. -MG cũng ngăn chặn đầu ra được xử lý trước, như một
thiếu tập tin tiêu đề làm cho điều này vô dụng.
Tính năng này được sử dụng để cập nhật tự động các tệp trang điểm.
-MP Tùy chọn này hướng dẫn CPP thêm một mục tiêu giả mạo cho từng phụ thuộc khác với
tệp chính, khiến mỗi tệp không phụ thuộc vào tệp nào. Các quy tắc giả này giải quyết các lỗi
làm cho cho nếu bạn xóa các tệp tiêu đề mà không cập nhật makefile khớp.
Đây là đầu ra điển hình:
test.o: test.c test.h
kiểm tra.h:
-MT mục tiêu
Thay đổi mục tiêu của quy tắc được tạo ra bởi quá trình tạo phụ thuộc. Theo mặc định, CPP mất
tên của tệp đầu vào chính, xóa mọi thành phần thư mục và bất kỳ hậu tố tệp nào
như là .cvà thêm hậu tố đối tượng thông thường của nền tảng. Kết quả là mục tiêu.
An -MT tùy chọn sẽ đặt mục tiêu chính xác là chuỗi bạn chỉ định. Nếu bạn muốn
nhiều mục tiêu, bạn có thể chỉ định chúng như một đối số duy nhất để -MThoặc sử dụng nhiều
-MT tùy chọn.
Ví dụ, -MT '$ (objpfx) foo.o' có thể cho
$ (objpfx) foo.o: foo.c
-MQ mục tiêu
Giống như -MT, nhưng nó trích dẫn bất kỳ ký tự nào đặc biệt để Make.
-MQ '$ (objpfx) foo.o' cho
$$ (objpfx) foo.o: foo.c
Mục tiêu mặc định được tự động trích dẫn, như thể nó được đưa ra với -MQ.
-MD -MD tương đương với -M -MF hồ sơ, ngoại trừ việc -E không được ngụ ý. Người lái xe
xác định hồ sơ dựa trên liệu một -o tùy chọn được đưa ra. Nếu có, trình điều khiển sử dụng
đối số nhưng với hậu tố là .d, nếu không, nó lấy tên của tệp đầu vào,
loại bỏ bất kỳ thành phần và hậu tố thư mục nào và áp dụng .d hậu tố.
If -MD được sử dụng cùng với -E, bất kì -o chuyển đổi được hiểu là để chỉ định
tệp đầu ra phụ thuộc, nhưng nếu được sử dụng mà không có -E, mỗi -o được hiểu là chỉ định một
tệp đối tượng đích.
từ -E không được ngụ ý, -MD có thể được sử dụng để tạo tệp đầu ra phụ thuộc dưới dạng
tác dụng phụ của quá trình biên dịch.
-MMD
Như -MD ngoại trừ chỉ đề cập đến các tệp tiêu đề người dùng, không đề cập đến các tệp tiêu đề hệ thống.
-fpch-deps
Khi sử dụng các tiêu đề được biên dịch trước, cờ này sẽ làm cho các cờ đầu ra phụ thuộc
cũng liệt kê các tệp từ các phần phụ thuộc của tiêu đề được biên dịch trước. Nếu không chỉ định
tiêu đề được biên dịch trước sẽ được liệt kê và không phải là các tệp được sử dụng để tạo ra nó
bởi vì những tệp đó không được tham khảo khi sử dụng tiêu đề biên dịch trước.
-fpch-tiền xử lý
Tùy chọn này cho phép sử dụng tiêu đề được biên dịch trước cùng với -E. Nó chèn một đặc biệt
"#pragma", "#pragma GCC pch_preprocess"tên tệp "" trong đầu ra để đánh dấu địa điểm
nơi tiêu đề được biên dịch trước được tìm thấy và tên tập tin. Khi nào -được xử lý trước là
sử dụng, GCC nhận ra "#pragma" này và tải PCH.
Tùy chọn này bị tắt theo mặc định, vì kết quả đầu ra được xử lý trước chỉ là
thực sự phù hợp làm đầu vào cho GCC. Nó được bật bởi -save-temps.
Bạn không nên viết "#pragma" này bằng mã của riêng mình, nhưng có thể an toàn khi chỉnh sửa
tên tệp nếu tệp PCH có sẵn ở một vị trí khác. Tên tệp có thể là
tuyệt đối hoặc nó có thể liên quan đến thư mục hiện tại của GCC.
-x c
-x c ++
-x mục tiêu-c
-x người lắp ráp-với-cpp
Chỉ định ngôn ngữ nguồn: C, C ++, Objective-C hoặc hợp ngữ. Điều này không có gì để làm
với sự phù hợp hoặc mở rộng tiêu chuẩn; nó chỉ chọn cú pháp cơ sở để
chờ đợi. Nếu bạn không đưa ra tùy chọn nào trong số này, cpp sẽ suy ra ngôn ngữ từ
phần mở rộng của tệp nguồn: .c, . Cc, .m, hoặc là .S. Một số tiện ích mở rộng phổ biến khác cho
C ++ và hợp ngữ cũng được công nhận. Nếu cpp không nhận ra phần mở rộng, nó
sẽ coi tệp là C; đây là chế độ chung nhất.
Lưu ý: Các phiên bản cpp trước đây đã chấp nhận một -lang tùy chọn đã chọn cả hai
ngôn ngữ và mức độ tuân thủ các tiêu chuẩn. Tùy chọn này đã bị xóa, bởi vì
nó xung đột với -l tùy chọn.
-std =Tiêu chuẩn
-ansi
Chỉ định tiêu chuẩn mà mã phải tuân theo. Hiện CPP biết về C
và tiêu chuẩn C ++; những người khác có thể được thêm vào trong tương lai.
Tiêu chuẩn có thể là một trong số:
"c90"
"c89"
"iso9899: 1990"
Tiêu chuẩn ISO C từ năm 1990. c90 là cách viết tắt thông thường cho phiên bản này của
chuẩn mực.
Sản phẩm -ansi tùy chọn tương đương với -std = c90.
"iso9899: 199409"
Tiêu chuẩn C 1990, được sửa đổi vào năm 1994.
"iso9899: 1999"
"c99"
"iso9899: 199x"
"c9x"
Tiêu chuẩn ISO C sửa đổi, được xuất bản vào tháng 1999 năm XNUMX. Trước khi xuất bản, điều này
được gọi là C9X.
"iso9899: 2011"
"c11"
"c1x"
Tiêu chuẩn ISO C sửa đổi, được xuất bản vào tháng 2011 năm XNUMX. Trước khi xuất bản, điều này
được gọi là C1X.
"gnu90"
"gnu89"
Tiêu chuẩn C 1990 cộng với các phần mở rộng GNU. Đây là mặc định.
"gnu99"
"gnu9x"
Tiêu chuẩn C 1999 cộng với các phần mở rộng GNU.
"gnu11"
"gnu1x"
Tiêu chuẩn C 2011 cộng với các phần mở rộng GNU.
"c ++ 98"
Tiêu chuẩn ISO C ++ 1998 cùng với các sửa đổi.
"gnu ++ 98"
Giống như -std = c ++ 98 cộng với các phần mở rộng GNU. Đây là mặc định cho mã C ++.
-TÔI- Tách đường dẫn bao gồm. Bất kỳ thư mục nào được chỉ định với -I tùy chọn trước đây -TÔI- đang
chỉ tìm kiếm các tiêu đề được yêu cầu bằng "#include"tập tin""; họ không được tìm kiếm
"#bao gồmtệp> ". Nếu các thư mục bổ sung được chỉ định với -I các tùy chọn sau
-TÔI-, những thư mục đó được tìm kiếm cho tất cả #include chỉ thị.
Ngoài ra, -TÔI- ngăn cản việc sử dụng thư mục của thư mục tệp hiện tại như
thư mục tìm kiếm đầu tiên cho "#include"tập tin"". Tùy chọn này đã không được chấp nhận.
-nostdinc
Không tìm kiếm các thư mục hệ thống tiêu chuẩn cho các tệp tiêu đề. Chỉ các thư mục
bạn đã chỉ định với -I tùy chọn (và thư mục của tệp hiện tại, nếu
thích hợp) được tìm kiếm.
-nostdinc ++
Không tìm kiếm tệp tiêu đề trong C ++ - thư mục tiêu chuẩn cụ thể, nhưng vẫn làm
tìm kiếm các thư mục tiêu chuẩn khác. (Tùy chọn này được sử dụng khi xây dựng C ++
thư viện.)
bao gồm hồ sơ
Quy trình xét duyệt hồ sơ như thể "#include" tệp "" xuất hiện dưới dạng dòng đầu tiên của nguồn chính
tập tin. Tuy nhiên, thư mục đầu tiên được tìm kiếm hồ sơ bộ tiền xử lý có hoạt động không
thư mục thay vì of thư mục chứa tệp nguồn chính. Nếu không tìm thấy
ở đó, nó được tìm kiếm trong phần còn lại của chuỗi tìm kiếm "#include" ... "" dưới dạng
Bình thường.
Nếu nhiều bao gồm các tùy chọn được đưa ra, các tệp được bao gồm theo thứ tự
xuất hiện trên dòng lệnh.
-imacro hồ sơ
Chính xác như bao gồm, ngoại trừ bất kỳ đầu ra nào được tạo ra bằng cách quét hồ sơ được ném
xa. Macro nó định nghĩa vẫn được xác định. Điều này cho phép bạn có được tất cả các macro
từ một tiêu đề mà không xử lý các khai báo của nó.
Tất cả các tệp được chỉ định bởi -imacro được xử lý trước khi tất cả các tệp được chỉ định bởi bao gồm.
-đi sau dir
Tìm kiếm dir cho các tệp tiêu đề, nhưng hãy làm điều đó sau khi tất cả các thư mục được chỉ định với -I và
thư mục hệ thống tiêu chuẩn đã hết. dir được coi như một hệ thống bao gồm
danh mục. Nếu như dir bắt đầu bằng "=", sau đó "=" sẽ được thay thế bằng sysroot
tiếp đầu ngữ; Thấy chưa --sysroot và -isysroot.
-iprefix tiếp đầu ngữ
Chỉ định tiếp đầu ngữ làm tiền tố cho tiếp theo -iwithprefix tùy chọn. Nếu tiền tố
đại diện cho một thư mục, bạn nên bao gồm phần cuối cùng /.
-iwithprefix dir
-iwithprefixb Before dir
Nối dir đến tiền tố được chỉ định trước đó với -iprefixvà thêm kết quả
thư mục đến đường dẫn tìm kiếm bao gồm. -iwithprefixb Before đặt nó ở cùng một nơi -I
sẽ; -iwithprefix đặt nó ở đâu -đi sau sẽ.
-isysroot dir
Tùy chọn này giống như --sysroot nhưng chỉ áp dụng cho các tệp tiêu đề (ngoại trừ
Darwin nhắm mục tiêu, nơi nó áp dụng cho cả tệp tiêu đề và thư viện). Xem
--sysroot để biết thêm thông tin.
-imultilib dir
Sử dụng dir dưới dạng thư mục con của thư mục chứa tiêu đề C ++ dành riêng cho mục tiêu.
-hệ thống dir
Tìm kiếm dir cho các tệp tiêu đề, sau tất cả các thư mục được chỉ định bởi -I nhưng trước khi
thư mục hệ thống tiêu chuẩn. Đánh dấu nó là một thư mục hệ thống, để nó giống nhau
đối xử đặc biệt như được áp dụng cho các thư mục hệ thống tiêu chuẩn. Nếu như dir bắt đầu
với "=", thì "=" sẽ được thay thế bằng tiền tố sysroot; Thấy chưa --sysroot và
-isysroot.
-cài dẫn dir
Tìm kiếm dir chỉ dành cho các tệp tiêu đề được yêu cầu với "#include"tập tin""; họ không phải
đã tìm kiếm "#includetệp> ", trước tất cả các thư mục được chỉ định bởi -I và trước khi
thư mục hệ thống tiêu chuẩn. Nếu như dir bắt đầu bằng "=", sau đó "=" sẽ được thay thế bằng
tiền tố sysroot; Thấy chưa --sysroot và -isysroot.
-chỉ -fdirectives-only
Khi tiền xử lý, hãy xử lý các lệnh, nhưng không mở rộng macro.
Hành vi của tùy chọn phụ thuộc vào -E và -được xử lý trước tùy chọn.
Với -E, tiền xử lý được giới hạn trong việc xử lý các lệnh như "#define",
"#ifdef" và "#error". Các hoạt động tiền xử lý khác, chẳng hạn như mở rộng macro và
chuyển đổi ba đoạn không được thực hiện. Ngoài ra, -dD tùy chọn là ngầm định
kích hoạt.
Với -được xử lý trước, định nghĩa trước của dòng lệnh và hầu hết các macro nội trang là
Vô hiệu hóa. Các macro như "__LINE__", phụ thuộc vào ngữ cảnh, được xử lý
thông thường. Điều này cho phép biên dịch các tệp được xử lý trước bằng "-E
-fdirectives-only ".
Với cả hai -E và -được xử lý trước, các quy tắc cho -được xử lý trước được ưu tiên. Cái này
cho phép xử lý trước đầy đủ các tệp được xử lý trước bằng "-E
-fdirectives-only ".
-fdollars-trong-nhận dạng
Chấp nhận $ trong định danh.
-fextended-nhận dạng
Chấp nhận tên ký tự phổ biến trong số nhận dạng. Tùy chọn này là thử nghiệm; trong một
phiên bản tương lai của GCC, nó sẽ được bật theo mặc định cho C99 và C ++.
-fno-canonical-system-tiêu đề
Khi tiền xử lý, không rút ngắn đường dẫn tiêu đề hệ thống bằng chuẩn hóa.
-được xử lý trước
Cho bộ xử lý biết rằng tệp đầu vào đã được xử lý trước. Cái này
ngăn chặn những thứ như mở rộng macro, chuyển đổi đoạn, nối dòng mới thoát,
và xử lý hầu hết các chỉ thị. Bộ xử lý trước vẫn nhận ra và loại bỏ
nhận xét, để bạn có thể chuyển một tệp được xử lý trước với -C đến trình biên dịch mà không có
các vấn đề. Trong chế độ này, bộ xử lý tiền tích hợp không chỉ là một bộ xử lý tokenizer
cho giao diện người dùng.
-được xử lý trước là ngầm định nếu tệp đầu vào có một trong các phần mở rộng .i, .ii or .mi.
Đây là những tiện ích mở rộng mà GCC sử dụng cho các tệp được xử lý trước được tạo bởi -save-temps.
-ftabstop =chiều rộng
Đặt khoảng cách giữa các điểm dừng tab. Điều này giúp bộ xử lý tiền xử lý báo cáo đúng cột
số trong các cảnh báo hoặc lỗi, ngay cả khi các tab xuất hiện trên dòng. Nếu giá trị nhỏ hơn
hơn 1 hoặc lớn hơn 100, tùy chọn bị bỏ qua. Giá trị mặc định là 8.
-fdebug-cpp
Tùy chọn này chỉ hữu ích để gỡ lỗi GCC. Khi sử dụng với -E, kết xuất gỡ lỗi
thông tin về bản đồ vị trí. Mọi mã thông báo trong đầu ra được đặt trước bởi kết xuất của
bản đồ vị trí của nó. Kết xuất của bản đồ giữ vị trí của mã thông báo
sẽ là:
{"P": F ; "F": F ; "L": ;"NS": ;"NS": ;"NS": ; "E": , "loc": }
Khi sử dụng không có -E, tùy chọn này không có hiệu lực.
-ftrack-macro-mở rộng[=cấp]
Theo dõi vị trí của mã thông báo trên các mở rộng vĩ mô. Điều này cho phép trình biên dịch phát ra
chẩn đoán về ngăn xếp mở rộng macro hiện tại khi xảy ra lỗi biên dịch trong
một sự mở rộng vĩ mô. Sử dụng tùy chọn này làm cho bộ xử lý trước và trình biên dịch tiêu tốn
nhiều bộ nhớ hơn. Các cấp tham số có thể được sử dụng để chọn mức độ chính xác của mã thông báo
theo dõi vị trí do đó giảm mức tiêu thụ bộ nhớ nếu cần thiết. Giá trị 0 of
cấp hủy kích hoạt tùy chọn này giống như nếu không -ftrack-macro-mở rộng đã có mặt trên
dòng lệnh. Giá trị 1 theo dõi các vị trí mã thông báo ở chế độ xuống cấp vì lợi ích
chi phí bộ nhớ tối thiểu. Trong chế độ này, tất cả các mã thông báo do việc mở rộng
đối số của macro giống hàm có cùng vị trí. Giá trị 2 theo dõi mã thông báo
các vị trí hoàn toàn. Giá trị này là bộ nhớ đói nhất. Khi tùy chọn này được đưa ra
không có đối số, giá trị tham số mặc định là 2.
Lưu ý rằng -ftrack-macro-expand = 2 được kích hoạt theo mặc định.
-fexec-charset =bảng chữ cái
Đặt bộ ký tự thực thi, được sử dụng cho chuỗi ký tự và hằng số ký tự. Mặc định
là UTF-8. bảng chữ cái có thể là bất kỳ mã hóa nào được hỗ trợ bởi thư viện "iconv" của hệ thống
công Việt Hằng ngày.
-fwide-executive-charset =bảng chữ cái
Đặt bộ ký tự thực thi rộng, được sử dụng cho các hằng số ký tự và chuỗi rộng.
Giá trị mặc định là UTF-32 hoặc UTF-16, tùy theo giá trị nào tương ứng với chiều rộng của "wchar_t". Như
với -feexec-bộ ký tự, bảng chữ cái có thể là bất kỳ mã hóa nào được hỗ trợ bởi "iconv" của hệ thống
thông lệ thư viện; tuy nhiên, bạn sẽ gặp vấn đề với các bảng mã không phù hợp
chính xác trong "wchar_t".
-finput-charset =bảng chữ cái
Đặt bộ ký tự đầu vào, được sử dụng để dịch từ bộ ký tự của đầu vào
tệp vào bộ ký tự nguồn được GCC sử dụng. Nếu ngôn ngữ không chỉ định, hoặc GCC
không thể lấy thông tin này từ ngôn ngữ, mặc định là UTF-8. Điều này có thể là
bị ghi đè bởi ngôn ngữ hoặc tùy chọn dòng lệnh này. Hiện tại lệnh
tùy chọn dòng được ưu tiên nếu có xung đột. bảng chữ cái có thể là bất kỳ mã hóa nào
được hỗ trợ bởi quy trình thư viện "iconv" của hệ thống.
-fworking-thư mục
Cho phép tạo dấu dòng trong đầu ra của bộ xử lý trước để cho phép trình biên dịch
biết thư mục làm việc hiện tại tại thời điểm tiền xử lý. Khi tùy chọn này là
được kích hoạt, bộ xử lý trước sẽ phát ra, sau bộ đánh dấu dòng ban đầu, bộ đánh dấu dòng thứ hai
với thư mục làm việc hiện tại, theo sau là hai dấu gạch chéo. GCC sẽ sử dụng cái này
thư mục, khi nó xuất hiện trong đầu vào được xử lý trước, khi thư mục được phát ra dưới dạng
thư mục làm việc hiện tại ở một số định dạng thông tin gỡ lỗi. Tùy chọn này là
được bật ngầm nếu thông tin gỡ lỗi được bật, nhưng điều này có thể bị hạn chế với
hình thức phủ định -fno-làm việc-thư mục. Nếu -P cờ có trong lệnh
dòng, tùy chọn này không có hiệu lực, vì không có lệnh "#line" nào được phát ra.
-fno-show-cột
Không in số cột trong chẩn đoán. Điều này có thể cần thiết nếu chẩn đoán
được quét bởi một chương trình không hiểu số cột, chẳng hạn như
dejagnu.
-A Thuộc tính=trả lời
Khẳng định với vị ngữ Thuộc tính và câu trả lời trả lời. Hình thức này là
ưa thích hình thức cũ hơn -A Thuộc tính(trả lời), vẫn được hỗ trợ, vì nó
không sử dụng các ký tự đặc biệt của shell.
-A -Thuộc tính=trả lời
Hủy một khẳng định với vị ngữ Thuộc tính và câu trả lời trả lời.
-dCHARS
PHÍ là một chuỗi gồm một hoặc nhiều ký tự sau đây và không được
trước dấu cách. Các ký tự khác được giải thích bởi trình biên dịch thích hợp, hoặc
dành riêng cho các phiên bản GCC trong tương lai, và do đó, bị bỏ qua một cách âm thầm. Nếu bạn chỉ định
nhân vật có hành vi xung đột, kết quả là không xác định.
M Thay vì đầu ra bình thường, hãy tạo một danh sách #định nghĩa chỉ thị cho tất cả
các macro được xác định trong quá trình thực thi bộ xử lý trước, bao gồm cả các macro được xác định trước
macro. Điều này cung cấp cho bạn một cách để tìm ra những gì được xác định trước trong phiên bản
bộ tiền xử lý. Giả sử bạn không có tệp foo.h, lệnh
chạm vào foo.h; cpp -dM foo.h
sẽ hiển thị tất cả các macro được xác định trước.
Nếu bạn sử dụng -dM không có -E Tùy chọn, -dM được hiểu như một từ đồng nghĩa với
-fdump-rtl-mach.
D Như M ngoại trừ hai khía cạnh: nó có không bao gồm các macro được xác định trước và nó
kết quả đầu ra cả hai các #định nghĩa chỉ thị và kết quả của quá trình tiền xử lý. Cả hai loại
của đầu ra chuyển đến tệp đầu ra tiêu chuẩn.
N Như D, nhưng chỉ phát ra các tên macro, không phát ra các tên mở rộng của chúng.
I Đầu ra #include chỉ thị ngoài kết quả của quá trình tiền xử lý.
U Như D ngoại trừ việc chỉ các macro được mở rộng hoặc có tính xác định được kiểm tra
trong chỉ thị tiền xử lý, là đầu ra; đầu ra bị trì hoãn cho đến khi sử dụng hoặc
thử nghiệm của vĩ mô; và #undef các chỉ thị cũng được xuất cho các macro được kiểm tra nhưng
không xác định tại thời điểm.
-P Ngăn chặn việc tạo dòng đánh dấu trong đầu ra từ bộ tiền xử lý. Đây có thể là
hữu ích khi chạy bộ tiền xử lý trên thứ gì đó không phải là mã C và sẽ được gửi
đến một chương trình có thể bị nhầm lẫn bởi các dấu dòng.
-C Không loại bỏ các bình luận. Tất cả các nhận xét được chuyển đến tệp đầu ra, ngoại trừ
đối với các nhận xét trong các lệnh đã xử lý, các nhận xét này sẽ bị xóa cùng với lệnh.
Bạn nên chuẩn bị cho các tác dụng phụ khi sử dụng -C; nó khiến bộ tiền xử lý
coi các bình luận như các mã thông báo theo đúng nghĩa của chúng. Ví dụ: các nhận xét xuất hiện tại
bắt đầu của những gì sẽ là một dòng chỉ thị có tác dụng biến dòng đó thành một
dòng nguồn thông thường, vì mã thông báo đầu tiên trên dòng không còn là #.
-CC Không loại bỏ nhận xét, kể cả khi mở rộng macro. Điều này giống như -C, ngoại trừ
rằng các nhận xét có trong macro cũng được chuyển đến tệp đầu ra, nơi
macro được mở rộng.
Ngoài những tác dụng phụ của -C tùy chọn, -CC tùy chọn gây ra tất cả C ++ - style
nhận xét bên trong macro sẽ được chuyển đổi thành nhận xét kiểu C. Điều này để ngăn chặn sau này
sử dụng macro đó từ việc vô tình nhận xét phần còn lại của dòng nguồn.
Sản phẩm -CC tùy chọn thường được sử dụng để hỗ trợ nhận xét lint.
-truyền thống-cpp
Cố gắng bắt chước hành vi của các bộ tiền xử lý C kiểu cũ, trái ngược với ISO C
bộ tiền xử lý.
-trigraphs
Xử lý trình tự phân đoạn. Đây là các chuỗi ba ký tự, tất cả đều bắt đầu bằng
??, được ISO C định nghĩa là viết tắt của các ký tự đơn lẻ. Ví dụ, ?? / đứng
cho \, Vì vậy '??/n' là một hằng số ký tự cho một dòng mới. Theo mặc định, GCC bỏ qua
đồ thị, nhưng ở chế độ phù hợp tiêu chuẩn, nó sẽ chuyển đổi chúng. Xem -std và -ansi
tùy chọn.
Chín phần và sự thay thế của chúng là
Trigraph: ?? (??) ?? <??> ?? = ?? / ?? ' ??! ?? -
Thay thế: [] {} # \ ^ | ~
-bản đồ
Bật mã đặc biệt để hoạt động xung quanh các hệ thống tệp chỉ cho phép tệp rất ngắn
tên, chẳng hạn như MS-DOS.
--Cứu giúp
- mục tiêu-trợ giúp
In văn bản mô tả tất cả các tùy chọn dòng lệnh thay vì xử lý trước bất kỳ thứ gì.
-v Chế độ chi tiết. In ra số phiên bản của GNU CPP khi bắt đầu thực thi, và
báo cáo dạng cuối cùng của đường dẫn bao gồm.
-H In tên của mỗi tệp tiêu đề được sử dụng, ngoài các hoạt động bình thường khác. Mỗi
tên được thụt vào để hiển thị mức độ sâu trong #include xếp chồng lên nhau. Tiêu đề được biên dịch trước
các tệp cũng được in, ngay cả khi chúng được phát hiện là không hợp lệ; một biên dịch trước không hợp lệ
tệp tiêu đề được in bằng ...NS và một cái hợp lệ với ...! .
-phiên bản
--phiên bản
In ra số phiên bản của GNU CPP. Với một dấu gạch ngang, hãy tiến hành tiền xử lý như bình thường.
Với hai dấu gạch ngang, hãy thoát ra ngay lập tức.
Đi qua Các lựa chọn đến các Nhà lắp ráp
Bạn có thể chuyển các tùy chọn cho trình lắp ráp.
-À,tùy chọn
Qua tùy chọn như một tùy chọn cho trình lắp ráp. Nếu như tùy chọn chứa dấu phẩy, nó được tách ra
thành nhiều tùy chọn tại dấu phẩy.
-Xassembler tùy chọn
Qua tùy chọn như một tùy chọn cho trình lắp ráp. Bạn có thể sử dụng điều này để cung cấp cho hệ thống cụ thể
các tùy chọn trình lắp ráp mà GCC không nhận ra.
Nếu bạn muốn chuyển một tùy chọn có đối số, bạn phải sử dụng -Xassembler hai lần
một lần cho tùy chọn và một lần cho đối số.
Các lựa chọn cho Liên kết
Các tùy chọn này phát huy tác dụng khi trình biên dịch liên kết các tệp đối tượng thành một tệp thực thi
tệp đầu ra. Chúng sẽ vô nghĩa nếu trình biên dịch không thực hiện bước liên kết.
tên-tệp-đối-tượng
Tên tệp không kết thúc bằng hậu tố được công nhận đặc biệt được coi là tên một
tệp đối tượng hoặc thư viện. (Trình liên kết phân biệt tệp đối tượng với thư viện
theo nội dung tệp.) Nếu quá trình liên kết được thực hiện, các tệp đối tượng này được sử dụng như
đầu vào cho trình liên kết.
-c
-S
-E Nếu bất kỳ tùy chọn nào trong số này được sử dụng, thì trình liên kết sẽ không chạy và tên tệp đối tượng
không nên được sử dụng làm đối số.
-lthư viện
-l thư viện
Tìm kiếm thư viện có tên thư viện khi liên kết. (Phương án thay thế thứ hai với
thư viện như một đối số riêng chỉ dành cho việc tuân thủ POSIX và không được khuyến nghị.)
Nó tạo ra sự khác biệt trong lệnh bạn viết tùy chọn này; trình liên kết tìm kiếm
và xử lý các thư viện và tệp đối tượng theo thứ tự chúng được chỉ định. Vì vậy, foo.o
-lz thanh.o tìm kiếm thư viện z sau khi tập tin foo.o nhưng trước đó thanh.o. Nếu thanh.o đề cập đến
chức năng trong z, những chức năng đó có thể không được tải.
Trình liên kết tìm kiếm danh sách thư mục tiêu chuẩn cho thư viện, thực sự là
một tập tin có tên thư viện.a. Sau đó, trình liên kết sử dụng tệp này như thể nó đã được chỉ định
chính xác bằng tên.
Các thư mục được tìm kiếm bao gồm một số thư mục hệ thống tiêu chuẩn cộng với bất kỳ thư mục nào mà bạn
chỉ định với -L.
Thông thường các tệp được tìm thấy theo cách này là tệp thư viện --- tệp lưu trữ có thành viên là
các tệp đối tượng. Trình liên kết xử lý tệp lưu trữ bằng cách quét qua tệp đó để tìm thành viên
trong đó xác định các ký hiệu cho đến nay đã được tham chiếu nhưng không được xác định. Nhưng nếu
tệp được tìm thấy là tệp đối tượng bình thường, nó được liên kết theo kiểu thông thường. Các
sự khác biệt duy nhất giữa việc sử dụng một -l tùy chọn và chỉ định một tên tệp là -l
bao quanh thư viện với lib và .a và tìm kiếm một số thư mục.
-lobjc
Bạn cần trường hợp đặc biệt này của -l để liên kết Objective-C hoặc
Chương trình Objective-C ++.
-nostartfiles
Không sử dụng các tệp khởi động hệ thống tiêu chuẩn khi liên kết. Hệ thống tiêu chuẩn
thư viện được sử dụng bình thường, trừ khi -nostdlib or -nodedefaultlibs Được sử dụng.
-nodedefaultlibs
Không sử dụng các thư viện hệ thống tiêu chuẩn khi liên kết. Chỉ những thư viện bạn chỉ định
được chuyển đến trình liên kết và các tùy chọn chỉ định liên kết của các thư viện hệ thống, chẳng hạn như
là "-static-libgcc" hoặc "-shared-libgcc", bị bỏ qua. Các tệp khởi động tiêu chuẩn là
được sử dụng bình thường, trừ khi -nostartfiles Được sử dụng.
Trình biên dịch có thể tạo ra các lệnh gọi đến "memcmp", "memset", "memcpy" và "memmove". Này
các mục nhập thường được giải quyết bằng các mục nhập trong libc. Các điểm vào này nên
được cung cấp thông qua một số cơ chế khác khi tùy chọn này được chỉ định.
-nostdlib
Không sử dụng các tệp hoặc thư viện khởi động hệ thống tiêu chuẩn khi liên kết. Không khởi động
các tệp và chỉ các thư viện bạn chỉ định mới được chuyển đến trình liên kết và các tùy chọn
chỉ định liên kết của các thư viện hệ thống, chẳng hạn như "-static-libgcc" hoặc
"-shared-libgcc", bị bỏ qua.
Trình biên dịch có thể tạo ra các lệnh gọi đến "memcmp", "memset", "memcpy" và "memmove". Này
các mục nhập thường được giải quyết bằng các mục nhập trong libc. Các điểm vào này nên
được cung cấp thông qua một số cơ chế khác khi tùy chọn này được chỉ định.
Một trong những thư viện tiêu chuẩn bị bỏ qua bởi -nostdlib và -nodedefaultlibs is libgcc.a, Một
thư viện các chương trình con nội bộ mà GCC sử dụng để khắc phục những thiếu sót cụ thể
máy móc, hoặc nhu cầu đặc biệt đối với một số ngôn ngữ.
Trong hầu hết các trường hợp, bạn cần libgcc.a ngay cả khi bạn muốn tránh các thư viện tiêu chuẩn khác.
Nói cách khác, khi bạn chỉ định -nostdlib or -nodedefaultlibs bạn nên thường
chỉ định -lgcc cũng. Điều này đảm bảo rằng bạn không có tham chiếu nào chưa được giải quyết tới
các chương trình con của thư viện GCC nội bộ. (Ví dụ về chương trình con nội bộ như vậy là
__chủ chốt, được sử dụng để đảm bảo các hàm tạo C ++ được gọi.)
-Bàn Chân
Tạo ra một vị trí có thể thực thi độc lập trên các mục tiêu hỗ trợ nó. Để có thể đoán trước
kết quả, bạn cũng phải chỉ định cùng một tập hợp các tùy chọn được sử dụng để biên dịch (-fpie,
-fPIEhoặc mô hình phụ) khi bạn chỉ định tùy chọn trình liên kết này.
-rđộng
Chuyền cờ -xuất khẩu-động tới trình liên kết ELF, trên các mục tiêu hỗ trợ nó. Cái này
hướng dẫn trình liên kết thêm tất cả các ký hiệu, không chỉ những ký hiệu đã sử dụng, vào biểu tượng động
bàn. Tùy chọn này là cần thiết cho một số trường hợp sử dụng "dlopen" hoặc để cho phép lấy
tồn đọng từ bên trong một chương trình.
-s Xóa tất cả bảng ký hiệu và thông tin di dời khỏi tệp thực thi.
-mặt đứng
Trên các hệ thống hỗ trợ liên kết động, điều này ngăn cản việc liên kết với
các thư viện. Trên các hệ thống khác, tùy chọn này không có hiệu lực.
-chia sẻ
Tạo một đối tượng được chia sẻ sau đó có thể được liên kết với các đối tượng khác để tạo thành một
có thể thực thi. Không phải tất cả các hệ thống đều hỗ trợ tùy chọn này. Để có kết quả dự đoán, bạn phải
cũng chỉ định cùng một tập hợp các tùy chọn được sử dụng để biên dịch (-fpic, -fPIC, hoặc mô hình
phụ đề) khi bạn chỉ định tùy chọn trình liên kết này. [1]
-shared-libgcc
-static-libgcc
Trên các hệ thống cung cấp libgcc như một thư viện được chia sẻ, các tùy chọn này buộc sử dụng
tương ứng là phiên bản chia sẻ hoặc phiên bản tĩnh. Nếu không có phiên bản chia sẻ của libgcc là
được xây dựng khi trình biên dịch được định cấu hình, các tùy chọn này không có tác dụng.
Có một số tình huống trong đó ứng dụng nên sử dụng libgcc
thay vì phiên bản tĩnh. Phổ biến nhất trong số này là khi ứng dụng
mong muốn ném và bắt các ngoại lệ trên các thư viện dùng chung khác nhau. Trong trường hợp đó,
mỗi thư viện cũng như bản thân ứng dụng nên sử dụng libgcc.
Do đó, trình điều khiển G ++ và GCJ tự động thêm -shared-libgcc bất cứ khi nào bạn xây dựng
thư viện được chia sẻ hoặc tệp thực thi chính, vì các chương trình C ++ và Java thường sử dụng
ngoại lệ, vì vậy đây là điều đúng đắn cần làm.
Thay vào đó, nếu bạn sử dụng trình điều khiển GCC để tạo các thư viện được chia sẻ, bạn có thể thấy rằng chúng
không phải lúc nào cũng được liên kết với phần được chia sẻ libgcc. Nếu GCC tìm thấy, ở cấu hình của nó
thời gian mà bạn có trình liên kết không phải GNU hoặc trình liên kết GNU không hỗ trợ tùy chọn
--eh-khung-hdr, nó liên kết phiên bản được chia sẻ của libgcc vào thư viện được chia sẻ bởi
vỡ nợ. Nếu không, nó sẽ tận dụng trình liên kết và tối ưu hóa liên kết
với phiên bản được chia sẻ của libgcc, liên kết với phiên bản tĩnh của libgcc bằng
vỡ nợ. Điều này cho phép các trường hợp ngoại lệ phổ biến thông qua các thư viện được chia sẻ như vậy, mà không
phát sinh chi phí di dời vào thời gian tải thư viện.
Tuy nhiên, nếu một thư viện hoặc tệp thực thi chính được cho là ném hoặc bắt các ngoại lệ, bạn
phải liên kết nó bằng cách sử dụng trình điều khiển G ++ hoặc GCJ, nếu thích hợp cho các ngôn ngữ được sử dụng trong
chương trình hoặc sử dụng tùy chọn -shared-libgcc, sao cho nó được liên kết với
libgcc.
-static-libasan
Khi -fsanifying = địa chỉ tùy chọn được sử dụng để liên kết một chương trình, trình điều khiển GCC
tự động liên kết chống lại libasan. Nếu libasan có sẵn như một thư viện được chia sẻ và
các -mặt đứng tùy chọn không được sử dụng, khi đó liên kết này chống lại phiên bản được chia sẻ của libasan.
Sản phẩm -static-libasan tùy chọn hướng trình điều khiển GCC đến liên kết libasan tĩnh, không có
nhất thiết phải liên kết tĩnh các thư viện khác.
-static-libtsan
Khi -fsanized = chủ đề tùy chọn được sử dụng để liên kết một chương trình, trình điều khiển GCC
tự động liên kết chống lại libtsan. Nếu libtsan có sẵn như một thư viện được chia sẻ và
các -mặt đứng tùy chọn không được sử dụng, khi đó liên kết này chống lại phiên bản được chia sẻ của libtsan.
Sản phẩm -static-libtsan tùy chọn hướng trình điều khiển GCC đến liên kết libtsan tĩnh, không có
nhất thiết phải liên kết tĩnh các thư viện khác.
-static-libstdc ++
Khi g ++ chương trình được sử dụng để liên kết một chương trình C ++, nó thường tự động liên kết
chống lại libstdc ++. Nếu libstdc ++ có sẵn như một thư viện được chia sẻ và -mặt đứng
tùy chọn không được sử dụng, khi đó liên kết này chống lại phiên bản được chia sẻ của libstdc ++. Đó là
bình thường vẫn ổn. Tuy nhiên, đôi khi việc đóng băng phiên bản của libstdc ++
được chương trình sử dụng mà không đi đến một liên kết tĩnh hoàn toàn. Các
-static-libstdc ++ tùy chọn hướng dẫn g ++ trình điều khiển để liên kết libstdc ++ tĩnh, không có
nhất thiết phải liên kết tĩnh các thư viện khác.
-biểu tượng
Ràng buộc các tham chiếu đến các ký hiệu toàn cục khi xây dựng một đối tượng dùng chung. Cảnh báo về bất kỳ
tham chiếu chưa được giải quyết (trừ khi bị ghi đè bởi tùy chọn trình chỉnh sửa liên kết -Xlinker -z
-Xlinker phản đối). Chỉ một số hệ thống hỗ trợ tùy chọn này.
-T kịch bản
Sử dụng kịch bản dưới dạng tập lệnh trình liên kết. Tùy chọn này được hỗ trợ bởi hầu hết các hệ thống sử dụng
Trình liên kết GNU. Trên một số mục tiêu, chẳng hạn như mục tiêu trên bo mạch không có hệ điều hành,
các -T tùy chọn có thể được yêu cầu khi liên kết để tránh tham chiếu đến các ký hiệu không xác định.
-Xlinker tùy chọn
Qua tùy chọn như một tùy chọn cho trình liên kết. Bạn có thể sử dụng điều này để cung cấp cho hệ thống cụ thể
các tùy chọn trình liên kết mà GCC không nhận ra.
Nếu bạn muốn chuyển một tùy chọn có đối số riêng biệt, bạn phải sử dụng -Xlinker
hai lần, một lần cho tùy chọn và một lần cho đối số. Ví dụ, để vượt qua -massert
các định nghĩa, bạn phải viết -Xlinker -massert -Xlinker các định nghĩa. Nó không hoạt động
viết -Xlinker "-assert định nghĩa", bởi vì điều này chuyển toàn bộ chuỗi dưới dạng
đối số duy nhất, không phải là điều mà trình liên kết mong đợi.
Khi sử dụng trình liên kết GNU, việc chuyển các đối số đến trình liên kết thường thuận tiện hơn
các tùy chọn bằng cách sử dụng tùy chọn=giá trị cú pháp hơn là các đối số riêng biệt. Ví dụ, bạn
có thể chỉ định -Xlinker -Map = output.map chứ không phải là -Xlinker -Bản đồ -Xlinker đầu ra.map.
Các trình liên kết khác có thể không hỗ trợ cú pháp này cho các tùy chọn dòng lệnh.
- Tôi,tùy chọn
Qua tùy chọn như một tùy chọn cho trình liên kết. Nếu như tùy chọn chứa dấu phẩy, nó được chia thành
nhiều lựa chọn ở dấu phẩy. Bạn có thể sử dụng cú pháp này để chuyển một đối số cho
Lựa chọn. Ví dụ, -Wl, -Map, output.map vượt qua -Bản đồ đầu ra.map tới trình liên kết. Khi nào
bằng cách sử dụng trình liên kết GNU, bạn cũng có thể có được hiệu ứng tương tự với -Wl, -Map = output.map.
LƯU Ý: Trong Ubuntu 8.10 và các phiên bản mới hơn, đối với LDFLAGS, tùy chọn -Wl, -z, Relro Được sử dụng.
Để tắt, hãy sử dụng -Wl, -z, norelro.
-u biểu tượng
Giả biểu tượng biểu tượng là không xác định, để buộc liên kết các mô-đun thư viện để xác định
nó. Bạn có thể dùng -u nhiều lần với các ký hiệu khác nhau để buộc tải
bổ sung các mô-đun thư viện.
Các lựa chọn cho thư mục Tìm kiếm
Các tùy chọn này chỉ định các thư mục để tìm kiếm các tệp tiêu đề, cho các thư viện và các bộ phận
của trình biên dịch:
-Idir
Thêm thư mục dir vào đầu danh sách các thư mục được tìm kiếm cho tiêu đề
các tập tin. Điều này có thể được sử dụng để ghi đè tệp tiêu đề hệ thống, thay thế tệp của bạn
phiên bản, vì các thư mục này được tìm kiếm trước tệp tiêu đề hệ thống
các thư mục. Tuy nhiên, bạn không nên sử dụng tùy chọn này để thêm các thư mục chứa
tệp tiêu đề hệ thống do nhà cung cấp cung cấp (sử dụng -hệ thống cho rằng). Nếu bạn sử dụng nhiều hơn một
-I tùy chọn, các thư mục được quét theo thứ tự từ trái sang phải; hệ thống tiêu chuẩn
thư mục đến sau.
Nếu một hệ thống tiêu chuẩn bao gồm thư mục hoặc một thư mục được chỉ định với -hệ thống, Là
cũng được chỉ định với -I, Các -I tùy chọn bị bỏ qua. Thư mục vẫn được tìm kiếm nhưng
như một thư mục hệ thống ở vị trí bình thường của nó trong chuỗi bao gồm hệ thống. Cái này là để
đảm bảo rằng quy trình của GCC để sửa các tiêu đề hệ thống có lỗi và thứ tự cho
Chỉ thị "include_next" không vô tình bị thay đổi. Nếu bạn thực sự cần thay đổi
thứ tự tìm kiếm cho các thư mục hệ thống, sử dụng -nostdinc và / hoặc -hệ thống tùy chọn.
-iplugindir =dir
Đặt thư mục để tìm kiếm các plugin được chuyển qua -fplugin =tên thay vì
-fplugin =con đường/tên.vì thế. Tùy chọn này không được sử dụng bởi người dùng, mà chỉ
do người lái xe vượt qua.
-cài dẫndir
Thêm thư mục dir vào đầu danh sách các thư mục được tìm kiếm cho tiêu đề
các tập tin chỉ dành cho trường hợp của #include "hồ sơ"; họ không được tìm kiếm #include <hồ sơ>,
nếu không thì giống như -I.
-Ldir
Thêm thư mục dir vào danh sách các thư mục được tìm kiếm -l.
-Btiếp đầu ngữ
Tùy chọn này chỉ định nơi tìm tệp thực thi, thư viện, tệp bao gồm và
các tệp dữ liệu của chính trình biên dịch.
Chương trình điều khiển trình biên dịch chạy một hoặc nhiều chương trình con cpp, Cc1, as và ld.
Nó cố gắng tiếp đầu ngữ làm tiền tố cho mỗi chương trình mà nó cố gắng chạy, cả khi có và không có
máy/phiên bản/.
Đối với mỗi chương trình con được chạy, trình điều khiển trình biên dịch trước tiên sẽ thử -B tiền tố, nếu có.
Nếu tên đó không được tìm thấy, hoặc nếu -B không được chỉ định, trình điều khiển thử hai tiêu chuẩn
tiền tố, / usr / lib / gcc / và / usr / local / lib / gcc /. Nếu không có kết quả nào trong số đó dẫn đến
tên tệp được tìm thấy, tên chương trình chưa sửa đổi được tìm kiếm bằng cách sử dụng
thư mục được chỉ định trong của bạn PATH biến môi trường.
Trình biên dịch kiểm tra xem liệu đường dẫn được cung cấp bởi -B đề cập đến một thư mục và
nếu cần, nó sẽ thêm một ký tự phân tách thư mục ở cuối đường dẫn.
-B các tiền tố chỉ định hiệu quả tên thư mục cũng áp dụng cho các thư viện trong
trình liên kết, bởi vì trình biên dịch dịch các tùy chọn này thành -L tùy chọn cho trình liên kết.
Chúng cũng áp dụng để bao gồm các tệp trong bộ xử lý trước, vì trình biên dịch dịch
những tùy chọn này thành -hệ thống các tùy chọn cho bộ tiền xử lý. Trong trường hợp này, trình biên dịch
phụ họa bao gồm đến tiền tố.
Tệp hỗ trợ thời gian chạy libgcc.a cũng có thể được tìm kiếm bằng cách sử dụng -B tiền tố, nếu
cần thiết. Nếu nó không được tìm thấy ở đó, hai tiền tố tiêu chuẩn ở trên được thử và
là tất cả. Tệp sẽ nằm ngoài liên kết nếu nó không được tìm thấy bằng các phương tiện đó.
Một cách khác để chỉ định một tiền tố giống như -B tiền tố là sử dụng môi trường
biến GCC_EXEC_PREFIX.
Là một k bùn đặc biệt, nếu đường dẫn được cung cấp bởi -B is [dir /] stageN /, Nơi N là một con số
trong phạm vi từ 0 đến 9, sau đó nó được thay thế bằng [dir /] bao gồm. Điều này là để giúp khởi động-
đóng đai trình biên dịch.
-specs =hồ sơ
Quy trình xét duyệt hồ sơ sau khi trình biên dịch đọc theo tiêu chuẩn thông số kỹ thuật tệp, để ghi đè
các mặc định mà gcc chương trình trình điều khiển sử dụng khi xác định công tắc nào cần vượt qua
đến Cc1, cc1plus, as, ld, v.v. Nhiều hơn một -specs =hồ sơ có thể được chỉ định trên
dòng lệnh và chúng được xử lý theo thứ tự, từ trái sang phải.
--sysroot =dir
Sử dụng dir làm thư mục gốc hợp lý cho tiêu đề và thư viện. Ví dụ, nếu
trình biên dịch thường tìm kiếm các tiêu đề trong / usr / bao gồm và các thư viện ở / Usr / lib, Nó
thay vào đó tìm kiếm dir / usr / bao gồm và dir / usr / lib.
Nếu bạn sử dụng cả tùy chọn này và -isysroot tùy chọn, sau đó --sysroot tùy chọn
áp dụng cho các thư viện, nhưng -isysroot tùy chọn áp dụng cho các tệp tiêu đề.
Trình liên kết GNU (bắt đầu với phiên bản 2.16) có hỗ trợ cần thiết cho việc này
Lựa chọn. Nếu trình liên kết của bạn không hỗ trợ tùy chọn này, khía cạnh tệp tiêu đề của
--sysroot vẫn hoạt động, nhưng khía cạnh thư viện thì không.
hậu tố --no-sysroot-
Đối với một số mục tiêu, một hậu tố được thêm vào thư mục gốc được chỉ định với --sysroot,
tùy thuộc vào các tùy chọn khác được sử dụng, vì vậy, ví dụ như các tiêu đề có thể được tìm thấy trong
dir / hậu tố / usr / bao gồm thay vì dir / usr / bao gồm. Tùy chọn này vô hiệu hóa việc bổ sung
của một hậu tố như vậy.
-TÔI- Tùy chọn này đã không được chấp nhận. Hãy sử dụng -cài dẫn thay cho -I thư mục trước
các -TÔI- và loại bỏ -TÔI-. Bất kỳ thư mục nào bạn chỉ định với -I các tùy chọn trước
-TÔI- tùy chọn chỉ được tìm kiếm cho trường hợp #include "hồ sơ"; họ không được tìm kiếm
cho #include <hồ sơ>.
Nếu các thư mục bổ sung được chỉ định với -I các tùy chọn sau -TÔI-, các
thư mục được tìm kiếm cho tất cả #include các chỉ thị. (Thông thường tất cả các -I thư mục
được sử dụng theo cách này.)
Ngoài ra, -TÔI- tùy chọn hạn chế việc sử dụng thư mục hiện tại (trong đó
tệp đầu vào hiện tại đến từ) làm thư mục tìm kiếm đầu tiên cho #include "hồ sơ".
Không có cách nào để ghi đè hiệu ứng này của -TÔI-. Với -TÔI. bạn có thể chỉ định tìm kiếm
thư mục hiện tại khi trình biên dịch được gọi. Đó không chính xác là
giống như những gì bộ tiền xử lý làm theo mặc định, nhưng nó thường đạt yêu cầu.
-TÔI- không ngăn cản việc sử dụng các thư mục hệ thống tiêu chuẩn cho các tệp tiêu đề.
Do đó, -TÔI- và -nostdinc độc lập.
Chỉ định Mục tiêu và Trình biên dịch phiên bản
Cách thông thường để chạy GCC là chạy tệp thực thi được gọi là gcc, hoặc là máy-gcc khi chéo-
biên dịch, hoặc máy-gcc-phiên bản để chạy một phiên bản khác với phiên bản đã được cài đặt
Cuối cùng.
phần cứng mô hình và cấu hình
Mỗi loại máy mục tiêu có thể có các tùy chọn đặc biệt của riêng nó, bắt đầu bằng -m, chọn
trong số các mô hình hoặc cấu hình phần cứng khác nhau --- ví dụ: 68010 so với 68020, nổi
bộ đồng xử lý hoặc không có. Một phiên bản cài đặt duy nhất của trình biên dịch có thể biên dịch cho bất kỳ mô hình nào
hoặc cấu hình, theo các tùy chọn được chỉ định.
Một số cấu hình của trình biên dịch cũng hỗ trợ các tùy chọn đặc biệt bổ sung, thường dành cho
khả năng tương thích với các trình biên dịch khác trên cùng một nền tảng.
AAArch64 Các lựa chọn
Các tùy chọn này được xác định cho việc triển khai AArch64:
-mbig-endian
Tạo mã big-endian. Đây là mặc định khi GCC được định cấu hình cho
aarch64_be - * - * Mục tiêu.
-mGeneral-regs-chỉ
Tạo mã chỉ sử dụng các thanh ghi chung.
-mlittle-endian
Tạo mã endian nhỏ. Đây là mặc định khi GCC được định cấu hình cho
aarch64 - * - * nhưng không phải là một aarch64_be - * - * Mục tiêu.
-mcmodel = nhỏ
Tạo mã cho mô hình mã nhỏ. Chương trình và các ký hiệu được định nghĩa tĩnh của nó
phải trong phạm vi 1GB của nhau. Con trỏ là 64 bit. Các chương trình có thể là tĩnh
hoặc liên kết động. Mô hình này không được triển khai đầy đủ và hầu hết được coi là
nhỏ.
-mcmodel = nhỏ
Tạo mã cho mô hình mã nhỏ. Chương trình và nó được định nghĩa tĩnh
các ký hiệu phải cách nhau 4GB. Con trỏ là 64 bit. Các chương trình có thể được
liên kết tĩnh hoặc động. Đây là mô hình mã mặc định.
-mcmodel = lớn
Tạo mã cho mô hình mã lớn. Điều này không tạo ra giả định về địa chỉ và
kích thước của các phần. Con trỏ là 64 bit. Các chương trình chỉ có thể được liên kết tĩnh.
-mstrict-căn chỉnh
Đừng cho rằng các tham chiếu bộ nhớ không được đánh dấu sẽ được hệ thống xử lý.
-momit-lá-khung-con trỏ
-mno-omit-leaf-frame-con trỏ
Bỏ qua hoặc giữ con trỏ khung trong các hàm lá. Hành vi trước đây là
mặc định.
-mtls-dialect = desc
Sử dụng bộ mô tả TLS làm cơ chế lưu trữ cục bộ luồng cho các truy cập động của TLS
biến. Đây là mặc định.
-mtls-dialect = truyền thống
Sử dụng TLS truyền thống làm cơ chế lưu trữ cục bộ luồng cho các truy cập động của TLS
biến.
-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
Bật hoặc tắt giải pháp thay thế cho lỗi ARM Cortex-A53 số 835769. Điều này
sẽ liên quan đến việc chèn một lệnh NOP giữa các lệnh bộ nhớ và 64-bit
hướng dẫn nhân-tích lũy số nguyên.
-march =tên
Chỉ định tên của kiến trúc đích, tùy chọn được thêm vào bởi một hoặc nhiều
bổ ngữ tính năng. Tùy chọn này có dạng -march =arch{+[Không]tính năng} *, nơi
giá trị duy nhất cho arch is armv8-a. Các giá trị có thể có cho tính năng được ghi lại trong
phần phụ bên dưới.
Khi các công cụ sửa đổi tính năng xung đột được chỉ định, tính năng bên phải nhất sẽ được sử dụng.
GCC sử dụng tên này để xác định loại hướng dẫn mà nó có thể phát ra khi tạo
mã lắp ráp. Tùy chọn này có thể được sử dụng cùng với hoặc thay vì -mcpu =
tùy chọn.
-mcpu =tên
Chỉ định tên của bộ xử lý đích, được thêm vào theo tùy chọn của một hoặc nhiều tính năng
bổ ngữ. Tùy chọn này có dạng -mcpu =cpu{+[Không]tính năng} *, nếu có thể
giá trị cho cpu đang chủng loại, lớn. Các giá trị có thể có cho tính năng được ghi lại trong
phần phụ bên dưới.
Khi các công cụ sửa đổi tính năng xung đột được chỉ định, tính năng bên phải nhất sẽ được sử dụng.
GCC sử dụng tên này để xác định loại hướng dẫn mà nó có thể phát ra khi tạo
mã lắp ráp.
-mtune =tên
Chỉ định tên của bộ xử lý để điều chỉnh hiệu suất. Mã sẽ được điều chỉnh
như thể bộ xử lý đích thuộc loại được chỉ định trong tùy chọn này, nhưng vẫn sử dụng
hướng dẫn tương thích với bộ xử lý đích được chỉ định bởi -mcpu = Lựa chọn. Điều này
tùy chọn không thể được thêm vào bằng các bổ ngữ tính năng.
-tháng Ba và -mcpu bổ ngữ tính năng
Các công cụ sửa đổi tính năng được sử dụng với -tháng Ba và -mcpu có thể là một trong những điều sau đây:
CRC Bật tiện ích mở rộng CRC.
Crypto
Bật tiện ích mở rộng Crypto. Điều này có nghĩa là SIMD nâng cao đã được bật.
fp Bật hướng dẫn dấu phẩy động.
sim
Bật hướng dẫn SIMD nâng cao. Điều này ngụ ý rằng các hướng dẫn dấu phẩy động là
đã được kích hoạt. Đây là giá trị mặc định cho tất cả các giá trị hiện tại có thể có cho các tùy chọn -tháng Ba và
-mcpu =.
Adapteva Epiphany Các lựa chọn
Kia là -m các tùy chọn được xác định cho Adapteva Epiphany:
-mhalf-reg-tệp
Không cấp phát bất kỳ thanh ghi nào trong phạm vi "r32" ... "r63". Điều đó cho phép mã chạy trên
các biến thể phần cứng thiếu các thanh ghi này.
-mprefer-ngắn-insn-regs
Các thanh ghi cấp phát theo cấp số nhân cho phép tạo lệnh ngắn. Cái này có thể
dẫn đến tăng số lượng hướng dẫn, vì vậy điều này có thể làm giảm hoặc tăng tổng thể
kích thước mã.
-mbranch-chi phí =num
Đặt chi phí của các chi nhánh thành khoảng num hướng dẫn "đơn giản". Chi phí này chỉ là một
heuristic và không được đảm bảo để tạo ra kết quả nhất quán giữa các bản phát hành.
-mcmove
Cho phép tạo các bước di chuyển có điều kiện.
-mnops =num
Xông lên num NOP trước mọi lệnh được tạo khác.
-mno-soft-cmpsf
Để so sánh dấu phẩy động chính xác đơn, hãy phát ra lệnh và kiểm tra "fsub"
cờ. Điều này nhanh hơn so với phần mềm so sánh, nhưng có thể nhận được kết quả không chính xác
với sự có mặt của NaN hoặc khi hai số nhỏ khác nhau được so sánh sao cho
sự khác biệt của chúng được tính bằng không. Mặc định là -msoft-cmpsf, Trong đó sử dụng
so sánh phần mềm chậm hơn, nhưng tuân thủ IEEE.
-mstack-offset =num
Đặt độ lệch giữa đỉnh ngăn xếp và con trỏ ngăn xếp. Ví dụ: giá trị 8
có nghĩa là tám byte trong phạm vi "sp + 0 ... sp + 7" có thể được sử dụng bởi các hàm lá
mà không cần phân bổ ngăn xếp. Các giá trị khác ngoài 8 or 16 chưa được kiểm tra và không có khả năng
công việc. Cũng lưu ý rằng tùy chọn này thay đổi ABI; biên dịch một chương trình với
bù đắp ngăn xếp khác với các thư viện đã được biên dịch thường không
công việc. Tùy chọn này có thể hữu ích nếu bạn muốn đánh giá xem có chênh lệch ngăn xếp khác không
sẽ cung cấp cho bạn mã tốt hơn, nhưng thực sự sử dụng một độ lệch ngăn xếp khác để xây dựng
chương trình làm việc, bạn nên định cấu hình chuỗi công cụ với
--with-stack-offset =num tùy chọn.
-mno-round-gần nhất
Làm cho bộ lập lịch giả định rằng chế độ làm tròn đã được đặt thành cắt bớt. Các
mặc định là -mround-gần nhất.
-các cuộc gọi dài
Nếu không được chỉ định khác bởi một thuộc tính, giả sử rằng tất cả các lệnh gọi có thể nằm ngoài
phạm vi bù đắp của các lệnh "b" / "bl" và do đó tải địa chỉ hàm
vào một thanh ghi trước khi thực hiện một cuộc gọi (nếu không thì trực tiếp). Đây là mặc định.
-cuộc gọi ngắn hạn
Nếu thuộc tính không được chỉ định khác, hãy giả sử tất cả các cuộc gọi trực tiếp đều nằm trong phạm vi
của hướng dẫn "b" / "bl", vì vậy hãy sử dụng các hướng dẫn này cho các cuộc gọi trực tiếp. Các
mặc định là -các cuộc gọi dài.
-msmall16
Giả sử địa chỉ có thể được tải dưới dạng giá trị 16-bit không dấu. Điều này không áp dụng cho
địa chỉ chức năng cho -các cuộc gọi dài ngữ nghĩa có hiệu lực.
-mfp-mode =chế độ
Đặt chế độ phổ biến của đơn vị dấu phẩy động. Điều này xác định sự nổi-
chế độ điểm được cung cấp và dự kiến tại thời gian gọi và trả về chức năng. Chế tạo
chế độ này phù hợp với chế độ bạn chủ yếu cần khi bắt đầu chức năng có thể làm cho
các chương trình nhỏ hơn và nhanh hơn bằng cách tránh chuyển đổi chế độ không cần thiết.
chế độ có thể được đặt thành một trong các giá trị sau:
người gọi
Bất kỳ chế độ nào tại mục nhập chức năng đều hợp lệ và được giữ lại hoặc khôi phục khi chức năng
trả về và khi nó gọi các hàm khác. Chế độ này rất hữu ích cho việc biên dịch
thư viện hoặc các đơn vị biên dịch khác mà bạn có thể muốn kết hợp vào các
các chương trình với các chế độ FPU phổ biến khác nhau và sự tiện lợi khi có thể
sử dụng một tệp đối tượng duy nhất vượt trội về kích thước và tốc độ chi phí cho bất kỳ chế độ bổ sung nào
chuyển đổi có thể cần thiết, so với những gì sẽ cần thiết với
lựa chọn cụ thể của chế độ FPU phổ biến.
cắt bớt
Đây là chế độ được sử dụng để tính toán dấu phẩy động với việc cắt ngắn (nghĩa là làm tròn
về không) chế độ làm tròn. Điều đó bao gồm chuyển đổi từ dấu phẩy động thành
số nguyên.
vòng gần nhất
Đây là chế độ được sử dụng để tính toán dấu phẩy động với làm tròn đến gần nhất - hoặc
chế độ làm tròn chẵn.
int Đây là chế độ được sử dụng để thực hiện các phép tính số nguyên trong FPU, ví dụ: số nguyên
nhân, hoặc số nguyên nhân và tích lũy.
Mặc định là -mfp-mode = người gọi
-mnosplit-lohi
-mno-postinc
-mno-postmodify
Các tinh chỉnh tạo mã lần lượt vô hiệu hóa việc phân chia tải 32-bit,
tạo địa chỉ sau gia tăng và tạo địa chỉ sau sửa đổi. Các
mặc định là msplit-lohi, -mpost-incvà -mpost-sửa đổi.
-mnovect-gấp đôi
Thay đổi chế độ SIMD ưa thích thành SImode. Mặc định là -mvect-gấp đôi, Trong đó sử dụng
DImode làm chế độ SIMD ưu tiên.
-max-vect-align =num
Căn chỉnh tối đa cho các loại chế độ vectơ SIMD. num có thể là 4 hoặc 8. Giá trị mặc định là
8. Lưu ý rằng đây là một thay đổi ABI, mặc dù nhiều giao diện chức năng thư viện
không bị ảnh hưởng nếu họ không sử dụng chế độ vectơ SIMD ở những nơi ảnh hưởng đến kích thước và / hoặc
sự liên kết của các loại có liên quan.
-msplit-vecmove-sớm
Vectơ tách di chuyển thành các di chuyển từ đơn lẻ trước khi tải lại. Về lý thuyết, điều này có thể cho
cấp phát thanh ghi tốt hơn, nhưng cho đến nay điều ngược lại dường như thường xảy ra.
-m1reg-reg
Chỉ định một thanh ghi để giữ hằng số -1, điều này làm cho việc tải nhỏ trở nên âm
hằng số và một số mặt nạ bit nhanh hơn. Giá trị cho phép đối với reg đang r43 và r63,
trong đó chỉ định việc sử dụng thanh ghi đó như một thanh ghi cố định, và không ai, có nghĩa là không
đăng ký được sử dụng cho mục đích này. Mặc định là -m1reg-không có.
ARM Các lựa chọn
Kia là -m các tùy chọn được xác định cho kiến trúc Máy RISC Nâng cao (ARM):
-mabi =tên
Tạo mã cho ABI được chỉ định. Giá trị cho phép là: apc-gnu, tại cái, aapc,
aapc-linux và ôimmxt.
-mapcs-khung
Tạo khung ngăn xếp tuân thủ Tiêu chuẩn cuộc gọi thủ tục ARM cho tất cả
, ngay cả khi điều này không hoàn toàn cần thiết để thực thi đúng mã.
Chỉ định -fomit-frame-con trỏ với tùy chọn này làm cho các khung ngăn xếp không
được tạo ra cho các chức năng của lá. Mặc định là -mno-apc-frame.
-bản đồ
Đây là một từ đồng nghĩa với -mapcs-khung.
-mthumb-interwork
Tạo mã hỗ trợ gọi giữa tập lệnh ARM và Thumb.
Nếu không có tùy chọn này, trên các kiến trúc trước v5, hai tập lệnh không thể
đáng tin cậy được sử dụng trong một chương trình. Mặc định là -mno-ngón tay cái-tương tác, vì hơi
mã lớn hơn được tạo khi -mthumb-interwork được quy định. Trong cấu hình AAPCS
tùy chọn này là vô nghĩa.
-mno-Schedule-prolog
Ngăn chặn việc sắp xếp lại thứ tự các hướng dẫn trong phần mở đầu hàm hoặc việc hợp nhất
các chỉ dẫn đó với các hướng dẫn trong phần thân của hàm. Điều này có nghĩa là tất cả
các chức năng bắt đầu với một tập hợp các hướng dẫn dễ nhận biết (hoặc trên thực tế là một trong các lựa chọn
từ một tập hợp nhỏ các câu mở đầu chức năng khác nhau) và thông tin này có thể được sử dụng để
xác định vị trí bắt đầu của các chức năng bên trong một đoạn mã thực thi. Mặc định là
-msched-prolog.
-mfloat-abi =tên
Chỉ định ABI dấu phẩy động sẽ sử dụng. Giá trị cho phép là: mềm mại, mềmfp và
cứng.
Chỉ định mềm mại khiến GCC tạo đầu ra có chứa các lệnh gọi thư viện cho
các phép toán điểm. mềmfp cho phép tạo mã bằng cách sử dụng dấu phẩy động phần cứng
nhưng vẫn sử dụng các quy ước gọi soft-float. cứng cho phép
tạo các hướng dẫn dấu phẩy động và sử dụng các quy ước gọi cụ thể của FPU.
Giá trị mặc định phụ thuộc vào cấu hình mục tiêu cụ thể. Lưu ý rằng hard-float
và các ABI mềm không tương thích với liên kết; bạn phải biên dịch toàn bộ chương trình của mình với
ABI giống nhau và liên kết với một bộ thư viện tương thích.
-mlittle-endian
Tạo mã cho một bộ xử lý chạy ở chế độ little-endian. Đây là mặc định cho
tất cả các cấu hình tiêu chuẩn.
-mbig-endian
Tạo mã cho bộ xử lý chạy ở chế độ big-endian; mặc định là biên dịch
mã cho một bộ xử lý nhỏ.
-mwords-Little-endian
Tùy chọn này chỉ áp dụng khi tạo mã cho bộ xử lý big-end. Phát ra
mã cho một thứ tự từ ít endian nhưng một thứ tự byte lớn. Đó là, một byte
thứ tự của biểu mẫu 32107654. Lưu ý: chỉ nên sử dụng tùy chọn này nếu bạn yêu cầu
khả năng tương thích với mã cho bộ xử lý ARM big-endian được tạo bởi các phiên bản của
trình biên dịch trước 2.8. Tùy chọn này hiện không được dùng nữa.
-march =tên
Điều này chỉ định tên của kiến trúc ARM đích. GCC sử dụng tên này để
xác định loại lệnh mà nó có thể phát ra khi tạo mã lắp ráp. Cái này
tùy chọn có thể được sử dụng cùng với hoặc thay vì -mcpu = Lựa chọn. Được phép
tên là: cánh tayv2, tayv2a, cánh tayv3, cánh tayv3m, cánh tayv4, cánh tayv4t, cánh tayv5, cánh tayv5t, cánh tayv5e,
armv5te, cánh tayv6, tayv6j, cánh tayv6t2, armv6z, armv6zk, armv6-m, cánh tayv7, armv7-a, armv7-r,
armv7-m, armv7e-m armv8-a, armv8-a + crc, ôimmxt, iwmmxt2, ep9312.
-march = armv8-a + crc cho phép tạo mã cho kiến trúc ARMv8-A cùng với
các phần mở rộng CRC32 tùy chọn.
-march = gốc khiến trình biên dịch tự động phát hiện kiến trúc của bản dựng
máy vi tính. Hiện tại, tính năng này chỉ được hỗ trợ trên GNU / Linux và không phải tất cả
kiến trúc được công nhận. Nếu tự động phát hiện không thành công, tùy chọn không có
hiệu ứng.
-mtune =tên
Tùy chọn này chỉ định tên của bộ xử lý ARM mục tiêu mà GCC sẽ điều chỉnh
hiệu suất của mã. Đối với một số triển khai ARM, hiệu suất tốt hơn có thể được
có được bằng cách sử dụng tùy chọn này. Các tên được phép là: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, cánh tay7m, cánh tay7d, cánh tay7dm, cánh tay7di, cánh tay7dmi, arm70,
arm700, cánh tay700i, arm710, cánh tay710c, arm7100, arm720, arm7500, cánh tay7500fe, cánh tay7tdmi,
arm7tdmi-s, cánh tay710t, cánh tay720t, cánh tay740t, mạnh mẽ, mạnh tay110, mạnh tay1100,
mạnh tay1110, arm8, arm810, arm9, cánh tay9e, arm920, cánh tay920t, cánh tay922t, cánh tay946e-s,
cánh tay966e-s, cánh tay968e-s, arm926ej-s, cánh tay940t, cánh tay9tdmi, cánh tay10tdmi, cánh tay1020t, arm1026ej-s,
cánh tay10e, cánh tay1020e, cánh tay1022e, cánh tay1136j-s, cánh tay1136jf-s, mpcore, mpcorenovfp, cánh tay1156t2-s,
cánh tay1156t2f-s, arm1176jz-s, arm1176jzf-s, vỏ não-a5, vỏ não-a7, vỏ não-a8, vỏ não-a9,
vỏ não-a15, vỏ não-a53, vỏ-r4, vỏ-r4f, vỏ-r5, vỏ-r7, vỏ não-m4,
vỏ não-m3, vỏ não-m1, vỏ não-m0, vỏ-m0plus, Marvell-pj4, xscale, ôimmxt, iwmmxt2,
ep9312, fa526, fa626, fa606te, fa626te, fmp626, fa726te.
-mtune = chung chung-arch chỉ định rằng GCC nên điều chỉnh hiệu suất để có sự kết hợp của
bộ xử lý trong kiến trúc arch. Mục đích là tạo mã chạy tốt trên
các bộ xử lý phổ biến nhất hiện tại, cân bằng giữa các tối ưu hóa có lợi cho một số
CPU trong phạm vi và tránh các cạm bẫy về hiệu suất của các CPU khác. Ảnh hưởng của
tùy chọn này có thể thay đổi trong các phiên bản GCC trong tương lai khi các kiểu CPU xuất hiện và biến mất.
-mtune = bản địa khiến trình biên dịch tự động phát hiện CPU của máy tính xây dựng. Tại
hiện tại, tính năng này chỉ được hỗ trợ trên GNU / Linux và không phải tất cả các kiến trúc đều
được công nhận. Nếu tự động phát hiện không thành công, tùy chọn này không có tác dụng.
-mcpu =tên
Điều này chỉ định tên của bộ xử lý ARM đích. GCC sử dụng tên này để lấy
tên của kiến trúc ARM mục tiêu (như được chỉ định bởi -tháng Ba) và bộ xử lý ARM
gõ để điều chỉnh cho hiệu suất (như được chỉ định bởi -âm điệu). Tùy chọn này ở đâu
được sử dụng cùng với -tháng Ba or -âm điệu, những tùy chọn đó được ưu tiên hơn
một phần thích hợp của tùy chọn này.
Tên được phép cho tùy chọn này giống với tên cho -âm điệu.
-mcpu = chung chung-arch cũng được phép và tương đương với -march =arch
-mtune = chung chung-arch. Thấy -âm điệu để biết thêm thông tin chi tiết.
-mcpu = bản địa khiến trình biên dịch tự động phát hiện CPU của máy tính xây dựng. Tại
hiện tại, tính năng này chỉ được hỗ trợ trên GNU / Linux và không phải tất cả các kiến trúc đều
được công nhận. Nếu tự động phát hiện không thành công, tùy chọn này không có tác dụng.
-mfpu =tên
Điều này chỉ định phần cứng dấu phẩy động (hoặc mô phỏng phần cứng) nào khả dụng trên
mục tiêu. Các tên được phép là: 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-armv8và tiền điện tử-neon-fp-armv8.
If -msoft-phao được chỉ định, điều này chỉ định định dạng của các giá trị dấu phẩy động.
Nếu phần cứng dấu phẩy động đã chọn bao gồm phần mở rộng NEON (ví dụ: -mfpu=neon),
lưu ý rằng các phép toán dấu phẩy động không được tạo bởi thẻ vectơ hóa tự động của GCC
trừ khi -funsafe-math-Optimizations cũng được chỉ định. Điều này là do phần cứng NEON
không thực hiện đầy đủ tiêu chuẩn IEEE 754 cho số học dấu phẩy động (trong
các giá trị bất thường cụ thể được coi là XNUMX), vì vậy việc sử dụng hướng dẫn NEON có thể
dẫn đến mất độ chính xác.
-mfp16-format =tên
Chỉ định định dạng của loại dấu phẩy động nửa chính xác "__fp16". Được phép
tên là không ai, ieeevà thay thế; mặc định là không ai, trong trường hợp đó, "__fp16"
loại không được xác định.
-m cấu trúc-kích thước-ranh giới =n
Kích thước của tất cả các cấu trúc và liên hiệp được làm tròn đến bội số của
các bit được thiết lập bởi tùy chọn này. Giá trị cho phép là 8, 32 và 64. Giá trị mặc định
khác nhau đối với các loại công cụ khác nhau. Đối với chuỗi công cụ được nhắm mục tiêu COFF, giá trị mặc định là
8. Giá trị 64 chỉ được phép nếu ABI bên dưới hỗ trợ giá trị đó.
Việc chỉ định một số lớn hơn có thể tạo ra mã nhanh hơn, hiệu quả hơn, nhưng cũng có thể
tăng kích thước của chương trình. Các giá trị khác nhau có khả năng không tương thích.
Mã được biên dịch với một giá trị không nhất thiết phải hoạt động với mã hoặc thư viện
được biên dịch với một giá trị khác, nếu chúng trao đổi thông tin bằng cách sử dụng cấu trúc hoặc liên hiệp.
-mabort-on-noreturn
Tạo lệnh gọi hàm "abort" ở cuối hàm "noreturn". Nó là
được thực thi nếu hàm cố gắng trả về.
-các cuộc gọi dài
-các cuộc gọi không dài
Yêu cầu trình biên dịch thực hiện các lệnh gọi hàm bằng cách tải địa chỉ của
hàm thành một thanh ghi và sau đó thực hiện một lệnh gọi chương trình con trên thanh ghi này. Cái này
cần chuyển đổi nếu chức năng đích nằm ngoài địa chỉ 64 megabyte
phạm vi của phiên bản lệnh gọi chương trình con dựa trên bù đắp.
Ngay cả khi công tắc này được bật, không phải tất cả các cuộc gọi chức năng đều được chuyển thành các cuộc gọi dài.
Heuristic là các hàm tĩnh, các hàm có Cuộc gọi ngắn thuộc tính,
các chức năng nằm trong phạm vi của một #pragma no_long_calls chỉ thị, và
các hàm có định nghĩa đã được biên dịch trong bản biên dịch hiện tại
đơn vị không được chuyển thành các cuộc gọi dài. Các ngoại lệ đối với quy tắc này là yếu
định nghĩa chức năng, chức năng với cuộc gọi dài thuộc tính hoặc phần thuộc tính,
và các chức năng nằm trong phạm vi của một #pragma cuộc gọi dài chỉ thị luôn luôn
biến thành những cuộc gọi dài.
Tính năng này không được bật theo mặc định. Xác định -các cuộc gọi không dài khôi phục lại
hành vi mặc định, cũng như việc đặt các lệnh gọi hàm trong phạm vi của một #pragma
long_calls_off chỉ thị. Lưu ý rằng các công tắc này không ảnh hưởng đến cách trình biên dịch
tạo mã để xử lý các lệnh gọi hàm thông qua con trỏ hàm.
-msingle-pic-base
Coi thanh ghi được sử dụng để định địa chỉ PIC là chỉ đọc, thay vì tải nó vào
phần mở đầu cho mỗi chức năng. Hệ thống thời gian chạy chịu trách nhiệm khởi tạo
đăng ký với một giá trị thích hợp trước khi bắt đầu thực thi.
-mpic-register =reg
Chỉ định thanh ghi được sử dụng để định địa chỉ PIC. Đối với trường hợp cơ sở PIC tiêu chuẩn,
mặc định sẽ là bất kỳ thanh ghi phù hợp nào được xác định bởi trình biên dịch. Đối với cơ sở PIC đơn
trường hợp, mặc định là R9 nếu mục tiêu dựa trên EABI hoặc kiểm tra ngăn xếp được bật,
nếu không thì mặc định là R10.
-mpoke-tên-hàm
Viết tên của từng chức năng vào phần văn bản, ngay trước chức năng
phần mở đầu. Mã được tạo tương tự như sau:
t0
.ascii "arm_poke_ Chức năng_name", 0
.căn chỉnh
t1
.từ 0xff000000 + (t1 - t0)
arm_poke_ functions_name
di chuyển ip, sp
stmfd sp !, {fp, ip, lr, pc}
sub fp, ip, # 4
Khi thực hiện backtrace ngăn xếp, mã có thể kiểm tra giá trị của "pc" được lưu trữ tại "fp +
0 ". Nếu hàm theo dõi thì xem vị trí" pc - 12 "và 8 bit trên cùng là
đặt, sau đó chúng tôi biết rằng có một tên hàm được nhúng ngay trước
vị trí và có độ dài "((pc [-3]) & 0xff000000)".
-mngón tay cái
-marm
Chọn giữa việc tạo mã thực thi ở trạng thái ARM và Ngón tay cái. Mặc định cho
hầu hết các cấu hình là tạo mã thực thi ở trạng thái ARM, nhưng mặc định
có thể được thay đổi bằng cách định cấu hình GCC với --with-mode =nhà nước tùy chọn cấu hình.
-mtpc-frame
Tạo khung ngăn xếp tuân thủ Tiêu chuẩn cuộc gọi thủ tục ngón tay cái cho
tất cả các chức năng không phải lá. (Một chức năng lá là một chức năng không gọi bất kỳ chức năng nào khác
các chức năng.) Mặc định là -mno-tpcs-khung.
-mtpcs-lá-khung
Tạo khung ngăn xếp tuân thủ Tiêu chuẩn cuộc gọi thủ tục ngón tay cái cho
tất cả các chức năng của lá. (Hàm lá là một hàm không gọi bất kỳ hàm nào khác.)
Mặc định là -mno-apcs-lá-khung.
-mcallee-siêu liên kết
Cung cấp cho tất cả các chức năng có thể nhìn thấy bên ngoài trong tệp đang được biên dịch một lệnh ARM
đặt tiêu đề chuyển sang chế độ Ngón tay cái trước khi thực hiện phần còn lại của chức năng.
Điều này cho phép các hàm này được gọi từ mã không liên kết với nhau. Tùy chọn này là
không hợp lệ trong cấu hình AAPCS vì hoạt động liên kết được bật theo mặc định.
-mcaller-siêu liên kết
Cho phép các cuộc gọi thông qua con trỏ hàm (bao gồm cả các hàm ảo) thực thi chính xác
bất kể mã đích đã được biên dịch để làm việc với nhau hay chưa.
Sẽ có một khoản phí nhỏ trong chi phí thực thi con trỏ hàm nếu tùy chọn này
được kích hoạt. Tùy chọn này không hợp lệ trong cấu hình AAPCS vì hoạt động liên
được bật theo mặc định.
-mtp =tên
Chỉ định mô hình truy cập cho con trỏ lưu trữ cục bộ luồng. Các mô hình hợp lệ là
mềm mại, tạo lệnh gọi tới "__aeabi_read_tp", cp15, tìm nạp chuỗi
trực tiếp con trỏ từ "cp15" (được hỗ trợ trong kiến trúc arm6k) và tự động, Mà
sử dụng phương pháp tốt nhất hiện có cho bộ xử lý đã chọn. Cài đặt mặc định là
tự động.
-mtls-phương ngữ =phương ngữ
Chỉ định phương ngữ để sử dụng để truy cập bộ nhớ cục bộ của chuỗi. Hai phương ngữs là
được hỗ trợ ---dê rừng và gnu2. Các dê rừng phương ngữ chọn lược đồ GNU ban đầu cho
hỗ trợ các mô hình TLS động cục bộ và toàn cầu. Các gnu2 phương ngữ chọn GNU
lược đồ mô tả, cung cấp hiệu suất tốt hơn cho các thư viện được chia sẻ. GNU
lược đồ mô tả tương thích với lược đồ ban đầu, nhưng không yêu cầu
trình hợp dịch, trình liên kết và hỗ trợ thư viện. Các mô hình TLS thực thi ban đầu và cục bộ là
không bị ảnh hưởng bởi tùy chọn này và luôn sử dụng lược đồ ban đầu.
-mword-thay đổi vị trí
Chỉ tạo vị trí tuyệt đối trên các giá trị có kích thước từ (tức là R_ARM_ABS32). Đây là
được bật theo mặc định trên các mục tiêu (uClinux, SymbianOS) nơi trình tải thời gian chạy áp dụng
hạn chế này và khi nào -fpic or -fPIC được quy định.
-mfix-vỏ não-m3-ldrd
Một số lõi Cortex-M3 có thể gây ra lỗi dữ liệu khi hướng dẫn "ldrd" với
thanh ghi đích và cơ sở chồng chéo được sử dụng. Tùy chọn này tránh tạo ra
các hướng dẫn này. Tùy chọn này được bật theo mặc định khi -mcpu = cortex-m3 is
được chỉ định.
-truy cập munaligned
-mno-unaligned-truy cập
Cho phép (hoặc tắt) đọc và ghi các giá trị 16 và 32 bit từ các địa chỉ
không được căn chỉnh 16 hoặc 32 bit. Theo mặc định, quyền truy cập không được chỉ định bị vô hiệu hóa cho tất cả
pre-ARMv6 và tất cả các kiến trúc ARMv6-M và được kích hoạt cho tất cả các kiến trúc khác. Nếu như
quyền truy cập không được đánh dấu không được kích hoạt thì các từ trong cấu trúc dữ liệu được đóng gói sẽ được truy cập
một byte tại một thời điểm.
Thuộc tính ARM "Tag_CPU_unaligned_access" sẽ được đặt trong tệp đối tượng được tạo
thành đúng hoặc sai, tùy thuộc vào cài đặt của tùy chọn này. Nếu không có dấu
quyền truy cập được bật thì biểu tượng bộ xử lý trước "__ARM_FEATURE_UNALIGNED" cũng sẽ
xác định.
-mneon-cho-64bits
Cho phép sử dụng Neon để xử lý các hoạt động 64-bit vô hướng. Điều này bị tắt theo mặc định
vì chi phí di chuyển dữ liệu từ thanh ghi lõi sang Neon là cao.
-mrestrict-nó
Hạn chế tạo khối CNTT để tuân theo các quy tắc của ARMv8. Khối CNTT có thể
chỉ chứa một lệnh 16 bit duy nhất từ một tập hợp các lệnh được chọn. Cái này
tùy chọn được bật theo mặc định cho chế độ Ngón tay cái của ARMv8.
AVR Các lựa chọn
Các tùy chọn này được xác định cho việc triển khai AVR:
-mmcu =mcu
Chỉ định kiến trúc tập lệnh Atmel AVR (ISA) hoặc loại MCU.
Giá trị mặc định cho tùy chọn này là @ tie {} "avr2".
GCC hỗ trợ các thiết bị AVR và ISA sau:
"avr2"
Thiết bị "cổ điển" có bộ nhớ chương trình lên đến 8 @ tie {} KiB. mcu@tie {} = "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".
"avr25"
Thiết bị "cổ điển" có bộ nhớ chương trình lên đến 8 @ tie {} KiB và có "MOVW"
chỉ dẫn. 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"
Thiết bị "cổ điển" có bộ nhớ chương trình 16 @ tie {} KiB lên đến 64 @ tie {} KiB.
mcu@tie {} = "at43usb355", "at76c711".
"avr31"
Thiết bị "cổ điển" có 128 @ tie {} KiB bộ nhớ chương trình. mcu@tie {} = "atmega103",
"at43usb320".
"avr35"
Thiết bị "cổ điển" có bộ nhớ chương trình 16 @ tie {} KiB lên đến 64 @ tie {} KiB và với
lệnh "MOVW". mcu@tie {} = "ata5505", "atmega16u2", "atmega32u2",
"atmega8u2", "attiny1634", "attiny167", "at90usb162", "at90usb82".
"avr4"
Thiết bị "nâng cao" có bộ nhớ chương trình lên đến 8 @ tie {} KiB. mcu@tie {} = "ata6285",
"ata6286", "atmega48", "atmega48a", "atmega48p", "atmega48pa", "atmega8",
"atmega8a", "atmega8hva", "atmega8515", "atmega8535", "atmega88", "atmega88a",
"atmega88p", "atmega88pa", "at90pwm1", "at90pwm2", "at90pwm2b", "at90pwm3",
"at90pwm3b", "at90pwm81".
"avr5"
Thiết bị "nâng cao" có bộ nhớ chương trình 16 @ tie {} KiB lên đến 64 @ tie {} KiB.
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"
Thiết bị "nâng cao" có 128 @ tie {} KiB bộ nhớ chương trình. mcu@tie {} = "atmega128",
"atmega128a", "atmega128rfa1", "atmega1280", "atmega1281", "atmega1284",
"atmega1284p", "at90can128", "at90usb1286", "at90usb1287".
"avr6"
Thiết bị "nâng cao" với PC 3 byte, tức là có hơn 128 @ tie {} KiB chương trình
ký ức. mcu@tie {} = "atmega2560", "atmega2561".
"avrxmega2"
Thiết bị "XMEGA" có hơn 8 @ tie {} KiB và lên đến 64 @ tie {} KiB bộ nhớ chương trình.
mcu@tie {} = "atmxt112sl", "atmxt224", "atmxt224e", "atmxt336s", "atxmega16a4",
"atxmega16a4u", "atxmega16c4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32a4u", "atxmega32c4", "atxmega32d4", "atxmega32e5", "atxmega32x1".
"avrxmega4"
Thiết bị "XMEGA" có hơn 64 @ tie {} KiB và tối đa 128 @ tie {} KiB của chương trình
ký ức. mcu@tie {} = "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".
"avrxmega5"
Thiết bị "XMEGA" có hơn 64 @ tie {} KiB và tối đa 128 @ tie {} KiB của chương trình
bộ nhớ và hơn 64 @ tie {} KiB RAM. mcu@tie {} = "atxmega64a1",
"atxmega64a1u".
"avrxmega6"
Thiết bị "XMEGA" có bộ nhớ chương trình hơn 128 @ tie {} KiB. mcu@tie {} =
"atmxt540s", "atmxt540sreva", "atxmega128a3", "atxmega128a3u", "atxmega128b1",
"atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4", "atxmega192a3",
"atxmega192a3u", "atxmega192c3", "atxmega192d3", "atxmega256a3", "atxmega256a3b",
"atxmega256a3bu", "atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3",
"atxmega384d3".
"avrxmega7"
Thiết bị "XMEGA" có bộ nhớ chương trình hơn 128 @ tie {} KiB và hơn thế nữa
64 @ tie {} KiB RAM. mcu@tie {} = "atxmega128a1", "atxmega128a1u", "atxmega128a4u".
"avr1"
ISA này được thực hiện bởi lõi AVR tối thiểu và chỉ hỗ trợ cho trình hợp dịch.
mcu@tie {} = "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".
-maccumulate-args
Tích lũy các đối số của hàm gửi đi và có được / giải phóng không gian ngăn xếp cần thiết cho
đi các đối số hàm một lần trong phần mở đầu / phần kết của hàm. Nếu không có tùy chọn này,
các đối số gửi đi được đẩy trước khi gọi một hàm và xuất hiện sau đó.
Việc bật các đối số sau lệnh gọi hàm có thể tốn kém trên AVR vì vậy
tích tụ không gian ngăn xếp có thể dẫn đến các tệp thực thi nhỏ hơn vì các đối số cần
không bị xóa khỏi ngăn xếp sau một lệnh gọi hàm như vậy.
Tùy chọn này có thể dẫn đến giảm kích thước mã cho các hàm thực hiện một số lệnh gọi đến
các hàm nhận đối số của chúng trên ngăn xếp như lệnh gọi đến các hàm giống printf.
-mbranch-chi phí =chi phí
Đặt chi phí nhánh cho các lệnh nhánh có điều kiện thành chi phí. Giá trị hợp lý
cho chi phí là các số nguyên nhỏ, không âm. Chi phí nhánh mặc định là 0.
-mcall-prologues
Phần mở đầu / phần kết của các hàm được mở rộng dưới dạng lời gọi đến các chương trình con thích hợp. Mã số
kích thước nhỏ hơn.
-bạc hà8
Giả sử "int" là số nguyên 8 bit. Điều này ảnh hưởng đến kích thước của tất cả các loại: "char" là 1
byte, "int" là 1 byte, "long" là 2 byte và "long long" là 4 byte. Vui lòng
lưu ý rằng tùy chọn này không phù hợp với tiêu chuẩn C, nhưng nó dẫn đến
kích thước mã.
-không gián đoạn
Mã đã tạo không tương thích với ngắt phần cứng. Kích thước mã nhỏ hơn.
-mthư giãn
Cố gắng thay thế "CALL". Lệnh "JMP" bằng lệnh ngắn hơn "RCALL". "RJMP"
hướng dẫn nếu có. Đặt "-mrelax" chỉ thêm tùy chọn "--relax" vào
dòng lệnh trình liên kết khi trình liên kết được gọi.
Nhảy thư giãn được thực hiện bởi trình liên kết vì các bước nhảy không được biết trước đó
mã được định vị. Do đó, mã trình hợp dịch được tạo bởi trình biên dịch là giống nhau,
nhưng các hướng dẫn trong tệp thực thi có thể khác với các hướng dẫn trong trình hợp dịch
Mã.
Thư giãn phải được bật nếu cần có phần khai của trình liên kết, hãy xem phần "KẾT THÚC" và
phần khai của trình liên kết bên dưới.
-msp8
Coi thanh ghi con trỏ ngăn xếp như một thanh ghi 8 bit, tức là giả sử byte cao của
con trỏ ngăn xếp bằng không. Nói chung, bạn không cần thiết lập tùy chọn này bằng tay.
Tùy chọn này được trình biên dịch sử dụng nội bộ để chọn và xây dựng nhiều danh sách cho
kiến trúc "avr2" và "avr25". Những kiến trúc này kết hợp các thiết bị có và không có
"SPH". Đối với bất kỳ cài đặt nào ngoài "-mmcu = avr2" hoặc "-mmcu = avr25", trình điều khiển trình biên dịch
sẽ thêm hoặc xóa tùy chọn này khỏi dòng lệnh của trình biên dịch thích hợp, bởi vì
sau đó trình biên dịch sẽ biết liệu thiết bị hoặc kiến trúc có con trỏ ngăn xếp 8-bit hay không và do đó
không có "SPH" đăng ký hay không.
-mstrict-X
Sử dụng thanh ghi địa chỉ "X" theo cách do phần cứng đề xuất. Điều này có nghĩa là "X" là
chỉ được sử dụng trong cách xưng hô gián tiếp, tăng sau hoặc giảm trước.
Nếu không có tùy chọn này, thanh ghi "X" có thể được sử dụng giống như "Y" hoặc "Z"
sau đó được mô phỏng bằng các hướng dẫn bổ sung. Ví dụ: tải một giá trị bằng
Định địa chỉ "X + const" với một "const <64" nhỏ không âm vào một thanh ghi Rn is
thực hiện như
adiw r26, const; X + = const
ld , NS ; = * X
sbiw r26, const; X - = const
-mtiny-stack
Chỉ thay đổi 8 bit @ tie {} thấp hơn của con trỏ ngăn xếp.
-Waddr-không gian-chuyển đổi
Cảnh báo về chuyển đổi giữa các không gian địa chỉ trong trường hợp địa chỉ kết quả
không gian không được chứa trong không gian địa chỉ đến.
"EIND" và Thiết bị có hơn 128 Ki Byte Flash
Các con trỏ trong quá trình triển khai rộng 16 @ tie {} bit. Địa chỉ của một hàm hoặc nhãn
được biểu diễn dưới dạng địa chỉ từ để các bước nhảy và lệnh gọi gián tiếp có thể nhắm mục tiêu đến bất kỳ mã nào
địa chỉ trong phạm vi 64 @ tie {} Ki từ.
Để tạo điều kiện cho việc chuyển đổi gián tiếp trên các thiết bị có hơn 128 @ tie {} Ki byte
không gian bộ nhớ chương trình, có một thanh ghi chức năng đặc biệt được gọi là "EIND" phục vụ như
phần quan trọng nhất của địa chỉ đích khi các lệnh "EICALL" hoặc "EIJMP" là
đã sử dụng.
Các bước nhảy và cuộc gọi gián tiếp trên các thiết bị này được trình biên dịch xử lý như sau và
có một số hạn chế:
· Trình biên dịch không bao giờ đặt "EIND".
· Trình biên dịch sử dụng "EIND" ngầm trong hướng dẫn "EICALL" / "EIJMP" hoặc có thể đọc
"EIND" trực tiếp để mô phỏng một cuộc gọi / nhảy gián tiếp bằng "RET"
chỉ dẫn.
· Trình biên dịch giả định rằng "EIND" không bao giờ thay đổi trong mã khởi động hoặc trong
ứng dụng. Đặc biệt, "EIND" không được lưu / khôi phục trong chức năng hoặc ngắt
phần mở đầu / phần kết của quy trình dịch vụ.
· Đối với các lệnh gọi gián tiếp đến các hàm và goto được tính toán, trình liên kết tạo ra sơ khai. sơ khai
là những miếng đệm nhảy đôi khi còn được gọi là tấm bạt lò xo. Do đó, lệnh gọi / bước nhảy gián tiếp sẽ chuyển đến
sơ khai như vậy. Sơ khai chứa một bước chuyển trực tiếp đến địa chỉ mong muốn.
· Thư giãn trình liên kết phải được bật để trình liên kết sẽ tạo ra các sơ khai
một cách chính xác tất cả các tình huống. Xem tùy chọn trình biên dịch "-mrelax" và tùy chọn linler
"--thư giãn". Có những trường hợp góc trong đó trình liên kết được cho là tạo ra các sơ khai nhưng
hủy bỏ mà không cần thư giãn và không có một thông báo lỗi hữu ích.
· Tập lệnh trình liên kết mặc định được sắp xếp cho mã có "EIND = 0". Nếu mã được cho là
để hoạt động cho một thiết lập với "EIND! = 0", một tập lệnh trình liên kết tùy chỉnh phải được sử dụng theo thứ tự
để đặt các phần có tên bắt đầu bằng ".trampolines" vào phân đoạn nơi
"EIND" trỏ tới.
· Mã khởi động từ libgcc không bao giờ đặt "EIND". Lưu ý rằng mã khởi động là một sự pha trộn
mã từ libgcc và AVR-LibC. Để biết tác động của AVR-LibC đối với "EIND", hãy xem AVR-
Hướng dẫn sử dụng LibC ("http://nongnu.org/avr-libc/user-manual/").
· Việc thiết lập "EIND" sớm là hợp pháp đối với mã khởi động dành riêng cho người dùng, chẳng hạn như bằng cách
phương tiện của mã khởi tạo nằm trong phần ".init3". Mã như vậy chạy trước
mã khởi động chung khởi tạo RAM và gọi các hàm tạo, nhưng sau đoạn mã
mã khởi động từ AVR-LibC đặt "EIND" thành phân đoạn có bảng vectơ
nằm.
#bao gồm
khoảng trống tĩnh
__attribute __ ((section (". init3"), naked, used, no_instrument_ Chức năng))
init3_set_eind (khoảng trống)
{
__asm dễ bay hơi ("ldi r24, pm_hh8 (__ trampolines_start) \ n \ t"
"out% i0, r24" :: "n" (& EIND): "r24", "memory");
}
Ký hiệu "__trampolines_start" được xác định trong tập lệnh trình liên kết.
· Stubs được tạo tự động bởi trình liên kết nếu hai điều kiện sau
gặp:
-
(viết tắt của tạo ra sơ khai) như vậy:
LDI r24, lo8 (gs ( ))
LDI r25, hi8 (gs ( ))
-
bên ngoài phân đoạn mà các sơ khai được đặt.
· Trình biên dịch phát ra các bổ ngữ "gs" như vậy cho các nhãn mã trong các trường hợp sau:
-
-
- -mcall-prologues>
tùy chọn dòng lệnh.
-
bảng bạn có thể chỉ định -fno-jump-table tùy chọn dòng lệnh.
-
-
· Chuyển đến các địa chỉ không phải biểu tượng như vậy không được hỗ trợ:
int chính (khoảng trống)
{
/ * Chức năng gọi tại địa chỉ từ 0x2 * /
return ((int (*) (void)) 0x2) ();
}
Thay vào đó, một sơ khai phải được thiết lập, tức là hàm phải được gọi thông qua một ký hiệu
("func_4" trong ví dụ):
int chính (khoảng trống)
{
bên ngoài int func_4 (khoảng trống);
/ * Chức năng gọi ở địa chỉ byte 0x4 * /
trả về func_4 ();
}
và ứng dụng được liên kết với "-Wl, - defsym, func_4 = 0x4". Ngoài ra, "func_4"
có thể được xác định trong tập lệnh trình liên kết.
Xử lý các thanh ghi chức năng đặc biệt "RAMPD", "RAMPX", "RAMPY" và "RAMPZ"
Một số thiết bị AVR hỗ trợ bộ nhớ lớn hơn phạm vi 64 @ tie {} KiB có thể được truy cập
với con trỏ 16 bit. Để truy cập các vị trí bộ nhớ bên ngoài dải KiB 64 @ tie {} này,
nội dung của thanh ghi "RAMP" được sử dụng làm phần cao của địa chỉ: "X", "Y", "Z"
thanh ghi địa chỉ được nối với chức năng đặc biệt "RAMPX", "RAMPY", "RAMPZ"
đăng ký, tương ứng, để có được một địa chỉ rộng rãi. Tương tự, "RAMPD" được sử dụng cùng với
địa chỉ trực tiếp.
· Mã khởi động khởi tạo các thanh ghi chức năng đặc biệt "RAMP" bằng không.
· Nếu một AVR Được đặt theo tên Địa Chỉ Dấu cách, được đặt tên địa chỉ không gian khác với chung chung hoặc "__flash" là
được sử dụng, sau đó "RAMPZ" được đặt khi cần thiết trước khi hoạt động.
· Nếu thiết bị hỗ trợ RAM lớn hơn 64 @ tie {KiB} và trình biên dịch cần thay đổi
"RAMPZ" để hoàn thành một hoạt động, "RAMPZ" được đặt lại về XNUMX sau khi hoạt động.
· Nếu thiết bị đi kèm với một thanh ghi "RAMP" cụ thể, thì phần mở đầu / phần kết của ISR
lưu / khôi phục SFR đó và khởi tạo nó bằng XNUMX trong trường hợp mã ISR có thể
(mặc nhiên) sử dụng nó.
· RAM lớn hơn 64 @ tie {KiB} không được GCC hỗ trợ cho các mục tiêu AVR. Nếu bạn dùng
trình hợp dịch nội tuyến để đọc từ các vị trí bên ngoài phạm vi địa chỉ 16 bit và thay đổi
một trong các thanh ghi "RAMP", bạn phải đặt lại nó về XNUMX sau khi truy cập.
Macro tích hợp AVR
GCC xác định một số macro tích hợp để mã người dùng có thể kiểm tra sự hiện diện hoặc
thiếu vắng các tính năng. Hầu hết bất kỳ macro tích hợp nào sau đây đều được suy ra từ thiết bị
và do đó được kích hoạt bởi tùy chọn dòng lệnh "-mmcu =".
Để biết thêm các macro tích hợp dành riêng cho AVR, hãy xem AVR Được đặt theo tên Địa Chỉ Spaces và AVR Built-in
Chức năng.
"__AVR_ARCH__"
Macro tích hợp phân giải thành số thập phân xác định kiến trúc và
phụ thuộc vào "-mmcu =mcu " Lựa chọn. Giá trị có thể là:
2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107
cho mcu= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7", tương ứng. Nếu như mcu
chỉ định một thiết bị, macro tích hợp này được đặt tương ứng. Ví dụ, với
"-mmcu = atmega8" macro sẽ được xác định là 4.
"__AVR_Dụng cụ__"
Cài đặt "-mmcu =thiết bị" xác định macro tích hợp này phản ánh tên của thiết bị.
Ví dụ: "-mmcu = atmega8" xác định macro tích hợp "__AVR_ATmega8__",
"-mmcu = attiny261a" định nghĩa "__AVR_ATtiny261A__", v.v.
Tên của macro cài sẵn tuân theo lược đồ "__AVR_Dụng cụ__" Ở đâu Dụng cụ là
tên thiết bị theo hướng dẫn sử dụng AVR. Sự khác biệt giữa Dụng cụ trong tích hợp
vĩ mô và thiết bị trong "-mmcu =thiết bị" là cái sau luôn luôn là chữ thường.
If thiết bị không phải là một thiết bị mà chỉ là một kiến trúc cốt lõi như "avr51", macro này sẽ
không được xác định.
"__AVR_XMEGA__"
Thiết bị / kiến trúc thuộc họ thiết bị XMEGA.
"__AVR_HAVE_ELPM__"
Thiết bị có lệnh "ELPM".
"__AVR_HAVE_ELPMX__"
Thiết bị có "ELPM Rn, Z " và "ELPM Rn, Z + " hướng dẫn.
"__AVR_HAVE_MOVW__"
Thiết bị có lệnh "MOVW" để thực hiện các chuyển động thanh ghi 16-bit.
"__AVR_HAVE_LPMX__"
Thiết bị có "LPM Rn, Z " và "LPM Rn, Z + " hướng dẫn.
"__AVR_HAVE_MUL__"
Thiết bị có một hệ số phần cứng.
"__AVR_HAVE_JMP_CALL__"
Thiết bị có hướng dẫn "JMP" và "CALL". Đây là trường hợp cho các thiết bị có
ít nhất 16 @ tie {} KiB bộ nhớ chương trình.
"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
Thiết bị có hướng dẫn "EIJMP" và "EICALL". Đây là trường hợp cho các thiết bị
với hơn 128 @ tie {} KiB bộ nhớ chương trình. Điều này cũng có nghĩa là chương trình
bộ đếm (PC) rộng 3 @ tie {} byte.
"__AVR_2_BYTE_PC__"
Bộ đếm chương trình (PC) rộng 2 @ tie {} byte. Đây là trường hợp cho các thiết bị có tối đa
128 @ tie {} KiB bộ nhớ chương trình.
"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
Thanh ghi con trỏ ngăn xếp (SP) được coi là thanh ghi 8-bit tương ứng 16-bit bởi
trình biên dịch. Định nghĩa của các macro này bị ảnh hưởng bởi "-mtiny-stack".
"__AVR_HAVE_SPH__"
"__AVR_SP8__"
Thiết bị có thanh ghi chức năng đặc biệt SPH (phần cao của con trỏ ngăn xếp) hoặc có
một con trỏ ngăn xếp 8 bit, tương ứng. Định nghĩa của các macro này bị ảnh hưởng bởi
"-mmcu =" và trong các trường hợp "-mmcu = avr2" và "-mmcu = avr25" cũng bởi "-msp8".
"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Thiết bị có thanh ghi chức năng đặc biệt "RAMPD", "RAMPX", "RAMPY", "RAMPZ",
tương ứng.
"__NO_INTERRUPTS__"
Macro này phản ánh tùy chọn dòng lệnh "-mno-interrupts".
"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Một số thiết bị AVR (AT90S8515, ATmega103) không được bỏ qua hướng dẫn 32 bit vì
lỗi phần cứng. Bỏ qua hướng dẫn là "SBRS", "SBRC", "SBIS", "SBIC" và "CPSE".
Macro thứ hai chỉ được xác định nếu "__AVR_HAVE_JMP_CALL__" cũng được đặt.
"__AVR_SFR_OFFSET __ =bù lại"
Các hướng dẫn có thể giải quyết trực tiếp các thanh ghi chức năng đặc biệt I / O như "IN",
"OUT", "SBI", v.v. có thể sử dụng một địa chỉ khác như thể được chỉ dẫn bởi một lệnh
truy cập RAM như "LD" hoặc "STS". Sự bù đắp này phụ thuộc vào kiến trúc thiết bị và có
được trừ khỏi địa chỉ RAM để lấy địa chỉ I / O @ tie {} tương ứng.
"__WITH_AVRLIBC__"
Trình biên dịch được cấu hình để sử dụng cùng với AVR-Libc. Xem
Tùy chọn cấu hình "--with-avrlibc".
Cá mập đen Các lựa chọn
-mcpu =cpu[-sự thay đổi]
Chỉ định tên của bộ xử lý Blackfin đích. Hiện tại, cpu có thể là một trong số
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.
Tùy chọn sự thay đổi chỉ định bản sửa đổi silicon của Blackfin mục tiêu
bộ xử lý. Bất kỳ giải pháp thay thế nào có sẵn cho bản sửa đổi silicon được nhắm mục tiêu đều được kích hoạt.
If sự thay đổi is không ai, không có giải pháp thay thế nào được kích hoạt. Nếu như sự thay đổi is bất kì, tất cả các
giải pháp thay thế cho bộ xử lý được nhắm mục tiêu được kích hoạt. Macro "__SILICON_REVISION__"
được xác định thành hai chữ số thập lục phân đại diện cho số chính và số phụ trong
sửa đổi silicon. Nếu như sự thay đổi is không ai, "__SILICON_REVISION__" không được xác định.
If sự thay đổi is bất kì, "__SILICON_REVISION__" được xác định là 0xffff. Nếu điều này
không bắt buộc sự thay đổi không được sử dụng, GCC giả định rằng phiên bản silicon mới nhất đã biết của
nhắm mục tiêu bộ xử lý Blackfin.
GCC xác định macro bộ xử lý trước cho cpu. Đối với yêu tinh chuỗi công cụ,
tùy chọn này khiến BSP phần cứng do libgloss cung cấp được liên kết trong nếu -msim is
không được đưa ra.
Nếu không có tùy chọn này, bf532 được sử dụng làm bộ xử lý theo mặc định.
Lưu ý rằng hỗ trợ cho bf561 không đầy đủ. Vì bf561, chỉ macro bộ xử lý trước mới là
xác định.
-msim
Chỉ định rằng chương trình sẽ được chạy trên trình mô phỏng. Điều này làm cho trình mô phỏng
BSP do libgloss cung cấp để được liên kết. Tùy chọn này chỉ có hiệu lực đối với yêu tinh
chuỗi công cụ. Một số tùy chọn khác, chẳng hạn như -giữa-thư viện chia sẻ và -mfdpic, bao hàm, ngụ ý
-msim.
-momit-lá-khung-con trỏ
Đừng giữ con trỏ khung trong sổ đăng ký các chức năng của lá. Điều này tránh
hướng dẫn lưu, thiết lập và khôi phục con trỏ khung và tạo thêm một thanh ghi
có sẵn trong các chức năng của lá. Các tùy chọn -fomit-frame-con trỏ loại bỏ khung
con trỏ cho tất cả các chức năng, điều này có thể khiến việc gỡ lỗi khó khăn hơn.
-mspecld-dị thường
Khi được bật, trình biên dịch đảm bảo rằng mã được tạo không chứa
tải đầu cơ sau khi hướng dẫn nhảy. Nếu tùy chọn này được sử dụng,
"__WORKAROUND_SPECULATIVE_LOADS" được xác định.
-mno-specld-dị thường
Không tạo thêm mã để ngăn tải đầu cơ xảy ra.
-mcsync-dị thường
Khi được bật, trình biên dịch đảm bảo rằng mã được tạo không chứa CSYNC hoặc
Lệnh SSYNC quá sớm sau các nhánh có điều kiện. Nếu tùy chọn này được sử dụng,
"__WORKAROUND_SPECULATIVE_SYNCS" được xác định.
-mno-csync-dị thường
Không tạo thêm mã để ngăn các lệnh CSYNC hoặc SSYNC cũng xảy ra
ngay sau một nhánh có điều kiện.
-mlow-64k
Khi được kích hoạt, trình biên dịch có thể tự do tận dụng kiến thức mà toàn bộ
chương trình phù hợp với 64k bộ nhớ thấp.
-mno-thấp-64k
Giả sử rằng chương trình lớn tùy ý. Đây là mặc định.
-mstack-check-l1
Thực hiện kiểm tra ngăn xếp bằng cách sử dụng thông tin được đặt vào bộ nhớ bàn di chuột L1 bởi uClinux
nhân.
-giữa-thư viện chia sẻ
Tạo mã hỗ trợ các thư viện được chia sẻ thông qua phương thức ID thư viện. Điều này cho phép
để thực thi tại chỗ và chia sẻ thư viện trong môi trường không có bộ nhớ ảo
ban quản lý. Tùy chọn này ngụ ý -fPIC. Với một yêu tinh mục tiêu, tùy chọn này ngụ ý
-msim.
-mno-id-shared-thư viện
Tạo mã không giả sử các thư viện được chia sẻ dựa trên ID đang được sử dụng. Đây là
mặc định.
-mleaf-id-shared-thư viện
Tạo mã hỗ trợ các thư viện được chia sẻ thông qua phương thức ID thư viện, nhưng giả sử
rằng thư viện hoặc tệp thực thi này sẽ không liên kết với bất kỳ thư viện được chia sẻ ID nào khác.
Điều đó cho phép trình biên dịch sử dụng mã nhanh hơn cho các bước nhảy và cuộc gọi.
-mno-leaf-id-shared-thư viện
Đừng cho rằng mã đang được biên dịch sẽ không liên kết với bất kỳ thư viện được chia sẻ ID nào.
Mã chậm hơn được tạo cho nội bộ bước nhảy và cuộc gọi.
-mshared-library-id = n
Chỉ định số nhận dạng của thư viện được chia sẻ dựa trên ID đang được biên dịch.
Chỉ định giá trị 0 tạo ra mã nhỏ gọn hơn; chỉ định các lực lượng giá trị khác
việc phân bổ số đó cho thư viện hiện tại nhưng không còn không gian- hoặc thời gian-
hiệu quả hơn là bỏ qua tùy chọn này.
-msep-dữ liệu
Tạo mã cho phép phân đoạn dữ liệu được định vị trong một vùng khác của bộ nhớ
từ phân đoạn văn bản. Điều này cho phép thực thi tại chỗ trong môi trường không có
quản lý bộ nhớ ảo bằng cách loại bỏ các vị trí so với phần văn bản.
-mno-sep-data
Tạo mã giả định rằng phân đoạn dữ liệu theo sau phân đoạn văn bản. Đây là
mặc định.
-các cuộc gọi dài
-các cuộc gọi không dài
Yêu cầu trình biên dịch thực hiện các lệnh gọi hàm bằng cách tải địa chỉ của
hàm thành một thanh ghi và sau đó thực hiện một lệnh gọi chương trình con trên thanh ghi này. Cái này
cần chuyển đổi nếu chức năng đích nằm ngoài phạm vi địa chỉ 24 bit của
phiên bản dựa trên offset của lệnh gọi chương trình con.
Tính năng này không được bật theo mặc định. Xác định -các cuộc gọi không dài khôi phục lại
hành vi mặc định. Lưu ý rằng các công tắc này không ảnh hưởng đến cách trình biên dịch tạo ra
mã để xử lý các lệnh gọi hàm thông qua con trỏ hàm.
-mfast-fp
Liên kết với thư viện dấu phẩy động nhanh chóng. Thư viện này thư giãn một số IEEE
các quy tắc của tiêu chuẩn dấu phẩy động để kiểm tra đầu vào so với Not-a-Number (NAN), trong
lãi suất của hiệu suất.
-minline-plt
Bật nội dòng của các mục PLT trong các lệnh gọi hàm đến các hàm chưa được biết đến
ràng buộc cục bộ. Nó không có tác dụng nếu không có -mfdpic.
-multicore
Xây dựng một ứng dụng độc lập cho bộ xử lý Blackfin đa lõi. Tùy chọn này gây ra
các tệp bắt đầu thích hợp và các tập lệnh liên kết hỗ trợ đa lõi được sử dụng và xác định
macro "__BFIN_MULTICORE". Nó chỉ có thể được sử dụng với -mcpu = bf561[-sự thay đổi].
Tùy chọn này có thể được sử dụng với -mcorea or -mcoreb, chọn một ứng dụng-
mô hình lập trình mỗi lõi. Không có -mcorea or -mcoreb, Các
mô hình lập trình đơn ứng dụng / lõi kép được sử dụng. Trong mô hình này, chính
chức năng của Core B nên được đặt tên là "coreb_main".
Nếu tùy chọn này không được sử dụng, mô hình lập trình ứng dụng lõi đơn sẽ được sử dụng.
-mcorea
Xây dựng một ứng dụng độc lập cho Core A của BF561 khi sử dụng một-ứng-dụng-cho-
mô hình lập trình lõi. Các tệp bắt đầu thích hợp và các tập lệnh liên kết được sử dụng để hỗ trợ Core
A và macro "__BFIN_COREA" được xác định. Tùy chọn này chỉ có thể được sử dụng trong
kết hợp với -multicore.
-mcoreb
Xây dựng một ứng dụng độc lập cho Core B của BF561 khi sử dụng một-ứng-dụng-cho-
mô hình lập trình lõi. Các tệp bắt đầu thích hợp và các tập lệnh liên kết được sử dụng để hỗ trợ Core
B và macro "__BFIN_COREB" được xác định. Khi tùy chọn này được sử dụng, "coreb_main"
nên được dùng thay cho "main". Tùy chọn này chỉ có thể được sử dụng cùng với
-multicore.
-msdram
Xây dựng một ứng dụng độc lập cho SDRAM. Các tệp bắt đầu thích hợp và các tập lệnh liên kết được sử dụng
để đưa ứng dụng vào SDRAM và macro "__BFIN_SDRAM" được xác định. Các
trình tải nên khởi tạo SDRAM trước khi tải ứng dụng.
-micplb
Giả sử rằng ICPLB được kích hoạt tại thời điểm chạy. Điều này có ảnh hưởng đến sự bất thường nhất định
cách giải quyết. Đối với các mục tiêu Linux, mặc định là giả sử ICPLB được kích hoạt; vì
các ứng dụng độc lập mặc định bị tắt.
C6X Các lựa chọn
-march =tên
Điều này chỉ định tên của kiến trúc đích. GCC sử dụng tên này để xác định
loại lệnh nào nó có thể phát ra khi tạo mã lắp ráp. Được phép
tên là: c62x, c64x, c64x +, c67x, c67x +, c674x.
-mbig-endian
Tạo mã cho một mục tiêu lớn.
-mlittle-endian
Tạo mã cho một mục tiêu ít endian. Đây là mặc định.
-msim
Chọn tệp khởi động và tập lệnh trình liên kết phù hợp với trình mô phỏng.
-msdata = mặc định
Đặt dữ liệu toàn cầu và tĩnh nhỏ trong .neardữ liệu phần được trỏ đến bởi
đăng ký "B14". Đặt dữ liệu tĩnh và toàn cầu nhỏ chưa được khởi tạo trong .bss phần,
tiếp giáp với .neardữ liệu phần. Đưa dữ liệu chỉ đọc nhỏ vào .rodata
phần. Các phần tương ứng được sử dụng cho các phần lớn dữ liệu là .fardata, .xa
và .hăng sô.
-msdata = tất cả
Đặt tất cả dữ liệu, không chỉ các đối tượng nhỏ, vào các phần dành riêng cho dữ liệu nhỏ và
sử dụng địa chỉ liên quan đến đăng ký "B14" để truy cập chúng.
-msdata = không có
Không sử dụng các phần dành riêng cho dữ liệu nhỏ và sử dụng các địa chỉ tuyệt đối để
truy cập tất cả dữ liệu. Đặt tất cả dữ liệu toàn cục và dữ liệu tĩnh đã khởi tạo trong .fardata phần,
và tất cả dữ liệu chưa được khởi tạo trong .xa phần. Đặt tất cả dữ liệu không đổi vào .hăng sô
phần.
CRIS Các lựa chọn
Các tùy chọn này được xác định cụ thể cho các cổng CRIS.
-march =kiểu kiến trúc
-mcpu =kiểu kiến trúc
Tạo mã cho kiến trúc được chỉ định. Các lựa chọn cho kiểu kiến trúc đang
v3, v8 và v10 tương ứng với ETRAX 4, ETRAX 100 và ETRAX 100 LX. Mặc định là v0
ngoại trừ khủng hoảng-trục-linux-gnu, trong đó giá trị mặc định là v10.
-mtune =kiểu kiến trúc
Điều chỉnh để kiểu kiến trúc mọi thứ áp dụng về mã đã tạo, ngoại trừ
ABI và tập hợp các hướng dẫn có sẵn. Các lựa chọn cho kiểu kiến trúc đang
giống như đối với -march =kiểu kiến trúc.
-mmax-stack-frame =n
Cảnh báo khi khung ngăn xếp của một hàm vượt quá n byte.
-metrax4
-metrax100
Các tùy chọn -metrax4 và -metrax100 là từ đồng nghĩa với -march = v3 và -march = v8
tương ứng.
-mmul-lỗi-cách giải quyết
-mno-mul-lỗi-cách giải quyết
Khắc phục lỗi trong hướng dẫn "muls" và "mulu" dành cho các kiểu CPU mà lỗi đó
áp dụng. Tùy chọn này hoạt động theo mặc định.
-mpdebug
Bật thông tin liên quan đến gỡ lỗi chi tiết cụ thể cho CRIS trong mã lắp ráp. Cái này
tùy chọn cũng có tác dụng tắt #KHÔNG_ỨNG DỤNG chỉ báo mã định dạng cho
trình hợp ngữ ở đầu tệp hợp ngữ.
-mcc-init
Không sử dụng kết quả mã điều kiện từ hướng dẫn trước đó; luôn luôn phát ra so sánh và
hướng dẫn kiểm tra trước khi sử dụng mã điều kiện.
-mno-tác dụng phụ
Không phát ra hướng dẫn có tác dụng phụ trong các chế độ giải quyết khác với chế độ đăng
tăng.
-mstack-căn chỉnh
-mno-stack-căn chỉnh
-mdata-căn chỉnh
-mno-dữ liệu-căn chỉnh
-mconst-căn chỉnh
-mno-const-căn chỉnh
Các tùy chọn này (không- tùy chọn) sắp xếp (loại bỏ sự sắp xếp) cho khung ngăn xếp,
dữ liệu và hằng số riêng lẻ được căn chỉnh để có kích thước truy cập dữ liệu đơn lẻ tối đa
cho kiểu CPU đã chọn. Mặc định là sắp xếp cho căn chỉnh 32-bit. ABI
các chi tiết như bố cục cấu trúc không bị ảnh hưởng bởi các tùy chọn này.
-m32-bit
-m16-bit
-m8-bit
Tương tự như các tùy chọn stack- data- và const-align ở trên, các tùy chọn này sắp xếp cho
khung ngăn xếp, dữ liệu có thể ghi và các hằng số đều được căn chỉnh 32 bit, 16 bit hoặc 8 bit.
Mặc định là căn chỉnh 32-bit.
-mno-mở đầu-phần kết
-mprologue-đoạn kết
Với -mno-mở đầu-phần kết, phần mở đầu và phần kết của chức năng bình thường đã thiết lập
khung ngăn xếp bị bỏ qua và không có hướng dẫn trả lại hoặc trình tự trả về
được tạo trong mã. Chỉ sử dụng tùy chọn này cùng với việc kiểm tra trực quan
mã đã biên dịch: không có cảnh báo hoặc lỗi nào được tạo ra khi các đăng ký lưu cuộc gọi phải được
được lưu hoặc lưu trữ cho các biến cục bộ cần được cấp phát.
-mno-gotplt
-mgotplt
Với -fpic và -fPIC, không tạo (do tạo) chuỗi lệnh tải
địa chỉ cho các chức năng từ phần PLT của GOT thay vì (truyền thống trên các
kiến trúc) gọi đến PLT. Mặc định là -mgotplt.
-chính mình
Tùy chọn no-op kế thừa chỉ được công nhận với khủng hoảng-trục-elf và khủng hoảng-trục-linux-gnu
mục tiêu.
-mlinux
Tùy chọn no-op kế thừa chỉ được công nhận với mục tiêu khủng hoảng-trục-linux-gnu.
-sim
Tùy chọn này, được công nhận cho khủng hoảng-trục-elf, sắp xếp để liên kết với đầu vào-đầu ra
các chức năng từ một thư viện giả lập. Mã, dữ liệu khởi tạo và dữ liệu không khởi tạo
được phân bổ liên tiếp.
-sim2
Như -sim, nhưng vượt qua các tùy chọn trình liên kết để xác định vị trí dữ liệu đã khởi tạo ở 0x40000000 và XNUMX-
dữ liệu khởi tạo ở 0x80000000.
CR16 Các lựa chọn
Các tùy chọn này được xác định cụ thể cho các cổng CR16.
-ừm
Cho phép sử dụng các hướng dẫn tích lũy nhiều lần. Bị tắt theo mặc định.
-mcr16cplus
-mcr16c
Tạo mã cho kiến trúc CR16C hoặc CR16C +. Kiến trúc CR16C + là mặc định.
-msim
Liên kết thư viện libsim.a tương thích với trình mô phỏng. Áp dụng cho ELF
chỉ trình biên dịch.
-bạc hà32
Chọn kiểu số nguyên rộng 32 bit.
-mbit-ops
Tạo các lệnh "sbit" / "cbit" cho các thao tác trên bit.
-mdata-model =kiểu mẫu
Chọn một mô hình dữ liệu. Các lựa chọn cho kiểu mẫu đang ở gần, xa or trung bình. trung bình là mặc định.
Tuy vậy, xa không hợp lệ với -mcr16c, vì kiến trúc CR16C không hỗ trợ
mô hình dữ liệu xa.
Darwin Các lựa chọn
Các tùy chọn này được xác định cho tất cả các kiến trúc chạy hệ điều hành Darwin.
FSF GCC trên Darwin không tạo tệp đối tượng "béo"; nó tạo ra một tệp đối tượng cho
kiến trúc duy nhất mà GCC được xây dựng để nhắm mục tiêu. GCC của Apple trên Darwin thực sự tạo ra "chất béo"
các tệp nếu nhiều -sao các tùy chọn được sử dụng; nó làm như vậy bằng cách chạy trình biên dịch hoặc trình liên kết
nhiều lần và kết hợp các kết quả với nhau với lipo.
Loại con của tệp được tạo (như ppc7400 or ppc970 or i686) được xác định bởi
cờ chỉ định ISA mà GCC đang nhắm mục tiêu, như -mcpu or -tháng Ba. Các
-force_cpusubtype_ALL tùy chọn có thể được sử dụng để ghi đè điều này.
Các công cụ Darwin khác nhau về hành vi của chúng khi hiển thị với ISA không phù hợp. Các
người lắp ráp, as, chỉ cho phép sử dụng các hướng dẫn hợp lệ cho loại phụ của
tệp mà nó đang tạo, vì vậy bạn không thể đặt các hướng dẫn 64-bit trong ppc750 tệp đối tượng. Các
trình liên kết cho các thư viện được chia sẻ, / usr / bin / libtool, không thành công và in lỗi nếu được yêu cầu
tạo một thư viện được chia sẻ với kiểu con ít hạn chế hơn các tệp đầu vào của nó (đối với
ví dụ, cố gắng đặt một ppc970 tệp đối tượng trong một ppc7400 thư viện). Trình liên kết cho
thực thi, ld, lặng lẽ cung cấp cho tệp thi hành được loại phụ hạn chế nhất trong số
các tập tin đầu vào.
-Fdir
Thêm thư mục khung dir lên đầu danh sách các thư mục được tìm kiếm
cho các tệp tiêu đề. Những thư mục này được xen kẽ với những thư mục được chỉ định bởi -I
các tùy chọn và được quét theo thứ tự từ trái sang phải.
Thư mục khung là một thư mục có các khung trong đó. Một khuôn khổ là một
thư mục với một Headers và / hoặc Tiêu đề riêng tư thư mục chứa trực tiếp trong đó
kết thúc ở .framework. Tên của một khuôn khổ là tên của thư mục này không bao gồm
các .framework. Các tiêu đề được liên kết với khung được tìm thấy ở một trong hai
thư mục, với Headers được tìm kiếm đầu tiên. Khung phụ là một khung
thư mục nằm trong một khuôn khổ khung danh mục. Bao gồm khung phụ
tiêu đề chỉ có thể xuất hiện trong tiêu đề của một khung chứa khung phụ, hoặc
trong tiêu đề khung phụ anh chị em. Hai khung con là anh em ruột nếu chúng xảy ra trong
cùng một khuôn khổ. Khung con không được trùng tên với khung; Một
cảnh báo được đưa ra nếu điều này bị vi phạm. Hiện tại một khung phụ không thể có
khung phụ; trong tương lai, cơ chế này có thể được mở rộng để hỗ trợ điều này. Các
các khuôn khổ tiêu chuẩn có thể được tìm thấy trong / System / Library / Frameworks và
/ Library / Frameworks. Một ví dụ bao gồm trông giống như "#include ",
Ở đâu Khung biểu thị tên của khung và tiêu đề.h được tìm thấy trong
Tiêu đề riêng tư or Headers thư mục.
-công việcdir
Như -F ngoại trừ thư mục được coi là một thư mục hệ thống. Điểm khác biệt chính
giữa cái này -công việc và -F đó là với -công việc trình biên dịch không cảnh báo
về các cấu trúc chứa trong các tệp tiêu đề được tìm thấy qua dir. Tùy chọn này hợp lệ
chỉ dành cho họ ngôn ngữ C.
-người thích
Gửi thông tin gỡ lỗi cho các ký hiệu được sử dụng. Đối với định dạng gỡ lỗi khó khăn,
Điều này cho phép -feliminate-không sử dụng-gỡ lỗi-ký hiệu. Theo mặc định, điều này là BẬT.
-đầy đủ
Gửi thông tin gỡ lỗi cho tất cả các ký hiệu và kiểu.
-mmacosx-version-min =phiên bản
Phiên bản MacOS X sớm nhất mà tệp thực thi này sẽ chạy là phiên bản. Điển hình
giá trị của phiên bản bao gồm 10.1, 10.2 và 10.3.9.
Nếu trình biên dịch được xây dựng để sử dụng tiêu đề của hệ thống theo mặc định, thì mặc định cho
tùy chọn này là phiên bản hệ thống mà trình biên dịch đang chạy, nếu không
mặc định là đưa ra các lựa chọn tương thích với càng nhiều hệ thống và cơ sở mã
có thể.
-mkernel
Bật chế độ phát triển hạt nhân. Các -mkernel bộ tùy chọn -mặt đứng, -không phổ biến,
-fno-use-cxa-atexit, -không có ngoại lệ, -fno-non-call-ngoại lệ, -fapple-kext,
-không-yếu và -fno-rtti nơi áp dụng. Chế độ này cũng đặt -mno-altivec,
-msoft-phao, -fno-nội trang và -mlong-nhánh cho các mục tiêu PowerPC.
-mone-byte-bool
Ghi đè các giá trị mặc định cho bool để sizeof (bool) == 1. Theo mặc định sizeof (bool) is 4
khi biên dịch cho Darwin / PowerPC và 1 khi biên dịch cho Darwin / x86, vì vậy tùy chọn này
không ảnh hưởng đến x86.
Cảnh báo: Sản phẩm -mone-byte-bool chuyển đổi khiến GCC tạo mã không phải là mã nhị phân
tương thích với mã được tạo mà không có công tắc đó. Sử dụng công tắc này có thể yêu cầu
biên dịch lại tất cả các mô-đun khác trong một chương trình, bao gồm cả các thư viện hệ thống. Dùng cái này
chuyển sang phù hợp với mô hình dữ liệu không mặc định.
-mfix-và-tiếp tục
-ffix-and-tiếp tục
-findirect-dữ liệu
Tạo mã phù hợp để phát triển quay vòng nhanh, chẳng hạn như để cho phép GDB
tải động các tệp ".o" vào các chương trình đã chạy. -findirect-dữ liệu và
-ffix-and-tiếp tục được cung cấp để tương thích ngược.
-all_load
Tải tất cả các thành viên của thư viện lưu trữ tĩnh. Gặp người ld(1) để biết thêm thông tin.
-arch_errors_fatal
Nguyên nhân gây ra các lỗi liên quan đến các tệp có cấu trúc sai nghiêm trọng.
-bind_at_load
Làm cho tệp đầu ra được đánh dấu để trình liên kết động sẽ liên kết tất cả
tham chiếu không xác định khi tệp được tải hoặc khởi chạy.
-bùm
Tạo tệp định dạng gói Mach-o. Gặp người ld(1) để biết thêm thông tin.
-bundle_loader thực thi được
Tùy chọn này chỉ định thực thi được điều đó sẽ tải tệp đầu ra của bản dựng đang
được liên kết. Gặp người ld(1) để biết thêm thông tin.
-dynamiclib
Khi được thông qua tùy chọn này, GCC tạo ra một thư viện động thay vì một tệp thực thi khi
liên kết, sử dụng Darwin libtool chỉ huy.
-force_cpusubtype_ALL
Điều này khiến tệp đầu ra của GCC có TẤT CẢ CÁC loại con, thay vì loại được kiểm soát bởi
các -mcpu or -tháng Ba tùy chọn.
-allowable_client tên khách hàng
-tên khách hàng
-tương thích_version
-Phiên bản hiện tại
-dead_strip
-tập tin phụ thuộc
-dylib_file
-dylinker_install_name
-động lực học
-exported_symbols_list
-nhà phim
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-image_base
-trong đó
-tên cài đặt
-keep_private_externs
-multi_module
-multiply_define
-multiply_define_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebined
-nomultidefs
-noprebind
-noseglinkedit
-pagezero_size
-liên kết trước
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-căn chỉnh
-sectobjectbiểu tượng
-tại sao tải
-seg1addr
-secttạo
-sectobjectbiểu tượng
- máy quay phim
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkchỉnh sửa
-segprot
-segs_read_only_addr
-segs_read_write_addr
-single_module
-mặt đứng
-sub_thư viện
-sub_ô
-twolevel_namespace
-ô
-không xác định
-unexported_symbols_list
-weak_reference_mismatches
-có gì đã tải
Các tùy chọn này được chuyển đến trình liên kết Darwin. Trang người đàn ông của trình liên kết Darwin mô tả
chúng một cách chi tiết.
Tháng mười hai Alpha Các lựa chọn
Kia là -m các tùy chọn được xác định cho việc triển khai DEC Alpha:
-mno-mềm-phao
-msoft-phao
Sử dụng (không sử dụng) các hướng dẫn về dấu phẩy động của phần cứng cho dấu phẩy động
các hoạt động. Khi nào -msoft-phao được chỉ định, các chức năng trong libgcc.a được sử dụng để biểu diễn
các phép toán dấu phẩy động. Trừ khi chúng được thay thế bằng các thói quen mô phỏng
các phép toán dấu phẩy động hoặc được biên dịch theo cách gọi các mô phỏng như vậy
các quy trình, các quy trình này đưa ra các hoạt động dấu phẩy động. Nếu bạn đang biên dịch cho
một Alpha không có phép toán dấu phẩy động, bạn phải đảm bảo rằng thư viện được xây dựng
để không gọi họ.
Lưu ý rằng các triển khai Alpha không có phép toán dấu phẩy động bắt buộc phải có
thanh ghi dấu phẩy động.
-mfp-reg
-mno-fp-reg
Tạo mã sử dụng (không sử dụng) tập thanh ghi dấu phẩy động. -mno-fp-reg
ngụ ý -msoft-phao. Nếu bộ thanh ghi dấu phẩy động không được sử dụng, dấu phẩy động
toán hạng được chuyển vào thanh ghi số nguyên như thể chúng là số nguyên và dấu phẩy động
kết quả được chuyển bằng $ 0 thay vì $ f0. Đây là một chuỗi gọi không chuẩn, vì vậy
bất kỳ hàm nào có đối số dấu phẩy động hoặc giá trị trả về được gọi bằng mã được biên dịch
với -mno-fp-reg cũng phải được biên dịch với tùy chọn đó.
Một cách sử dụng điển hình của tùy chọn này là xây dựng một hạt nhân không sử dụng và do đó cần
không lưu và khôi phục, bất kỳ thanh ghi dấu phẩy động nào.
-mieee
Kiến trúc Alpha triển khai phần cứng dấu phẩy động được tối ưu hóa cho
màn biểu diễn. Nó hầu như tuân thủ tiêu chuẩn dấu phẩy động IEEE. Tuy vậy,
để tuân thủ đầy đủ, cần hỗ trợ phần mềm. Tùy chọn này tạo mã
mã hoàn toàn tuân thủ IEEE ngoại trừ rằng cờ không chính xác không được duy trì (xem bên dưới).
Nếu tùy chọn này được bật, macro bộ xử lý trước "_IEEE_FP" được xác định trong
biên dịch. Mã kết quả kém hiệu quả hơn nhưng có thể hỗ trợ chính xác
số không chuẩn hóa và các giá trị IEEE đặc biệt như not-a-number và cộng / trừ
vô cực. Các trình biên dịch Alpha khác gọi tùy chọn này -ieee_with_no_không chính xác.
-mieee-với-không chính xác
Điều này giống như -mieee ngoại trừ mã được tạo cũng duy trì IEEE cờ không chính xác.
Việc bật tùy chọn này sẽ khiến mã được tạo triển khai IEEE hoàn toàn tuân thủ
môn Toán. Ngoài "_IEEE_FP", "_IEEE_FP_EXACT" được định nghĩa là một macro bộ xử lý trước.
Trên một số triển khai Alpha, mã kết quả có thể thực thi chậm hơn đáng kể so với
mã được tạo theo mặc định. Vì có rất ít mã phụ thuộc vào
cờ không chính xác, bạn thường không nên chỉ định tùy chọn này. Các trình biên dịch Alpha khác gọi
tùy chọn này -ieee_with_inexact.
-mfp-trap-mode =chế độ bẫy
Tùy chọn này kiểm soát những bẫy liên quan đến dấu phẩy động nào được bật. Alpha khác
trình biên dịch gọi tùy chọn này -fptm chế độ bẫy. Chế độ bẫy có thể được đặt thành một trong bốn chế độ
các giá trị:
n Đây là cài đặt mặc định (bình thường). Các bẫy duy nhất được kích hoạt là
những cái không thể bị vô hiệu hóa trong phần mềm (ví dụ: bẫy chia cho XNUMX).
u Ngoài các bẫy được kích hoạt bởi n, bẫy dòng chảy cũng được kích hoạt.
su Như u, nhưng các hướng dẫn được đánh dấu là an toàn để hoàn thành phần mềm (xem
Hướng dẫn sử dụng kiến trúc Alpha để biết thêm chi tiết).
trên Như su, nhưng bẫy không chính xác cũng được kích hoạt.
-mfp-rounding-mode =chế độ làm tròn
Chọn chế độ làm tròn IEEE. Các trình biên dịch Alpha khác gọi tùy chọn này -fprm
chế độ làm tròn. Các chế độ làm tròn có thể là một trong số:
n Chế độ làm tròn IEEE thông thường. Các số dấu phẩy động được làm tròn về phía gần nhất
số máy hoặc về phía số máy chẵn trong trường hợp hòa.
m Làm tròn về phía trừ vô cùng.
c Chế độ làm tròn cắt nhỏ. Số dấu phẩy động được làm tròn về XNUMX.
d Chế độ làm tròn động. Một trường trong thanh ghi điều khiển dấu phẩy động (fpcr, Xem
Sổ tay tham khảo kiến trúc Alpha) điều khiển chế độ làm tròn có hiệu lực. C
thư viện khởi tạo thanh ghi này để làm tròn đến cộng vô cùng. Vì vậy,
trừ khi chương trình của bạn sửa đổi fpcr, d tương ứng với vòng đối với cộng
vô cực.
-mtrap-precision =độ chính xác của bẫy
Trong kiến trúc Alpha, bẫy dấu chấm động là không chính xác. Điều này có nghĩa là không có
hỗ trợ phần mềm không thể khôi phục từ một chương trình và bẫy trôi nổi
thông thường cần phải kết thúc quá trình thực thi. GCC có thể tạo mã có thể hỗ trợ
trình xử lý bẫy hệ điều hành trong việc xác định vị trí chính xác đã gây ra
bẫy dấu chấm động. Tùy thuộc vào yêu cầu của một ứng dụng,
có thể chọn các mức phân khu:
p Độ chính xác của chương trình. Tùy chọn này là mặc định và có nghĩa là trình xử lý bẫy chỉ có thể
xác định chương trình nào gây ra ngoại lệ dấu phẩy động.
f Độ chính xác của hàm. Trình xử lý bẫy có thể xác định chức năng gây ra
ngoại lệ dấu phẩy động.
i Chỉ dẫn chính xác. Người xử lý bẫy có thể xác định hướng dẫn chính xác
gây ra một ngoại lệ dấu phẩy động.
Các trình biên dịch Alpha khác cung cấp các tùy chọn tương đương được gọi là -scope_safe và
-tiếp tục_an toàn.
-mieee-tuân thủ
Tùy chọn này đánh dấu mã được tạo là tuân thủ IEEE. Bạn không được sử dụng tùy chọn này
trừ khi bạn cũng chỉ định -mtrap-precision = i và một trong hai -mfp-trap-mode = su or
-mfp-trap-mode = sui. Tác dụng duy nhất của nó là phát ra dòng .eflag 48 trong chức năng
phần mở đầu của tệp lắp ráp được tạo.
-hằng số xây dựng
Thông thường GCC kiểm tra một hằng số nguyên 32 hoặc 64 bit để xem liệu nó có thể xây dựng nó hay không
từ các hằng số nhỏ hơn trong hai hoặc ba lệnh. Nếu nó không thể, nó sẽ xuất ra
hằng số dưới dạng một ký tự và tạo mã để tải nó từ phân đoạn dữ liệu tại thời điểm chạy.
Sử dụng tùy chọn này để yêu cầu GCC xây dựng tất cả các hằng số nguyên bằng cách sử dụng mã, ngay cả khi
cần nhiều hướng dẫn hơn (tối đa là sáu).
Bạn thường sử dụng tùy chọn này để xây dựng bộ tải động thư viện được chia sẻ. Bản thân nó là một
thư viện chia sẻ, nó phải tự định vị lại trong bộ nhớ trước khi có thể tìm thấy các biến và
hằng số trong phân đoạn dữ liệu của chính nó.
-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-sửa
-max
-mno-max
Cho biết liệu GCC có nên tạo mã để sử dụng BWX, CIX, FIX và MAX tùy chọn hay không
các tập lệnh. Mặc định là sử dụng các tập lệnh được hỗ trợ bởi CPU
loại được chỉ định qua -mcpu = tùy chọn hoặc của CPU mà GCC được xây dựng nếu không có
được chỉ định.
-mfloat-vax
-mfloat-ieee
Tạo mã sử dụng (không sử dụng) VAX F và G số học dấu phẩy động thay thế
của IEEE độ chính xác đơn và kép.
-mexplicit-relocs
-mno-rõ ràng-relocs
Các nhà lắp ráp Alpha cũ hơn không cung cấp cách nào để tạo các vị trí ký hiệu ngoại trừ thông qua
macro trình hợp dịch. Việc sử dụng các macro này không cho phép lập lịch hướng dẫn tối ưu.
GNU binutils kể từ phiên bản 2.12 hỗ trợ một cú pháp mới cho phép trình biên dịch
đánh dấu rõ ràng việc chuyển địa điểm nào nên áp dụng cho những hướng dẫn nào. Tùy chọn này là
hầu hết hữu ích cho việc gỡ lỗi, vì GCC phát hiện khả năng của trình hợp dịch khi nó
được xây dựng và đặt mặc định cho phù hợp.
-msmall-dữ liệu
-mlarge-dữ liệu
Thời Gian -mexplicit-relocs đang có hiệu lực, dữ liệu tĩnh được truy cập qua gp-họ hàng
sự tái định cư. Khi nào -msmall-dữ liệu được sử dụng, các đối tượng dài 8 byte hoặc nhỏ hơn được đặt trong
a nhỏ dữ liệu khu vực (phần ".sdata" và ".sbss") và được truy cập qua 16-bit
chuyển vị trí khỏi sổ đăng ký $ gp. Điều này giới hạn kích thước của vùng dữ liệu nhỏ
64KB, nhưng cho phép các biến được truy cập trực tiếp thông qua một lệnh duy nhất.
Mặc định là -mlarge-dữ liệu. Với tùy chọn này, vùng dữ liệu được giới hạn ở ngay bên dưới
2 GB. Các chương trình yêu cầu nhiều hơn 2GB dữ liệu phải sử dụng "malloc" hoặc "mmap" để
phân bổ dữ liệu trong heap thay vì trong phân đoạn dữ liệu của chương trình.
Khi tạo mã cho các thư viện được chia sẻ, -fpic ngụ ý -msmall-dữ liệu và -fPIC
ngụ ý -mlarge-dữ liệu.
-msmall-văn bản
-mlarge-văn bản
Thời Gian -msmall-văn bản được sử dụng, trình biên dịch giả định rằng mã của toàn bộ chương trình
(hoặc thư viện được chia sẻ) có dung lượng 4MB và do đó có thể truy cập được bằng lệnh rẽ nhánh.
Thời Gian -msmall-dữ liệu được sử dụng, trình biên dịch có thể giả định rằng tất cả các ký hiệu cục bộ chia sẻ
cùng một giá trị $ gp và do đó giảm số lượng lệnh cần thiết cho một hàm
gọi từ 4 đến 1.
Mặc định là -mlarge-văn bản.
-mcpu =cpu_type
Đặt tập lệnh và các thông số lập lịch hướng dẫn cho loại máy
cpu_type. Bạn có thể chỉ định EV tên kiểu hoặc số chip tương ứng.
GCC hỗ trợ các thông số lập lịch cho dòng bộ xử lý EV4, EV5 và EV6 và
chọn các giá trị mặc định cho tập lệnh từ bộ xử lý bạn chỉ định. Nếu như
bạn không chỉ định loại bộ xử lý, GCC mặc định cho bộ xử lý mà trên đó
trình biên dịch đã được xây dựng.
Các giá trị được hỗ trợ cho cpu_type đang
ev4
ev45
21064
Lên lịch dưới dạng EV4 và không có phần mở rộng tập hướng dẫn.
ev5
21164
Lên lịch dưới dạng EV5 và không có phần mở rộng tập hướng dẫn.
ev56
21164a
Lập lịch dưới dạng EV5 và hỗ trợ tiện ích mở rộng BWX.
pca56
21164pc
21164PC
Lập lịch dưới dạng EV5 và hỗ trợ phần mở rộng BWX và MAX.
ev6
21264
Lập lịch dưới dạng EV6 và hỗ trợ các tiện ích mở rộng BWX, FIX và MAX.
ev67
21264a
Lập lịch dưới dạng EV6 và hỗ trợ các tiện ích mở rộng BWX, CIX, FIX và MAX.
Các công cụ gốc cũng hỗ trợ giá trị tự nhiên, lựa chọn kiến trúc tốt nhất
tùy chọn cho bộ xử lý máy chủ. -mcpu = bản địa không có hiệu lực nếu GCC không nhận ra
bộ xử lý.
-mtune =cpu_type
Chỉ đặt các thông số lập lịch hướng dẫn cho loại máy cpu_type. Các
tập lệnh không được thay đổi.
Các công cụ gốc cũng hỗ trợ giá trị tự nhiên, lựa chọn kiến trúc tốt nhất
tùy chọn cho bộ xử lý máy chủ. -mtune = bản địa không có hiệu lực nếu GCC không nhận ra
bộ xử lý.
-mmemory-latency =thời gian
Đặt độ trễ mà bộ lập lịch sẽ giả định cho các tham chiếu bộ nhớ điển hình như được thấy bởi
ứng dụng. Con số này phụ thuộc nhiều vào các kiểu truy cập bộ nhớ được sử dụng
theo ứng dụng và kích thước của bộ đệm ngoài trên máy.
Các tùy chọn hợp lệ cho thời gian đang
con số
Một số thập phân đại diện cho các chu kỳ đồng hồ.
L1
L2
L3
chính
Trình biên dịch chứa các ước tính về số chu kỳ đồng hồ cho EV4 "điển hình" &
Phần cứng EV5 cho bộ đệm cấp 1, 2 & 3 (còn được gọi là Dcache, Scache và
Bcache), cũng như bộ nhớ chính. Lưu ý rằng L3 chỉ hợp lệ cho EV5.
FR30 Các lựa chọn
Các tùy chọn này được xác định cụ thể cho cổng FR30.
-mô hình nhỏ
Sử dụng mô hình không gian địa chỉ nhỏ. Điều này có thể tạo ra mã nhỏ hơn, nhưng nó giả định
rằng tất cả các giá trị và địa chỉ tượng trưng đều phù hợp với phạm vi 20 bit.
-mno-lsim
Giả sử rằng hỗ trợ thời gian chạy đã được cung cấp và do đó không cần bao gồm
thư viện giả lập (libsim.a) trên dòng lệnh trình liên kết.
cuộc sống Các lựa chọn
-mgpr-32
Chỉ sử dụng 32 thanh ghi mục đích chung đầu tiên.
-mgpr-64
Sử dụng tất cả 64 thanh ghi mục đích chung.
-mfpr-32
Chỉ sử dụng 32 thanh ghi dấu phẩy động đầu tiên.
-mfpr-64
Sử dụng tất cả 64 thanh ghi dấu phẩy động.
-mhard-phao
Sử dụng hướng dẫn phần cứng cho các hoạt động dấu phẩy động.
-msoft-phao
Sử dụng các thủ tục thư viện cho các phép toán dấu phẩy động.
-malloc-cc
Cấp phát động các thanh ghi mã điều kiện.
-mfixed-cc
Đừng cố gắng cấp phát động các thanh ghi mã điều kiện, chỉ sử dụng "icc0" và
"fcc0".
-mdword
Thay đổi ABI để sử dụng các từ kép.
-mno-dword
Không sử dụng hướng dẫn từ kép.
-mđôi
Sử dụng hướng dẫn kép dấu phẩy động.
-mno-gấp đôi
Không sử dụng các lệnh kép dấu phẩy động.
-mmedia
Sử dụng hướng dẫn phương tiện.
-mno-media
Không sử dụng hướng dẫn phương tiện truyền thông.
-mmuladd
Sử dụng hướng dẫn nhân và cộng / trừ.
-mno-muladd
Không sử dụng lệnh nhân và cộng / trừ.
-mfdpic
Chọn FDPIC ABI, sử dụng các bộ mô tả chức năng để biểu diễn các con trỏ tới
chức năng. Không có bất kỳ tùy chọn nào liên quan đến PIC / PIE, nó ngụ ý -fPIE. Với -fpic or
-fpie, nó giả định các mục nhập GOT và dữ liệu nhỏ nằm trong phạm vi 12 bit từ GOT
địa chỉ cơ sở; với -fPIC or -fPIE, Hiệu số GOT được tính bằng 32 bit. Với một
yêu tinh mục tiêu, tùy chọn này ngụ ý -msim.
-minline-plt
Bật nội dòng của các mục PLT trong các lệnh gọi hàm đến các hàm chưa được biết đến
ràng buộc cục bộ. Nó không có tác dụng nếu không có -mfdpic. Nó được bật theo mặc định nếu
tối ưu hóa tốc độ và biên dịch cho các thư viện được chia sẻ (ví dụ: -fPIC or -fpic), hoặc là
khi một tùy chọn tối ưu hóa chẳng hạn như -O3 hoặc ở trên có trong dòng lệnh.
-mTLS
Giả sử một phân đoạn TLS lớn khi tạo mã cục bộ luồng.
-mtls
Không giả sử một phân đoạn TLS lớn khi tạo mã cục bộ luồng.
-mgprel-ro
Cho phép sử dụng các vị trí "GPREL" trong FDPIC ABI cho dữ liệu được biết là có trong
phần chỉ đọc. Nó được bật theo mặc định, ngoại trừ -fpic or -fpie: Mặc dù
nó có thể giúp làm cho bảng bù toàn cục nhỏ hơn, nó giao dịch 1 lệnh cho 4. Với
-fPIC or -fPIE, nó giao dịch 3 hướng dẫn cho 4, một trong số đó có thể được chia sẻ bởi nhiều
và nó tránh được sự cần thiết của mục nhập GOT cho biểu tượng được tham chiếu, vì vậy nó
nhiều khả năng là một chiến thắng. Nếu không phải vậy, -mno-gprel-ro có thể được sử dụng để vô hiệu hóa nó.
-multilib-thư viện-pic
Liên kết với (thư viện, không phải FD) các thư viện pic. Nó được ngụ ý bởi -mlibrary-pic, cũng
Như bởi -fPIC và -fpic không có -mfdpic. Bạn không bao giờ phải sử dụng nó một cách rõ ràng.
-mlinked-fp
Tuân theo yêu cầu của EABI về việc luôn tạo một con trỏ khung bất cứ khi nào một khung ngăn xếp
được phân bổ. Tùy chọn này được bật theo mặc định và có thể bị tắt bằng
-mno-liên kết-fp.
-các cuộc gọi dài
Sử dụng cách định địa chỉ gián tiếp để gọi các hàm bên ngoài đơn vị biên dịch hiện tại. Cái này
cho phép các chức năng được đặt ở bất kỳ đâu trong không gian địa chỉ 32-bit.
-malign-nhãn
Cố gắng căn chỉnh các nhãn thành ranh giới 8 byte bằng cách chèn các NOP vào gói trước.
Tùy chọn này chỉ có hiệu lực khi tính năng đóng gói VLIW được bật. Nó không tạo mới
gói tin; nó chỉ thêm NOP vào những cái hiện có.
-mlibrary-pic
Tạo mã EABI không phụ thuộc vào vị trí.
-macc-4
Chỉ sử dụng bốn thanh ghi bộ tích lũy phương tiện đầu tiên.
-macc-8
Sử dụng tất cả tám thanh ghi bộ tích lũy phương tiện.
-mpack
Gói hướng dẫn VLIW.
-mno-gói
Không đóng gói các hướng dẫn VLIW.
-mno-eflags
Không đánh dấu công tắc ABI trong e_flags.
-mcond-di chuyển
Cho phép sử dụng hướng dẫn di chuyển có điều kiện (mặc định).
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-mno-cond-di chuyển
Vô hiệu hóa việc sử dụng hướng dẫn di chuyển có điều kiện.
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-mscc
Cho phép sử dụng các hướng dẫn đặt có điều kiện (mặc định).
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-mno-scc
Vô hiệu hóa việc sử dụng các hướng dẫn đặt có điều kiện.
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-mcond-executive
Cho phép sử dụng thực thi có điều kiện (mặc định).
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-mno-cond-executive
Vô hiệu hóa việc sử dụng thực thi có điều kiện.
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-mvliw-chi nhánh
Chạy một đường chuyền để đóng gói các nhánh vào hướng dẫn VLIW (mặc định).
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-mno-vliw-chi nhánh
Không chạy vượt qua để đóng gói các nhánh vào hướng dẫn VLIW.
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-multi-cond-executive
Bật tối ưu hóa "&&" và "||" trong thực thi có điều kiện (mặc định).
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-mno-multi-cond-executive
Tắt tối ưu hóa "&&" và "||" trong thực thi có điều kiện.
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-mnested-cond-executive
Bật tối ưu hóa thực thi có điều kiện lồng nhau (mặc định).
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-mno-nested-cond-executive
Tắt tối ưu hóa thực thi có điều kiện lồng nhau.
Công tắc này chủ yếu để gỡ lỗi trình biên dịch và có thể sẽ bị xóa trong
phiên bản tương lai.
-moptimize-thành viên
Công tắc này loại bỏ các hướng dẫn "membar" thừa khỏi mã do trình biên dịch tạo.
Nó được bật theo mặc định.
-mno-tối ưu hóa-ghi nhớ
Công tắc này vô hiệu hóa tính năng tự động xóa các hướng dẫn "membar" thừa khỏi
mã được tạo.
-mtomcat-thống kê
Nguyên nhân khí để in ra số liệu thống kê tomcat.
-mcpu =cpu
Chọn loại bộ xử lý để tạo mã. Giá trị có thể là bạn trai, fr550,
mèo đực, fr500, fr450, fr405, fr400, fr300 và đơn giản.
GNU / Linux Các lựa chọn
Kia là -m các tùy chọn được xác định cho các mục tiêu GNU / Linux:
-mglibc
Sử dụng thư viện GNU C. Đây là mặc định ngoại trừ bật * - * - linux- * uclibc * và
* - * - linux- * android * mục tiêu.
-muclibc
Sử dụng thư viện C uClibc. Đây là mặc định trên * - * - linux- * uclibc * mục tiêu.
-môi trường
Sử dụng thư viện Bionic C. Đây là mặc định trên * - * - linux- * android * mục tiêu.
-mandroid
Biên dịch mã tương thích với nền tảng Android. Đây là mặc định trên
* - * - linux- * android * mục tiêu.
Khi biên dịch, tùy chọn này cho phép -môi trường, -fPIC, -không có ngoại lệ và -fno-rtti by
vỡ nợ. Khi liên kết, tùy chọn này làm cho trình điều khiển GCC vượt qua các tùy chọn dành riêng cho Android
tới trình liên kết. Cuối cùng, tùy chọn này làm cho macro bộ xử lý trước "__ANDROID__" là
xác định.
-tno-android-cc
Tắt hiệu ứng biên dịch của -mandroid, tức là, không bật -môi trường, -fPIC,
-không có ngoại lệ và -fno-rtti theo mặc định.
-tno-android-ld
Tắt hiệu ứng liên kết của -mandroid, tức là, chuyển các tùy chọn liên kết Linux tiêu chuẩn đến
trình liên kết.
H8 / 300 Các lựa chọn
Kia là -m các tùy chọn được xác định cho việc triển khai H8 / 300:
-mthư giãn
Rút ngắn một số tham chiếu địa chỉ tại thời điểm liên kết, khi có thể; sử dụng tùy chọn trình liên kết
-thư giãn.
-ừm Tạo mã cho H8 / 300H.
-bệnh đa xơ cứng Tạo mã cho H8S.
-mn Tạo mã cho H8S và H8 / 300H ở chế độ bình thường. Công tắc này phải được sử dụng
hoặc với -ừm or -bệnh đa xơ cứng.
-ms2600
Tạo mã cho H8S / 2600. Công tắc này phải được sử dụng với -bệnh đa xơ cứng.
-mexr
Thanh ghi mở rộng được lưu trữ trên ngăn xếp trước khi thực thi chức năng với màn hình
thuộc tính. Tùy chọn mặc định là -mexr. Tùy chọn này chỉ hợp lệ cho các mục tiêu H8S.
-mno-exr
Thanh ghi mở rộng không được lưu trữ trên ngăn xếp trước khi thực thi chức năng với màn hình
thuộc tính. Tùy chọn mặc định là -mno-exr. Tùy chọn này chỉ hợp lệ cho các mục tiêu H8S.
-bạc hà32
Đặt dữ liệu "int" 32 bit theo mặc định.
-ác tính-300
Trên H8 / 300H và H8S, sử dụng các quy tắc căn chỉnh tương tự như đối với H8 / 300. Mặc định
đối với H8 / 300H và H8S là để căn chỉnh độ dài và nổi trên ranh giới 4 byte.
-ác tính-300 khiến chúng được căn chỉnh trên các ranh giới 2 byte. Tùy chọn này không có hiệu lực
trên H8 / 300.
HPPA Các lựa chọn
Kia là -m các tùy chọn được xác định cho dòng máy tính HPPA:
-march =kiểu kiến trúc
Tạo mã cho kiến trúc được chỉ định. Các lựa chọn cho kiểu kiến trúc đang
1.0 cho PA 1.0, 1.1 cho PA 1.1 và 2.0 cho bộ xử lý PA 2.0. Tham khảo
/usr/lib/sched.models trên hệ thống HP-UX để xác định tùy chọn kiến trúc phù hợp
cho máy của bạn. Mã được biên dịch cho các kiến trúc được đánh số thấp hơn chạy trên cao hơn
kiến trúc được đánh số, nhưng không phải ngược lại.
-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Từ đồng nghĩa với -march = 1.0, -march = 1.1và -march = 2.0 tương ứng.
-mbig-switch
Tạo mã phù hợp cho các bảng chuyển đổi lớn. Chỉ sử dụng tùy chọn này nếu
trình lắp ráp / liên kết phàn nàn về các nhánh nằm ngoài phạm vi trong bảng chuyển đổi.
-mjump-in-delay
Lấp đầy các khoảng thời gian trễ của các lệnh gọi hàm bằng các lệnh nhảy vô điều kiện bằng cách sửa đổi
con trỏ trả về cho lệnh gọi hàm là đích của bước nhảy có điều kiện.
-mdisable-fpregs
Ngăn không cho các thanh ghi dấu phẩy động được sử dụng theo bất kỳ cách nào. Điều này là cần thiết cho
biên dịch các hạt nhân thực hiện chuyển đổi ngữ cảnh lười biếng của các thanh ghi dấu phẩy động. Nếu như
bạn sử dụng tùy chọn này và cố gắng thực hiện các phép toán dấu phẩy động, trình biên dịch
phá thai.
-mdisable-lập chỉ mục
Ngăn trình biên dịch sử dụng các chế độ địa chỉ lập chỉ mục. Điều này tránh một số
các vấn đề khó hiểu khi biên dịch mã được tạo MIG trong MACH.
-mno-space-reg
Tạo mã giả sử đích không có thanh ghi khoảng trắng. Điều này cho phép GCC
tạo ra các cuộc gọi gián tiếp nhanh hơn và sử dụng các chế độ địa chỉ chỉ mục chưa phân cấp.
Mã như vậy phù hợp với các hệ thống và hạt nhân PA cấp 0.
-các cuộc gọi nhanh-gián tiếp
Tạo mã giả sử các cuộc gọi không bao giờ vượt qua ranh giới không gian. Điều này cho phép GCC
phát ra mã thực hiện các cuộc gọi gián tiếp nhanh hơn.
Tùy chọn này không hoạt động khi có các thư viện được chia sẻ hoặc các hàm lồng nhau.
-mfixed-range =phạm vi đăng ký
Tạo mã coi phạm vi thanh ghi đã cho là thanh ghi cố định. Một thanh ghi cố định
là một trong đó bộ cấp phát thanh ghi không thể sử dụng. Điều này rất hữu ích khi biên dịch hạt nhân
mã số. Một dải thanh ghi được chỉ định là hai thanh ghi cách nhau bằng dấu gạch ngang. Nhiều
phạm vi đăng ký có thể được chỉ định cách nhau bằng dấu phẩy.
-mlong-tải-cửa hàng
Tạo tải 3 lệnh và lưu trữ chuỗi theo yêu cầu của HP-UX 10 đôi khi
trình liên kết. Điều này tương đương với +k tùy chọn cho trình biên dịch HP.
-mportable-thời gian chạy
Sử dụng các quy ước gọi di động do HP đề xuất cho hệ thống ELF.
-mgas
Cho phép sử dụng chỉ thị trình hợp dịch mà chỉ GAS mới hiểu.
-mschedule =loại cpu
Lập lịch mã theo các ràng buộc cho loại máy loại cpu. Những sự lựa chọn
cho loại cpu đang 700 7100, 7100LC, 7200, 7300 và 8000. Tham khảo
/usr/lib/sched.models trên hệ thống HP-UX để xác định tùy chọn lập lịch phù hợp cho
máy của bạn. Lập lịch mặc định là 8000.
-mlinker-opt
Bật thẻ tối ưu hóa trong trình liên kết HP-UX. Lưu ý rằng điều này làm cho gỡ lỗi tượng trưng
Không thể nào. Nó cũng gây ra lỗi trong trình liên kết HP-UX 8 và HP-UX 9 mà chúng
đưa ra thông báo lỗi không có thật khi liên kết một số chương trình.
-msoft-phao
Tạo đầu ra chứa các lệnh gọi thư viện cho dấu phẩy động. Cảnh báo: điều kiện tiên quyết
thư viện không có sẵn cho tất cả các mục tiêu HPPA. Thông thường các cơ sở của
trình biên dịch C thông thường của máy được sử dụng, nhưng điều này không thể được thực hiện trực tiếp trong cross-
biên dịch. Bạn phải tự sắp xếp để cung cấp thư viện phù hợp
các chức năng để biên dịch chéo.
-msoft-phao thay đổi quy ước gọi trong tệp đầu ra; do đó, nó chỉ là
hữu ích nếu bạn biên dịch tất cả các của một chương trình có tùy chọn này. Đặc biệt, bạn cần
biên dịch libgcc.a, thư viện đi kèm với GCC, với -msoft-phao để làm điều này
để làm việc.
-msio
Tạo định nghĩa trước, "_SIO", cho IO máy chủ. Mặc định là -mwsio. Điều này tạo ra
các định nghĩa trước, "__hp9000s700", "__hp9000s700__" và "_WSIO", cho máy trạm IO.
Các tùy chọn này có sẵn trong HP-UX và HI-UX.
-mgnu-ld
Sử dụng các tùy chọn dành riêng cho GNU ld. Điều này vượt qua -chia sẻ đến ld khi xây dựng một chia sẻ
thư viện. Nó là mặc định khi GCC được định cấu hình, rõ ràng hoặc ẩn, với
Trình liên kết GNU. Tùy chọn này không ảnh hưởng đến ld được gọi là; nó chỉ thay đổi những gì
các tham số được chuyển cho cái đó ld. Các ld cái được gọi là được xác định bởi
--với-ld tùy chọn cấu hình, đường dẫn tìm kiếm chương trình của GCC và cuối cùng là của người dùng PATH.
Trình liên kết được GCC sử dụng có thể được in bằng cái nào `gcc -print-prog-name = ld`. Điều này
tùy chọn chỉ khả dụng trên HP-UX GCC 64-bit, tức là được định cấu hình với
hppa * 64 * - * - hpux *.
-mhp-ld
Sử dụng các tùy chọn dành riêng cho HP ld. Điều này vượt qua -b đến ld khi xây dựng một thư viện chia sẻ
và vượt qua + Chấp nhận Loại không phù hợp đến ld trên tất cả các liên kết. Nó là mặc định khi GCC là
được định cấu hình, rõ ràng hoặc ngầm định, với trình liên kết HP. Tùy chọn này không ảnh hưởng
cái nào ld được gọi là; nó chỉ thay đổi những thông số nào được truyền cho cái đó ld. Các ld
cái được gọi là được xác định bởi --với-ld tùy chọn cấu hình, tìm kiếm chương trình của GCC
đường dẫn và cuối cùng là của người dùng PATH. Trình liên kết được GCC sử dụng có thể được in bằng
cái nào `gcc -print-prog-name = ld`. Tùy chọn này chỉ khả dụng trên HP-UX 64-bit
GCC, tức là được định cấu hình với hppa * 64 * - * - hpux *.
-các cuộc gọi dài
Tạo mã sử dụng chuỗi cuộc gọi dài. Điều này đảm bảo rằng một cuộc gọi luôn có thể
để tiếp cận các sơ khai do trình liên kết tạo. Mặc định là chỉ tạo các cuộc gọi dài khi
khoảng cách từ trang web cuộc gọi đến đầu của chức năng hoặc đơn vị dịch, như
trường hợp này có thể vượt quá giới hạn xác định trước do loại nhánh được sử dụng thiết lập. Các
giới hạn cho các cuộc gọi thông thường là 7,600,000 và 240,000 byte, tương ứng đối với PA 2.0
và kiến trúc PA 1.X. Sibcalls luôn được giới hạn ở 240,000 byte.
Khoảng cách được đo từ đầu các chức năng khi sử dụng
-ffunction-section hoặc khi sử dụng -mgas và -mno-portable-runtime lựa chọn
cùng nhau trong HP-UX với trình liên kết SOM.
Thông thường không mong muốn sử dụng tùy chọn này vì nó làm giảm hiệu suất. Tuy vậy,
nó có thể hữu ích trong các ứng dụng lớn, đặc biệt khi liên kết một phần được sử dụng để
xây dựng ứng dụng.
Các loại cuộc gọi dài được sử dụng phụ thuộc vào khả năng của trình lắp ráp và trình liên kết,
và loại mã được tạo. Tác động đến hệ thống hỗ trợ lâu dài
các lệnh gọi tuyệt đối và các lệnh gọi ký hiệu pic dài hoặc các lệnh gọi liên quan đến máy tính phải là
mối quan hệ nhỏ. Tuy nhiên, một cuộc gọi gián tiếp được sử dụng trên các hệ thống ELF 32-bit trong mã pic
và nó khá dài.
-munix =unix-std
Tạo các định nghĩa trước của trình biên dịch và chọn một tệp khởi động cho tiêu chuẩn UNIX được chỉ định.
Các lựa chọn cho unix-std đang 93, 95 và 98. 93 được hỗ trợ trên tất cả các phiên bản HP-UX.
95 có sẵn trên HP-UX 10.10 trở lên. 98 có sẵn trên HP-UX 11.11 trở lên.
Các giá trị mặc định là 93 cho HP-UX 10.00, 95 cho HP-UX 10.10 mặc dù đến 11.00 và 98
dành cho HP-UX 11.11 trở lên.
-munix = 93 cung cấp các định nghĩa trước giống như GCC 3.3 và 3.4. -munix = 95 cung cấp
các định nghĩa trước bổ sung cho "XOPEN_UNIX" và "_XOPEN_SOURCE_EXTENDED" và startfile
unix95.o. -munix = 98 cung cấp các định nghĩa trước bổ sung cho "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" và "_INCLUDE_XOPEN_SOURCE_500",
và startfile unix98.o.
Đó là quan trọng lưu ý rằng tùy chọn này thay đổi giao diện cho các thư viện khác nhau
các thói quen. Nó cũng ảnh hưởng đến hành vi hoạt động của thư viện C. Vì vậy, cực
sự cẩn thận là cần thiết khi sử dụng tùy chọn này.
Mã thư viện được thiết kế để hoạt động với nhiều hơn một tiêu chuẩn UNIX phải kiểm tra,
thiết lập và khôi phục biến __xpg4_extends_mask sao cho phù hợp. Hầu hết phần mềm GNU
không cung cấp khả năng này.
-nolibdld
Ngăn chặn việc tạo các tùy chọn liên kết để tìm kiếm libdld.sl khi -mặt đứng Tùy chọn là
được chỉ định trên HP-UX 10 trở lên.
-mặt đứng
Việc triển khai HP-UX của setlocale trong libc có sự phụ thuộc vào libdld.sl. Ở đó
không phải là phiên bản lưu trữ của libdld.sl. Do đó, khi -mặt đứng tùy chọn được chỉ định,
các tùy chọn liên kết đặc biệt là cần thiết để giải quyết sự phụ thuộc này.
Trên HP-UX 10 trở lên, trình điều khiển GCC thêm các tùy chọn cần thiết để liên kết với
libdld.sl khi -mặt đứng tùy chọn được chỉ định. Điều này làm cho kết quả nhị phân
năng động. Trên cổng 64-bit, các trình liên kết tạo ra các tệp nhị phân động theo mặc định trong
Mọi tình huống. Các -nolibdld tùy chọn có thể được sử dụng để ngăn trình điều khiển GCC thêm
các tùy chọn liên kết này.
-threads
Thêm hỗ trợ cho đa luồng với dce Chủ đề thư viện dưới HP-UX. Tùy chọn này
đặt cờ cho cả bộ tiền xử lý và bộ liên kết.
Intel 386 và AMD x86-64 Các lựa chọn
Kia là -m các tùy chọn được xác định cho dòng máy tính i386 và x86-64:
-march =loại cpu
Tạo hướng dẫn cho loại máy loại cpu. Trái ngược với -mtune =loại cpu,
chỉ điều chỉnh mã được tạo cho loại cpu, -march =loại cpu
cho phép GCC tạo mã có thể hoàn toàn không chạy trên các bộ xử lý khác với bộ xử lý
chỉ ra. Xác định -march =loại cpu ngụ ý -mtune =loại cpu.
Các lựa chọn cho loại cpu là:
tự nhiên
Thao tác này chọn CPU để tạo mã tại thời điểm biên dịch bằng cách xác định
loại bộ xử lý của máy biên dịch. Sử dụng -march = gốc cho phép tất cả
tập hợp con hướng dẫn được hỗ trợ bởi máy cục bộ (do đó kết quả có thể không chạy
trên các máy khác nhau). Sử dụng -mtune = bản địa tạo ra mã được tối ưu hóa cho địa phương
máy dưới các ràng buộc của tập lệnh đã chọn.
i386
CPU Intel i386 nguyên bản.
i486
CPU Intel i486. (Không có lập lịch nào được triển khai cho chip này.)
i586
pentium
CPU Intel Pentium không hỗ trợ MMX.
pentium-mmx
CPU Intel Pentium MMX, dựa trên lõi Pentium với hỗ trợ tập lệnh MMX.
pentiumpro
CPU Intel Pentium Pro.
i686
Khi sử dụng với -tháng Ba, tập lệnh Pentium Pro được sử dụng, vì vậy mã chạy
trên tất cả các chip gia đình i686. Khi sử dụng với -âm điệu, nó có cùng nghĩa với
chủng loại.
pentium2
CPU Intel Pentium II, dựa trên lõi Pentium Pro với hỗ trợ tập lệnh MMX.
pentium3
pentium3m
CPU Intel Pentium III, dựa trên lõi Pentium Pro với tập lệnh MMX và SSE
hỗ trợ.
pentium-m
Intel Pentium M; phiên bản năng lượng thấp của CPU Intel Pentium III với MMX, SSE và SSE2
hỗ trợ tập hướng dẫn. Được sử dụng bởi máy tính xách tay Centrino.
pentium4
pentium4m
CPU Intel Pentium 4 với hỗ trợ tập lệnh MMX, SSE và SSE2.
Prescott
Phiên bản cải tiến của CPU Intel Pentium 4 với lệnh MMX, SSE, SSE2 và SSE3
thiết lập hỗ trợ.
nocona
Phiên bản cải tiến của CPU Intel Pentium 4 với phần mở rộng 64-bit, MMX, SSE, SSE2 và
Hỗ trợ tập lệnh SSE3.
lõi2
CPU Intel Core 2 với phần mở rộng 64-bit, MMX, SSE, SSE2, SSE3 và SSSE3
hỗ trợ tập hướng dẫn.
lõi7
CPU Intel Core i7 với phần mở rộng 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 và
Hỗ trợ tập lệnh SSE4.2.
corei7-avx
CPU Intel Core i7 với phần mở rộng 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Hỗ trợ tập lệnh SSE4.2, AVX, AES và PCLMUL.
lõi-avx-i
CPU Intel Core với phần mở rộng 64 bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Hỗ trợ tập lệnh SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND và F16C.
lõi-avx2
CPU Intel Core với phần mở rộng 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 và F16C
hỗ trợ tập hướng dẫn.
nguyên tử
CPU Intel Atom với phần mở rộng 64-bit, MOVBE, MMX, SSE, SSE2, SSE3 và SSSE3
hỗ trợ tập hướng dẫn.
k6 CPU AMD K6 với hỗ trợ tập lệnh MMX.
k6-2
k6-3
Các phiên bản cải tiến của CPU AMD K6 với MMX và 3DNow! hỗ trợ tập hướng dẫn.
Athlon
sportslon-tbird
CPU AMD Athlon với MMX, 3dNOW !, nâng cao 3DNow! và hướng dẫn tìm nạp trước SSE
hỗ trợ.
thể thao-4
thể thao-xp
sportslon-mp
Cải tiến CPU AMD Athlon với MMX, 3DNow !, 3DNow nâng cao! và hướng dẫn đầy đủ về SSE
thiết lập hỗ trợ.
k8
quang điện tử
thể thao64
sportslon-fx
Bộ xử lý dựa trên lõi AMD K8 với hỗ trợ tập lệnh x86-64, bao gồm
bộ xử lý AMD Opteron, Athlon 64 và Athlon 64 FX. (Điều này đặt trên MMX,
SSE, SSE2, 3DNow !, 3DNow nâng cao! và phần mở rộng tập lệnh 64-bit.)
k8-sse3
opteron-sse3
Athlon64-sse3
Các phiên bản cải tiến của lõi AMD K8 với hỗ trợ tập lệnh SSE3.
amdfam10
barcelona
CPU dựa trên lõi AMD Family 10h với hỗ trợ tập lệnh x86-64. (Cái này
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow !, nâng cao 3DNow !, ABM và 64-bit
phần mở rộng tập hướng dẫn.)
bdver1
CPU dựa trên lõi AMD Family 15h với hỗ trợ tập lệnh x86-64. (Cái này
các bộ siêu FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
Phần mở rộng tập lệnh SSSE3, SSE4.1, SSE4.2, ABM và 64-bit.)
bdver2
CPU dựa trên lõi AMD Family 15h với hỗ trợ tập lệnh x86-64. (Cái này
bộ siêu BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
Phần mở rộng tập lệnh SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM và 64-bit.)
bdver3
CPU dựa trên lõi AMD Family 15h với hỗ trợ tập lệnh x86-64. (Cái này
bộ siêu BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM và phần mở rộng tập lệnh 64-bit.
btver1
CPU dựa trên lõi AMD Family 14h với hỗ trợ tập lệnh x86-64. (Cái này
tập siêu MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM và tập lệnh 64-bit
phần mở rộng.)
btver2
CPU dựa trên lõi AMD Family 16h với hỗ trợ tập lệnh x86-64. Cái này
bao gồm MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX và phần mở rộng tập lệnh 64-bit.
winchip-c6
IDT WinChip C6 CPU, xử lý theo cách tương tự như i486 với tập lệnh MMX bổ sung
hỗ trợ.
winchip2
IDT WinChip 2 CPU, xử lý giống như i486 với MMX và 3DNow bổ sung!
hỗ trợ tập hướng dẫn.
c3 VIA C3 CPU với MMX và 3DNow! hỗ trợ tập hướng dẫn. (Không có lịch trình là
được triển khai cho chip này.)
c3-2
VIA C3-2 (Nehemiah / C5XL) CPU có hỗ trợ tập lệnh MMX và SSE. (Không
lập lịch được thực hiện cho chip này.)
mã hóa
Bộ xử lý nhúng AMD Geode với MMX và 3DNow! hỗ trợ tập hướng dẫn.
-mtune =loại cpu
Điều chỉnh để loại cpu mọi thứ áp dụng về mã đã tạo, ngoại trừ ABI
và tập hợp các hướng dẫn có sẵn. Trong khi chọn một cụ thể loại cpu lịch trình
những thứ thích hợp cho chip cụ thể đó, trình biên dịch không tạo ra bất kỳ mã nào
không thể chạy trên loại máy mặc định trừ khi bạn sử dụng -march =loại cpu tùy chọn.
Ví dụ: nếu GCC được định cấu hình cho i686-pc-linux-gnu thì -mtune = pentium4 tạo
mã được điều chỉnh cho Pentium 4 nhưng vẫn chạy trên máy i686.
Các lựa chọn cho loại cpu giống như đối với -tháng Ba. Ngoài ra, -âm điệu hỗ trợ một
sự lựa chọn bổ sung cho loại cpu:
chủng loại
Tạo mã được tối ưu hóa cho các bộ xử lý IA32 / AMD64 / EM64T phổ biến nhất. nếu bạn
biết CPU mà mã của bạn sẽ chạy, sau đó bạn nên sử dụng
-âm điệu or -tháng Ba tùy chọn thay vì -mtune = chung chung. Nhưng, nếu bạn không biết
chính xác những gì người dùng CPU của ứng dụng của bạn sẽ có, khi đó bạn nên sử dụng
tùy chọn.
Khi các bộ xử lý mới được triển khai trên thị trường, hành vi của tùy chọn này
sẽ thay đổi. Do đó, nếu bạn nâng cấp lên phiên bản GCC mới hơn, việc tạo mã
được kiểm soát bởi tùy chọn này sẽ thay đổi để phản ánh các bộ xử lý hầu hết
phổ biến tại thời điểm phiên bản GCC đó được phát hành.
Không có -march = generic tùy chọn bởi vì -tháng Ba cho biết hướng dẫn đặt
trình biên dịch có thể sử dụng và không có tập lệnh chung nào áp dụng cho tất cả
bộ vi xử lý. Ngược lại, -âm điệu cho biết bộ xử lý (hoặc, trong trường hợp này,
tập hợp các bộ xử lý) mà mã được tối ưu hóa.
-mcpu =loại cpu
Một từ đồng nghĩa không dùng nữa cho -âm điệu.
-mfpmath =đơn vị
Tạo số học dấu phẩy động cho đơn vị đã chọn đơn vị. Các lựa chọn cho đơn vị là:
387 Sử dụng bộ đồng xử lý dấu phẩy động 387 tiêu chuẩn có mặt trên hầu hết các chip
và mô phỏng theo cách khác. Mã được biên dịch với tùy chọn này chạy hầu như ở khắp mọi nơi.
Các kết quả tạm thời được tính với độ chính xác 80 bit thay vì độ chính xác
được chỉ định bởi loại, dẫn đến kết quả hơi khác so với hầu hết
chip khác. Nhìn thấy -cửa hàng vải thô để biết mô tả chi tiết hơn.
Đây là lựa chọn mặc định cho trình biên dịch i386.
sse Sử dụng các lệnh dấu phẩy động vô hướng có trong tập lệnh SSE. Cái này
tập lệnh được hỗ trợ bởi Pentium III và các chip mới hơn, và trong dòng AMD
bởi các chip Athlon-4, Athlon XP và Athlon MP. Phiên bản trước đó của SSE
tập lệnh chỉ hỗ trợ số học chính xác đơn, do đó kép và
số học chính xác mở rộng vẫn được thực hiện bằng cách sử dụng 387. Một phiên bản mới hơn, hiện tại
chỉ trong chip Pentium 4 và AMD x86-64, cũng hỗ trợ số học chính xác kép.
Đối với trình biên dịch i386, bạn phải sử dụng -march =loại cpu, -msse or -msse2 chuyển sang
bật tiện ích mở rộng SSE và làm cho tùy chọn này hiệu quả. Đối với trình biên dịch x86-64,
các tiện ích mở rộng này được bật theo mặc định.
Mã kết quả phải nhanh hơn đáng kể trong hầu hết các trường hợp và
tránh các vấn đề về số không ổn định của mã 387, nhưng có thể phá vỡ một số
mã dự kiến thời gian tạm thời là 80 bit.
Đây là lựa chọn mặc định cho trình biên dịch x86-64.
sse, 387
sse + 387
cả hai
Cố gắng sử dụng cả hai tập lệnh cùng một lúc. Điều này có hiệu quả tăng gấp đôi
số lượng thanh ghi có sẵn và trên các chip có các đơn vị thực thi riêng biệt cho 387
và SSE các tài nguyên thực thi nữa. Sử dụng tùy chọn này một cách cẩn thận, vì nó vẫn là
thử nghiệm, bởi vì trình cấp phát thanh ghi GCC không mô hình riêng biệt
các đơn vị chức năng hoạt động tốt, dẫn đến hoạt động không ổn định.
-masm =phương ngữ
Đầu ra hướng dẫn lắp ráp bằng cách sử dụng đã chọn phương ngữ. Các lựa chọn được hỗ trợ là intel or
chú ý (mặc định). Darwin không hỗ trợ intel.
-mieee-fp
-mno-ieee-fp
Kiểm soát xem trình biên dịch có sử dụng so sánh dấu phẩy động IEEE hay không. Này
xử lý chính xác trường hợp kết quả của phép so sánh không có thứ tự.
-msoft-phao
Tạo đầu ra chứa các lệnh gọi thư viện cho dấu phẩy động.
Cảnh báo: các thư viện cần thiết không phải là một phần của GCC. Thông thường các cơ sở của
trình biên dịch C thông thường của máy được sử dụng, nhưng điều này không thể được thực hiện trực tiếp trong cross-
biên dịch. Bạn phải tự sắp xếp để cung cấp thư viện phù hợp
các chức năng để biên dịch chéo.
Trên các máy mà một hàm trả về kết quả dấu phẩy động trong thanh ghi 80387
ngăn xếp, một số opcodes dấu phẩy động có thể được phát ra ngay cả khi -msoft-phao Được sử dụng.
-mno-fp-ret-in-387
Không sử dụng các thanh ghi FPU cho các giá trị trả về của các hàm.
Quy ước gọi thông thường có các hàm trả về giá trị kiểu "float" và "double"
trong sổ đăng ký FPU, ngay cả khi không có FPU. Ý tưởng là hệ điều hành
nên mô phỏng một FPU.
Tùy chọn -mno-fp-ret-in-387 khiến các giá trị đó được trả về trong CPU thông thường
đăng ký thay thế.
-mno-ưa-thích-toán-387
Một số trình giả lập 387 không hỗ trợ hướng dẫn "sin", "cos" và "sqrt" cho
387. Chỉ định tùy chọn này để tránh tạo ra các hướng dẫn đó. Tùy chọn này là
mặc định trên FreeBSD, OpenBSD và NetBSD. Tùy chọn này bị ghi đè khi -tháng Ba
chỉ ra rằng CPU mục tiêu luôn có FPU và do đó, lệnh không cần
sự thi đua. Các hướng dẫn này không được tạo trừ khi bạn cũng sử dụng
-funsafe-math-Optimizations công tắc điện.
-ác tính-gấp đôi
-mno-căn chỉnh đôi
Kiểm soát xem GCC có căn chỉnh các biến "kép", "dài kép" và "dài dài" trên một
ranh giới hai từ hoặc ranh giới một từ. Căn chỉnh các biến "kép" trên một hai từ
ranh giới tạo ra mã chạy nhanh hơn một chút trên Pentium với chi phí nhiều hơn
ký ức.
Trên x86-64, -ác tính-gấp đôi được bật theo mặc định.
Cảnh báo: nếu bạn sử dụng -ác tính-gấp đôi công tắc, cấu trúc chứa các loại trên
được căn chỉnh khác với thông số kỹ thuật giao diện nhị phân của ứng dụng đã xuất bản
cho 386 và không tương thích nhị phân với các cấu trúc trong mã được biên dịch mà không có
công tắc đó.
-m96bit-dài-đôi
-m128bit-dài-đôi
Các công tắc này kiểm soát kích thước của loại "dài đôi". Ứng dụng nhị phân i386
giao diện chỉ định kích thước là 96 bit, vì vậy -m96bit-dài-đôi là mặc định trong
Chế độ 32-bit.
Các kiến trúc hiện đại (Pentium và mới hơn) thích "dài đôi" được căn chỉnh thành 8-
hoặc ranh giới 16 byte. Trong các mảng hoặc cấu trúc tuân theo ABI, điều này không
khả thi. Vì vậy, chỉ định -m128bit-dài-đôi căn chỉnh "dài đôi" thành 16 byte
ranh giới bằng cách đệm "dài đôi" với một số không 32 bit bổ sung.
Trong trình biên dịch x86-64, -m128bit-dài-đôi là lựa chọn mặc định làm ABI của nó
chỉ định rằng "dài đôi" được căn chỉnh trên ranh giới 16 byte.
Lưu ý rằng cả hai tùy chọn này đều không cho phép bất kỳ độ chính xác nào vượt quá tiêu chuẩn x87
80 bit cho một "dài đôi".
Cảnh báo: nếu bạn ghi đè giá trị mặc định cho ABI mục tiêu của mình, điều này sẽ thay đổi kích thước
cấu trúc và mảng có chứa biến "dài kép", cũng như sửa đổi
quy ước gọi hàm cho các hàm lấy "dài đôi". Do đó họ không
tương thích nhị phân với mã được biên dịch mà không có công tắc đó.
-mlong-đôi-64
-mlong-đôi-80
Các công tắc này kiểm soát kích thước của loại "dài đôi". Kích thước 64 bit làm cho
loại "dài kép" tương đương với loại "kép". Đây là mặc định cho Bionic C
thư viện.
Cảnh báo: nếu bạn ghi đè giá trị mặc định cho ABI mục tiêu của mình, điều này sẽ thay đổi kích thước
cấu trúc và mảng có chứa biến "dài kép", cũng như sửa đổi
quy ước gọi hàm cho các hàm lấy "dài đôi". Do đó họ không
tương thích nhị phân với mã được biên dịch mà không có công tắc đó.
-mlarge-data-ngưỡng =ngưỡng
Thời Gian -mcmodel = trung bình được chỉ định, các đối tượng dữ liệu lớn hơn ngưỡng được đặt trong
phần dữ liệu lớn. Giá trị này phải giống nhau trên tất cả các đối tượng được liên kết vào
nhị phân và mặc định là 65535.
-mrtd
Sử dụng một quy ước gọi hàm khác, trong đó các hàm cố định
số lượng đối số trả về với "ret num " hướng dẫn, làm bật lên các đối số của họ
trong khi quay trở lại. Điều này sẽ lưu một hướng dẫn trong trình gọi vì không cần phải
đưa các đối số vào đó.
Bạn có thể chỉ định rằng một hàm riêng lẻ được gọi với chuỗi lệnh gọi này với
thuộc tính chức năng cuộc gọi std. Bạn cũng có thể ghi đè -mrtd tùy chọn bằng cách sử dụng
thuộc tính chức năng cdecl.
Cảnh báo: quy ước gọi này không tương thích với quy ước thường được sử dụng trên Unix,
vì vậy bạn không thể sử dụng nó nếu bạn cần gọi các thư viện được biên dịch bằng trình biên dịch Unix.
Ngoài ra, bạn phải cung cấp các nguyên mẫu hàm cho tất cả các hàm có biến
số đối số (bao gồm cả "printf"); nếu không mã không chính xác được tạo ra cho
các lệnh gọi đến các chức năng đó.
Ngoài ra, kết quả mã không chính xác nghiêm trọng nếu bạn gọi một hàm có quá nhiều
tranh luận. (Thông thường, các đối số phụ bị bỏ qua một cách vô hại.)
-mregparm =num
Kiểm soát số lượng thanh ghi được sử dụng để truyền các đối số nguyên. Theo mặc định, không
các thanh ghi được sử dụng để truyền các đối số và có thể sử dụng nhiều nhất 3 thanh ghi. Bạn có thể
kiểm soát hành vi này cho một chức năng cụ thể bằng cách sử dụng thuộc tính chức năng hồi quy.
Cảnh báo: nếu bạn sử dụng công tắc này, và num là nonzero, thì bạn phải xây dựng tất cả các mô-đun
với cùng một giá trị, bao gồm bất kỳ thư viện nào. Điều này bao gồm các thư viện hệ thống và
các mô-đun khởi động.
-msseregparm
Sử dụng quy ước truyền thanh ghi SSE cho các đối số float và double và trả về các giá trị.
Bạn có thể kiểm soát hành vi này cho một chức năng cụ thể bằng cách sử dụng thuộc tính chức năng
seregparm.
Cảnh báo: nếu bạn sử dụng công tắc này thì bạn phải xây dựng tất cả các mô-đun có cùng giá trị,
bao gồm bất kỳ thư viện nào. Điều này bao gồm các thư viện hệ thống và các mô-đun khởi động.
-mvect8-ret-in-mem
Trả về vectơ 8 byte trong bộ nhớ thay vì thanh ghi MMX. Đây là mặc định trên
Solaris @ tie {} 8 và 9 và VxWorks để khớp với các trình biên dịch ABI của Sun Studio cho đến khi
phiên bản 12. Các phiên bản trình biên dịch mới hơn (bắt đầu với Studio 12 Update @ tie {} 1) tuân theo
ABI được sử dụng bởi các mục tiêu x86 khác, là mục tiêu mặc định trên Solaris @ tie {} 10 trở lên.
Chỉ có sử dụng tùy chọn này nếu bạn cần duy trì tương thích với mã hiện có do
các phiên bản trình biên dịch trước đó hoặc các phiên bản cũ hơn của GCC.
-mpc32
-mpc64
-mpc80
Đặt độ chính xác dấu phẩy động 80387 thành 32, 64 hoặc 80 bit. Khi nào -mpc32 được quy định,
ý nghĩa của các kết quả của phép toán dấu phẩy động được làm tròn thành 24 bit
(Độ chính xác đơn); -mpc64 làm tròn ý nghĩa và kết quả của dấu phẩy động
hoạt động đến 53 bit (độ chính xác gấp đôi) và -mpc80 làm tròn ý nghĩa và kết quả
của các phép toán dấu phẩy động đến 64 bit (độ chính xác kép mở rộng), là
vỡ nợ. Khi tùy chọn này được sử dụng, các phép toán dấu phẩy động trong các khu vực chính xác cao hơn được
không có sẵn cho người lập trình nếu không đặt từ điều khiển FPU một cách rõ ràng.
Đặt làm tròn các phép toán dấu phẩy động thành nhỏ hơn 80 bit mặc định có thể
tăng tốc một số chương trình từ 2% trở lên. Lưu ý rằng một số thư viện toán học giả định rằng
Các hoạt động dấu phẩy động có độ chính xác mở rộng (80-bit) được bật theo mặc định; thói quen
trong những thư viện như vậy có thể bị mất độ chính xác đáng kể, thường là do-
được gọi là "hủy thảm khốc", khi tùy chọn này được sử dụng để đặt độ chính xác thành
nhỏ hơn độ chính xác mở rộng.
-mstackrealalign
Sắp xếp lại ngăn xếp lúc nhập. Trên Intel x86, -mstackrealalign tùy chọn tạo ra một
phần mở đầu và phần kết xen kẽ giúp sắp xếp lại ngăn xếp thời gian chạy nếu cần. Cái này
hỗ trợ trộn các mã kế thừa giữ liên kết ngăn xếp 4 byte với các mã hiện đại
giữ căn chỉnh ngăn xếp 16 byte để tương thích với SSE. Xem thêm thuộc tính
"force_align_arg_pointer", áp dụng cho các chức năng riêng lẻ.
-mpreferred-stack-ranh giới =num
Cố gắng giữ cho đường biên ngăn xếp được căn chỉnh thành 2 được nâng lên num ranh giới byte. Nếu như
-mpreferred-stack-ranh giới không được chỉ định, mặc định là 4 (16 byte hoặc 128 bit).
Cảnh báo: Khi tạo mã cho kiến trúc x86-64 với phần mở rộng SSE
tàn tật, -mpreferred-stack-border = 3 có thể được sử dụng để giữ cho ranh giới ngăn xếp được căn chỉnh
đến ranh giới 8 byte. Vì x86-64 ABI yêu cầu căn chỉnh ngăn xếp 16 byte, đây là ABI
không tương thích và được sử dụng trong môi trường được kiểm soát, nơi có không gian ngăn xếp
hạn chế quan trọng. Tùy chọn này sẽ dẫn đến mã sai khi các hàm được biên dịch
với căn chỉnh ngăn xếp 16 byte (chẳng hạn như các hàm từ thư viện tiêu chuẩn) được gọi là
với ngăn xếp bị lệch. Trong trường hợp này, các lệnh SSE có thể dẫn đến bộ nhớ bị lệch
bẫy truy cập. Ngoài ra, các đối số biến sẽ được xử lý không chính xác cho 16 byte
các đối tượng được căn chỉnh (bao gồm x87 dài đôi và __int128), dẫn đến kết quả sai.
Bạn phải xây dựng tất cả các mô-đun với -mpreferred-stack-border = 3, bao gồm bất kỳ thư viện nào.
Điều này bao gồm các thư viện hệ thống và các mô-đun khởi động.
-mincoming-stack-ranh giới =num
Giả sử ngăn xếp đến được căn chỉnh thành 2 được nâng lên num ranh giới byte. Nếu như
-mincoming-stack-ranh giới không được chỉ định, cái được chỉ định bởi
-mpreferred-stack-ranh giới Được sử dụng.
Trên Pentium và Pentium Pro, các giá trị "gấp đôi" và "dài kép" phải được căn chỉnh thành
Ranh giới 8 byte (xem -ác tính-gấp đôi) hoặc chịu hiệu suất thời gian chạy đáng kể
các hình phạt. Trên Pentium III, kiểu dữ liệu Mở rộng SIMD trực tuyến (SSE) "__m128" có thể
không hoạt động bình thường nếu nó không được căn chỉnh 16 byte.
Để đảm bảo sự liên kết thích hợp của các giá trị này trên ngăn xếp, ranh giới ngăn xếp phải như
được căn chỉnh theo yêu cầu của bất kỳ giá trị nào được lưu trữ trên ngăn xếp. Hơn nữa, mọi chức năng
phải được tạo sao cho nó giữ cho ngăn xếp được căn chỉnh. Do đó, việc gọi một hàm
được biên dịch với ranh giới ngăn xếp ưu tiên cao hơn từ một hàm được biên dịch với
ranh giới ngăn xếp ưu tiên rất có thể sắp xếp sai ngăn xếp. Khuyên rằng
các thư viện sử dụng lệnh gọi lại luôn sử dụng cài đặt mặc định.
Căn chỉnh bổ sung này tiêu tốn thêm không gian ngăn xếp và thường làm tăng mã
kích thước. Mã nhạy cảm với việc sử dụng không gian ngăn xếp, chẳng hạn như hệ thống nhúng và
hạt nhân hệ điều hành, có thể muốn giảm căn chỉnh ưu tiên thành
-mpreferred-stack-border = 2.
-mmx
-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
-mẹ
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-mrdrnd
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxốp
-mno-xốp
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-mừm
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mrtm
-mtbm
-mno-tbm
Các công tắc này bật hoặc tắt việc sử dụng các hướng dẫn trong MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT, RTM hoặc 3DNow! các tập lệnh mở rộng. Này
các phần mở rộng cũng có sẵn dưới dạng các chức năng tích hợp: xem X86 Built-in Chức năng, Cho
chi tiết về các chức năng được bật và tắt bởi các công tắc này.
Để tự động tạo các lệnh SSE / SSE2 từ mã dấu phẩy động (ngược lại
đến 387 hướng dẫn), xem -mfpmath = sse.
GCC giải nén hướng dẫn SSEx khi -mavx Được sử dụng. Thay vào đó, nó tạo AVX mới
hướng dẫn hoặc tương đương AVX cho tất cả các lệnh SSEx khi cần thiết.
Các tùy chọn này cho phép GCC sử dụng các hướng dẫn mở rộng này trong mã được tạo, thậm chí
không có -mfpmath = sse. Các ứng dụng thực hiện phát hiện CPU trong thời gian chạy phải biên dịch
các tệp riêng biệt cho từng kiến trúc được hỗ trợ, sử dụng các cờ thích hợp. Trong
đặc biệt, tệp chứa mã phát hiện CPU phải được biên dịch mà không
các tùy chọn này.
-mcld
Tùy chọn này hướng dẫn GCC phát ra lệnh "cld" trong phần mở đầu của các hàm
sử dụng hướng dẫn chuỗi. Hướng dẫn chuỗi phụ thuộc vào cờ DF để chọn
giữa chế độ autoincrement hoặc autodecrement. Trong khi ABI chỉ định cờ DF để
được xóa khi nhập chức năng, một số hệ điều hành vi phạm đặc điểm kỹ thuật này bằng cách không
xóa cờ DF trong bộ điều phối ngoại lệ của họ. Trình xử lý ngoại lệ có thể là
được gọi với bộ cờ DF, dẫn đến chế độ hướng sai khi chuỗi
hướng dẫn được sử dụng. Tùy chọn này có thể được bật theo mặc định trên các mục tiêu 32-bit x86 bằng cách
cấu hình GCC với --enable-cld tùy chọn cấu hình. Thế hệ "cld"
hướng dẫn có thể bị chặn với -mno-cld tùy chọn trình biên dịch trong trường hợp này.
-mvzeroupper
Tùy chọn này hướng dẫn GCC phát ra lệnh "vzeroupper" trước khi chuyển
kiểm soát luồng ra khỏi chức năng để giảm thiểu hình phạt chuyển đổi AVX sang SSE cũng như
như loại bỏ nội dung "zeroupper" không cần thiết.
-mprefer-avx128
Tùy chọn này hướng dẫn GCC sử dụng hướng dẫn AVX 128 bit thay vì AVX 256 bit
hướng dẫn trong công cụ vẽ vectơ tự động.
-mcx16
Tùy chọn này cho phép GCC tạo hướng dẫn "CMPXCHG16B". "CMPXCHG16B" cho phép
cho các phép toán nguyên tử trên các kiểu dữ liệu từ kép 128 bit (hoặc oword). Đây là
hữu ích cho các bộ đếm độ phân giải cao có thể được cập nhật bởi nhiều bộ xử lý (hoặc
lõi). Hướng dẫn này được tạo ra như một phần của các hàm tích hợp nguyên tử: xem
__đồng bộ hóa Nội trang or __nguyên tử Nội trang để biết thêm chi tiết.
-msahf
Tùy chọn này cho phép tạo các lệnh "SAHF" trong mã 64-bit. Intel sơ khai
Các CPU Pentium 4 có hỗ trợ Intel 64, trước khi bước vào Pentium 4 G1
vào tháng 2005 năm XNUMX, thiếu các hướng dẫn "LAHF" và "SAHF" được hỗ trợ bởi
AMD64. Đây là các hướng dẫn tải và lưu trữ, tương ứng, đối với các cờ trạng thái nhất định.
Ở chế độ 64 bit, lệnh "SAHF" được sử dụng để tối ưu hóa "fmod", "drem" và
chức năng tích hợp sẵn "phần còn lại"; Thấy chưa Nền tảng khác Nội trang để biết thêm chi tiết.
-mmovbe
Tùy chọn này cho phép sử dụng hướng dẫn "movbe" để triển khai "__builtin_bswap32"
và "__builtin_bswap64".
-mcrc32
Tùy chọn này cho phép các chức năng tích hợp sẵn "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" và "__builtin_ia32_crc32di" tới
tạo ra lệnh máy "crc32".
-đề nghị
Tùy chọn này cho phép sử dụng hướng dẫn "RCPSS" và "RSQRTSS" (và
biến thể "RCPPS" và "RSQRTPS") với một bước Newton-Raphson bổ sung để tăng
độ chính xác thay vì "DIVSS" và "SQRTSS" (và các biến thể được vector hóa của chúng) cho đơn-
đối số dấu phẩy động chính xác. Các hướng dẫn này chỉ được tạo khi
-funsafe-math-Optimizations được kích hoạt cùng với -finite-toán-chỉ và
-fno-bẫy-toán học. Lưu ý rằng mặc dù thông lượng của chuỗi cao hơn
thông lượng của lệnh không tương hỗ, độ chính xác của chuỗi có thể
giảm tối đa 2 ulp (nghĩa là nghịch đảo của 1.0 bằng 0.99999994).
Lưu ý rằng GCC triển khai "1.0f / sqrtf (NS)" về mặt "RSQRTSS" (hoặc "RSQRTPS") đã
với -ffast-toán (hoặc kết hợp tùy chọn ở trên) và không cần -đề nghị.
Cũng lưu ý rằng GCC phát ra chuỗi trên với bước Newton-Raphson bổ sung cho
vectơ phân chia một float đơn và vectơ hóa "sqrtf (NS)" đã có -ffast-toán
(hoặc kết hợp tùy chọn ở trên) và không cần -đề nghị.
-mrecip =opt
Tùy chọn này kiểm soát hướng dẫn ước tính đối ứng nào có thể được sử dụng. opt là một
danh sách các tùy chọn được phân tách bằng dấu phẩy, có thể đứng trước ! để đảo ngược tùy chọn:
tất cả các Bật tất cả các hướng dẫn ước tính.
mặc định
Bật các hướng dẫn mặc định, tương đương với -đề nghị.
không ai
Tắt tất cả các hướng dẫn ước tính, tương đương với -mno-người nhận.
div Cho phép tính gần đúng cho phép chia vô hướng.
vec-div
Cho phép tính gần đúng cho phép chia được vector hóa.
câu hỏi
Cho phép tính gần đúng cho căn bậc hai vô hướng.
vec-sqrt
Cho phép tính gần đúng cho căn bậc hai được vectơ hóa.
Ví dụ, -mrecip = all,! sqrt cho phép tất cả các giá trị xấp xỉ đối ứng,
ngoại trừ căn bậc hai.
-mveclibabi =kiểu
Chỉ định loại ABI để sử dụng cho vectơ bản chất bằng cách sử dụng thư viện bên ngoài.
Các giá trị được hỗ trợ cho kiểu đang svml cho thư viện toán học vectơ ngắn của Intel và acml
cho thư viện lõi toán học AMD. Để sử dụng tùy chọn này, cả hai -vectơ hóa miễn phí và
-funsafe-math-Optimizations phải được bật và tương thích với SVML hoặc ACML ABI
thư viện phải được chỉ định tại thời gian liên kết.
GCC hiện phát lệnh gọi tới "vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102",
"vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2",
"vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2",
"vmldAcosh2", "vmldAcos2", "vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104",
"vmlsPow4", "vmlsTanh4", "vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4",
"vmlsSinh4", "vmlsSin4", "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4",
"vmlsAcosh4" và "vmlsAcos4" cho loại hàm tương ứng khi -mveclibabi = svml is
đã sử dụng và "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
"__vrs4_log2f", "__vrs4_log10f" và "__vrs4_powf" cho loại hàm tương ứng
khi nào -mveclibabi = acml Được sử dụng.
-mabi =tên
Tạo mã cho quy ước gọi được chỉ định. Giá trị cho phép là sysv cho
ABI được sử dụng trên GNU / Linux và các hệ thống khác, và ms cho ABI của Microsoft. Các
mặc định là sử dụng Microsoft ABI khi nhắm mục tiêu Microsoft Windows và SysV ABI
trên tất cả các hệ thống khác. Bạn có thể kiểm soát hành vi này cho một chức năng cụ thể bằng cách sử dụng
thuộc tính chức năng ms_abi/sysv_abi.
-mtls-phương ngữ =kiểu
Tạo mã để truy cập bộ nhớ cục bộ chuỗi bằng cách sử dụng dê rừng or gnu2 các quy ước. dê rừng
là mặc định bảo thủ; gnu2 hiệu quả hơn, nhưng nó có thể thêm biên dịch- và chạy-
yêu cầu về thời gian không thể được đáp ứng trên tất cả các hệ thống.
-mpush-args
-mno-push-args
Sử dụng các phép toán PUSH để lưu trữ các thông số gửi đi. Phương pháp này ngắn hơn và thường
nhanh không kém phương pháp sử dụng các hoạt động SUB / MOV và được bật theo mặc định. Trong một số
các trường hợp vô hiệu hóa nó có thể cải thiện hiệu suất vì lập lịch được cải thiện và giảm
sự phụ thuộc.
-maccumulate-đi-args
Nếu được bật, lượng không gian tối đa cần thiết cho các đối số gửi đi được tính bằng
phần mở đầu chức năng. Điều này nhanh hơn trên hầu hết các CPU hiện đại vì giảm
phụ thuộc, lập lịch được cải thiện và giảm mức sử dụng ngăn xếp khi ngăn xếp ưu tiên
ranh giới không bằng 2. Hạn chế là sự gia tăng đáng kể về kích thước mã. Cái này
chuyển đổi ngụ ý -mno-push-args.
-mthread
Hỗ trợ xử lý ngoại lệ an toàn luồng trên MinGW. Các chương trình dựa trên an toàn chuỗi
xử lý ngoại lệ phải biên dịch và liên kết tất cả mã với -mthread Lựa chọn. Khi nào
biên dịch, -mthread định nghĩa "-D_MT"; khi liên kết, nó liên kết trong một chuỗi đặc biệt
thư viện trợ giúp -lmingwthrd làm sạch dữ liệu xử lý ngoại lệ trên mỗi luồng.
-mno-align-stringops
Không căn chỉnh đích của các hoạt động chuỗi nội tuyến. Công tắc này làm giảm mã
kích thước và cải thiện hiệu suất trong trường hợp đích đã được căn chỉnh, nhưng GCC
không biết về nó.
-minline-all-stringops
Theo mặc định, GCC nội dòng hoạt động chuỗi chỉ khi đích được biết là
được căn chỉnh theo ranh giới 4 byte ít nhất. Điều này cho phép nhiều nội tuyến hơn và tăng mã
kích thước, nhưng có thể cải thiện hiệu suất của mã phụ thuộc vào "memcpy", "strlen" và
"memset" cho độ dài ngắn.
-minline-stringops-dynamic
Đối với các hoạt động chuỗi có kích thước không xác định, hãy sử dụng kiểm tra thời gian chạy với mã nội tuyến cho nhỏ
khối và thư viện gọi các khối lớn.
-mstringop-chiến lược =loài rong
Ghi đè phương pháp phân tích quyết định nội bộ cho thuật toán cụ thể để sử dụng cho
các phép toán chuỗi nội tuyến. Các giá trị được phép cho loài rong là:
đại diện_byte
đại diện_4byte
đại diện_8byte
Mở rộng bằng cách sử dụng tiền tố "đại diện" i386 có kích thước được chỉ định.
byte_loop
vòng lặp
unrolled_loop
Mở rộng thành một vòng lặp nội tuyến.
libcall
Luôn sử dụng cuộc gọi thư viện.
-momit-lá-khung-con trỏ
Đừng giữ con trỏ khung trong sổ đăng ký các chức năng của lá. Điều này tránh
hướng dẫn lưu, thiết lập và khôi phục con trỏ khung và tạo thêm một thanh ghi
có sẵn trong các chức năng của lá. Các tùy chọn -fomit-lá-khung-con trỏ loại bỏ khung
con trỏ cho các hàm lá, có thể làm cho việc gỡ lỗi khó khăn hơn.
-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Kiểm soát xem các biến TLS có thể được truy cập với các phần bù từ phân đoạn TLS hay không
đăng ký (% gs cho 32-bit,% fs cho 64-bit) hoặc con trỏ cơ sở luồng có phải là
thêm. Điều này có hợp lệ hay không phụ thuộc vào hệ điều hành và
ánh xạ phân đoạn để bao phủ toàn bộ khu vực TLS.
Đối với các hệ thống sử dụng Thư viện GNU C, mặc định được bật.
-msse2avx
-mno-sse2avx
Chỉ định rằng trình hợp dịch phải mã hóa các lệnh SSE bằng tiền tố VEX. Các tùy chọn
-mavx bật tính năng này theo mặc định.
-mfentry
-mno-hàng rào
Nếu cấu hình đang hoạt động (-pg), đặt lệnh gọi bộ đếm hồ sơ trước phần mở đầu.
Lưu ý: Trên kiến trúc x86, không thể sử dụng thuộc tính "ms_hook_prologue" tại
thời điểm cho -mfentry và -pg.
-m8bit-idiv
-mno-8bit-idiv
Trên một số bộ xử lý, như Intel Atom, phép chia số nguyên không dấu 8 bit nhanh hơn nhiều so với
Phép chia số nguyên 32-bit / 64-bit. Tùy chọn này tạo kiểm tra thời gian chạy. Nếu cả hai
số bị chia và số bị chia nằm trong phạm vi từ 0 đến 255, phép chia số nguyên không dấu 8 bit là
được sử dụng thay cho phép chia số nguyên 32-bit / 64-bit.
-mavx256-split-unaligned-tải
-mavx256-split-unalign-store
Tách tải và lưu trữ không được đánh dấu AVX 32 byte.
Kia là -m các công tắc được hỗ trợ ngoài các tính năng trên trên bộ xử lý x86-64 ở 64-bit
môi trường.
-m32
-m64
-mx32
Tạo mã cho môi trường 32 bit hoặc 64 bit. Các -m32 tùy chọn đặt "int", "long",
và loại con trỏ tới 32 bit và tạo mã chạy trên bất kỳ hệ thống i386 nào.
Sản phẩm -m64 tùy chọn đặt "int" thành 32 bit và "dài" và các loại con trỏ thành 64 bit, và
tạo mã cho kiến trúc x86-64. Đối với Darwin chỉ -m64 tùy chọn cũng có
tắt -fno-ảnh và -mdynamic-no-pic tùy chọn.
Sản phẩm -mx32 tùy chọn đặt các loại "int", "long" và con trỏ thành 32 bit và tạo mã
cho kiến trúc x86-64.
-mno-đỏ-vùng
Không sử dụng cái gọi là "vùng màu đỏ" cho mã x86-64. Vùng màu đỏ được ủy quyền bởi
x86-64 ABI; nó là một vùng 128 byte nằm ngoài vị trí của con trỏ ngăn xếp mà không phải là
được sửa đổi bởi bộ xử lý tín hiệu hoặc ngắt và do đó có thể được sử dụng cho dữ liệu tạm thời
mà không cần điều chỉnh con trỏ ngăn xếp. Lá cờ -mno-đỏ-vùng vô hiệu hóa vùng màu đỏ này.
-mcmodel = nhỏ
Tạo mã cho mô hình mã nhỏ: chương trình và các ký hiệu của nó phải được liên kết trong
2 GB thấp hơn của không gian địa chỉ. Con trỏ là 64 bit. Các chương trình có thể được
liên kết tĩnh hoặc động. Đây là mô hình mã mặc định.
-mcmodel = kernel
Tạo mã cho mô hình mã hạt nhân. Kernel chạy trong 2 GB âm của
Không gian địa chỉ. Mô hình này phải được sử dụng cho mã nhân Linux.
-mcmodel = trung bình
Tạo mã cho mô hình phương tiện: chương trình được liên kết trong 2 GB thấp hơn của
Không gian địa chỉ. Các biểu tượng nhỏ cũng được đặt ở đó. Các ký hiệu có kích thước lớn hơn
-mlarge-data-ngưỡng được đưa vào dữ liệu lớn hoặc các phần BSS và có thể được định vị
trên 2GB. Các chương trình có thể được liên kết tĩnh hoặc động.
-mcmodel = lớn
Tạo mã cho mô hình lớn. Mô hình này không đưa ra giả định nào về địa chỉ
và kích thước của các phần.
-maddress-mode = long
Tạo mã cho chế độ địa chỉ dài. Điều này chỉ được hỗ trợ cho 64-bit và x32
các môi trường. Đây là chế độ địa chỉ mặc định cho môi trường 64-bit.
-maddress-mode = short
Tạo mã cho chế độ địa chỉ ngắn. Điều này chỉ được hỗ trợ cho 32-bit và x32
các môi trường. Đây là chế độ địa chỉ mặc định cho môi trường 32-bit và x32.
i386 và x86-64 Windows Các lựa chọn
Các tùy chọn bổ sung này có sẵn cho các mục tiêu Microsoft Windows:
-mconsole
Tùy chọn này chỉ định rằng một ứng dụng bảng điều khiển sẽ được tạo, bằng cách hướng dẫn
trình liên kết để đặt loại hệ thống con tiêu đề PE cần thiết cho các ứng dụng bảng điều khiển.
Tùy chọn này có sẵn cho các mục tiêu Cygwin và MinGW và được bật theo mặc định trên
các mục tiêu đó.
-mdll
Tùy chọn này có sẵn cho các mục tiêu Cygwin và MinGW. Nó chỉ định rằng một DLL --- a
thư viện liên kết động --- sẽ được tạo, cho phép lựa chọn
đối tượng khởi động thời gian chạy và điểm vào.
-mnop-fun-dllimport
Tùy chọn này có sẵn cho các mục tiêu Cygwin và MinGW. Nó chỉ định rằng
thuộc tính "dllimport" nên được bỏ qua.
-mthread
Tùy chọn này có sẵn cho các mục tiêu MinGW. Nó chỉ định rằng chuỗi cụ thể MinGW
hỗ trợ được sử dụng.
-municode
Tùy chọn này có sẵn cho các mục tiêu MinGW-w64. Nó gây ra bộ xử lý tiền "UNICODE"
macro được xác định trước và chọn mã khởi động thời gian chạy có khả năng Unicode.
-mwin32
Tùy chọn này có sẵn cho các mục tiêu Cygwin và MinGW. Nó chỉ rõ rằng
Các macro xác định trước của Microsoft Windows phải được đặt trong bộ xử lý trước, nhưng không
ảnh hưởng đến sự lựa chọn thư viện thời gian chạy / mã khởi động.
-mwindows
Tùy chọn này có sẵn cho các mục tiêu Cygwin và MinGW. Nó chỉ định rằng một GUI
ứng dụng sẽ được tạo bằng cách hướng dẫn trình liên kết đặt tiêu đề PE
loại hệ thống con một cách thích hợp.
-fno-set-ngăn xếp-thực thi
Tùy chọn này có sẵn cho các mục tiêu MinGW. Nó chỉ định rằng cờ thực thi cho
ngăn xếp được sử dụng bởi các hàm lồng nhau không được đặt. Điều này là cần thiết để chạy các tệp nhị phân
trong chế độ hạt nhân của Microsoft Windows, vì ở đó API User32, được sử dụng để đặt
các đặc quyền thực thi, không khả dụng.
-data -fwinity-tái định cư-rdata
Tùy chọn này có sẵn cho các mục tiêu MinGW và Cygwin. Nó chỉ định rằng đã di dời-
dữ liệu trong phần chỉ đọc được đưa vào phần .data. Đây là điều cần thiết cho những người lớn tuổi
thời gian chạy không hỗ trợ sửa đổi các phần .rdata để tái định vị giả.
-mpe-align-commons
Tùy chọn này có sẵn cho các mục tiêu Cygwin và MinGW. Nó chỉ định rằng GNU
mở rộng sang định dạng tệp PE cho phép căn chỉnh chính xác các biến COMMON
nên được sử dụng khi tạo mã. Nó được bật theo mặc định nếu GCC phát hiện ra rằng
trình hợp dịch mục tiêu được tìm thấy trong quá trình cấu hình hỗ trợ tính năng này.
Xem thêm dưới i386 và x86-64 Các lựa chọn cho các tùy chọn tiêu chuẩn.
IA-64 Các lựa chọn
Đây là những -m các tùy chọn được xác định cho kiến trúc Intel IA-64.
-mbig-endian
Tạo mã cho một mục tiêu lớn. Đây là mặc định cho HP-UX.
-mlittle-endian
Tạo mã cho một mục tiêu ít endian. Đây là mặc định cho AIX5 và GNU / Linux.
-mgnu-as
-mno-gnu-as
Tạo (hoặc không) mã cho trình hợp dịch GNU. Đây là mặc định.
-mgnu-ld
-mno-gnu-ld
Tạo (hoặc không) mã cho trình liên kết GNU. Đây là mặc định.
-mno-pic
Tạo mã không sử dụng thanh ghi con trỏ toàn cục. Kết quả không phải là vị trí
mã độc lập và vi phạm IA-64 ABI.
-mvolatile-asm-stop
-mno-dễ bay hơi-asm-stop
Tạo (hoặc không) một bit dừng ngay lập tức trước và sau các câu lệnh asm dễ bay hơi.
-đăng ký-tên
-mno-đăng ký-tên
Tạo (hoặc không) in, locvà ra đăng ký tên cho các thanh ghi xếp chồng lên nhau. Cái này
có thể làm cho đầu ra của trình hợp dịch dễ đọc hơn.
-mno-sdata
-msdata
Tắt (hoặc bật) các tính năng tối ưu hóa sử dụng phần dữ liệu nhỏ. Điều này có thể hữu ích
để khắc phục lỗi của trình tối ưu hóa.
-mconstant-gp
Tạo mã sử dụng một giá trị con trỏ toàn cục không đổi. Điều này hữu ích khi
biên dịch mã nhân.
-mauto-pic
Tạo mã có thể tự định vị lại. Điều này nghĩa là -mconstant-gp. Cái này hữu ích
khi biên dịch mã phần sụn.
-minline-float-split-min-latency
Tạo mã cho các phép chia nội tuyến của các giá trị dấu phẩy động bằng cách sử dụng độ trễ tối thiểu
thuật toán.
-minline-float-split-max-throughput
Tạo mã cho các phép chia nội tuyến của các giá trị dấu phẩy động bằng cách sử dụng thông lượng tối đa
thuật toán.
-mno-inline-float-split
Không tạo mã nội tuyến cho các phép chia giá trị dấu phẩy động.
-minline-int-split-min-latency
Tạo mã cho các phép chia nội tuyến của các giá trị số nguyên bằng cách sử dụng độ trễ tối thiểu
thuật toán.
-minline-int-split-max-throughput
Tạo mã cho các phép chia nội tuyến của các giá trị số nguyên bằng cách sử dụng thông lượng tối đa
thuật toán.
-mno-inline-int-chia
Không tạo mã nội tuyến cho các phép chia giá trị số nguyên.
-minline-sqrt-min-độ trễ
Tạo mã cho căn bậc hai nội tuyến bằng cách sử dụng thuật toán độ trễ tối thiểu.
-minline-sqrt-max-thông lượng
Tạo mã cho căn bậc hai nội tuyến bằng cách sử dụng thuật toán thông lượng tối đa.
-mno-nội tuyến-sqrt
Không tạo mã nội tuyến cho "sqrt".
-mfused-mad
-mno-fused-madd
Làm (không) tạo mã sử dụng phép nhân / cộng hoặc nhân / trừ hợp nhất
hướng dẫn. Mặc định là sử dụng các hướng dẫn này.
-mno-lùn2-asm
-mdwarf2-asm
Không (hoặc làm) tạo mã trình hợp dịch cho thông tin gỡ lỗi số dòng DWARF 2.
Điều này có thể hữu ích khi không sử dụng trình hợp dịch GNU.
-mearly-stop-bit
-mno-sớm-dừng-bit
Cho phép đặt các bit dừng sớm hơn ngay trước lệnh
đã kích hoạt bit dừng. Điều này có thể cải thiện việc lập lịch hướng dẫn, nhưng không phải lúc nào cũng
làm như vậy.
-mfixed-range =phạm vi đăng ký
Tạo mã coi phạm vi thanh ghi đã cho là thanh ghi cố định. Một thanh ghi cố định
là một trong đó bộ cấp phát thanh ghi không thể sử dụng. Điều này rất hữu ích khi biên dịch hạt nhân
mã số. Một dải thanh ghi được chỉ định là hai thanh ghi cách nhau bằng dấu gạch ngang. Nhiều
phạm vi đăng ký có thể được chỉ định cách nhau bằng dấu phẩy.
-mtls-size =kích thước tls
Chỉ định kích thước bit của các hiệu số TLS ngay lập tức. Các giá trị hợp lệ là 14, 22 và 64.
-mtune =loại cpu
Điều chỉnh lập lịch lệnh cho một CPU cụ thể, Các giá trị hợp lệ là itanium,
itanium1, nhân từ, itanium2và mckinley.
-milp32
-mlp64
Tạo mã cho môi trường 32 bit hoặc 64 bit. Môi trường 32-bit đặt int,
dài và con trỏ tới 32 bit. Môi trường 64 bit đặt int thành 32 bit và dài và
con trỏ tới 64 bit. Đây là các cờ cụ thể của HP-UX.
-mno-Sched-br-data-spec
-msched-br-data-spec
(Dis / En) có thể lập lịch suy đoán dữ liệu trước khi tải lại. Điều này dẫn đến việc tạo ra
hướng dẫn "ld.a" và hướng dẫn kiểm tra tương ứng ("ld.c" / "chk.a"). Các
mặc định là 'vô hiệu hóa'.
-msched-ar-data-spec
-mno-Sched-ar-data-spec
(En / Dis) có thể lập lịch suy đoán dữ liệu sau khi tải lại. Điều này dẫn đến việc tạo ra
hướng dẫn "ld.a" và hướng dẫn kiểm tra tương ứng ("ld.c" / "chk.a"). Các
mặc định là 'bật'.
-mno-Schedule-control-spec
-msched-control-spec
(Dis / En) có thể kiểm soát lập lịch đầu cơ. Tính năng này chỉ có sẵn trong
lập lịch vùng (tức là trước khi tải lại). Điều này dẫn đến việc tạo ra "ld.s"
hướng dẫn và hướng dẫn kiểm tra tương ứng "chk.s". Mặc định là
'vô hiệu'.
-msched-br-in-data-spec
-mno-Sched-br-in-data-spec
(En / Dis) có thể lập lịch trình suy đoán của các hướng dẫn phụ thuộc vào dữ liệu
tải đầu cơ trước khi tải lại. Điều này chỉ hiệu quả với -msched-br-data-spec
đã được kích hoạt. Mặc định là 'bật'.
-msched-ar-in-data-spec
-mno-Sched-ar-in-data-spec
(En / Dis) có thể lập lịch trình suy đoán của các hướng dẫn phụ thuộc vào dữ liệu
tải đầu cơ sau khi tải lại. Điều này chỉ hiệu quả với -msched-ar-data-spec
đã được kích hoạt. Mặc định là 'bật'.
-msched-in-control-spec
-mno-Sched-in-control-spec
(En / Dis) có thể lập lịch trình suy đoán của các hướng dẫn phụ thuộc vào
kiểm soát tải đầu cơ. Điều này chỉ hiệu quả với -msched-control-spec kích hoạt.
Mặc định là 'bật'.
-mno-Sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Nếu được bật, các hướng dẫn suy đoán dữ liệu chỉ được chọn cho lịch trình nếu không có
các lựa chọn khác vào lúc này. Điều này làm cho việc sử dụng suy đoán dữ liệu nhiều hơn
bảo thủ. Mặc định là 'vô hiệu hóa'.
-mno-Sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Nếu được bật, các hướng dẫn suy đoán điều khiển chỉ được chọn cho lịch biểu nếu có
không có sự lựa chọn nào khác vào lúc này. Điều này làm cho việc sử dụng đầu cơ kiểm soát nhiều
bảo thủ hơn. Mặc định là 'vô hiệu hóa'.
-mno-Sched-count-spec-in-critical-path
-msched-count-spec-in-quan trọng-path
Nếu được bật, các phụ thuộc suy đoán được xem xét trong quá trình tính toán
hướng dẫn ưu tiên. Điều này làm cho việc sử dụng suy đoán nhiều hơn một chút
bảo thủ. Mặc định là 'vô hiệu hóa'.
-msched-spec-ldc
Sử dụng kiểm tra suy đoán dữ liệu đơn giản. Tùy chọn này được bật mặc định.
-msched-control-spec-ldc
Sử dụng một kiểm tra đơn giản để đầu cơ kiểm soát. Tùy chọn này được bật mặc định.
-msched-stop-bit-sau-mỗi-chu kỳ
Đặt một bit dừng sau mỗi chu kỳ khi lập lịch trình. Tùy chọn này được bật mặc định.
-msched-fp-mem-deps-zero-chi phí
Giả sử rằng các cửa hàng và tải dấu phẩy động không có khả năng gây ra xung đột khi
được xếp vào cùng một nhóm hướng dẫn. Tùy chọn này được tắt theo mặc định.
-msel-Sched-dont-check-control-spec
Tạo kiểm tra cho việc suy đoán kiểm soát trong lập kế hoạch chọn lọc. Lá cờ này là
bị tắt theo mặc định.
-msched-max-memory-insns =tối đa
Giới hạn số lượng bộ nhớ trong mỗi nhóm lệnh, ưu tiên thấp hơn cho
các lớp trong bộ nhớ tiếp theo đang cố gắng lên lịch trong cùng một nhóm lệnh.
Thường xuyên hữu ích để ngăn chặn xung đột ngân hàng bộ nhớ cache. Giá trị mặc định là 1.
-msched-max-memory-insns-hard-limit
Làm cho giới hạn được chỉ định bởi msched-max-bộ nhớ-insns một giới hạn cứng, không cho phép nhiều hơn
nhiều hơn số đó trong một nhóm hướng dẫn. Nếu không, giới hạn là "mềm", nghĩa là
rằng các hoạt động không có bộ nhớ được ưu tiên khi đạt đến giới hạn, nhưng bộ nhớ
các hoạt động vẫn có thể được lên lịch.
LM32 Các lựa chọn
Kia là -m các tùy chọn được xác định cho kiến trúc LatticeMico32:
-mbarrel-shift-enable
Bật hướng dẫn thay đổi thùng.
-mdivide-bật
Bật hướng dẫn phân chia và mô đun.
-multiply-cho phép
Bật hướng dẫn nhân.
-msign-mở rộng-đã bật
Bật hướng dẫn mở rộng dấu hiệu.
-muser-enable
Bật hướng dẫn do người dùng xác định.
M32C Các lựa chọn
-mcpu =tên
Chọn CPU mà mã được tạo. tên có thể là một trong số r8c cho R8C / Tiny
loạt, m16c đối với dòng M16C (lên đến / 60), m32cm cho dòng M16C / 80, hoặc m32c
cho dòng M32C / 80.
-msim
Chỉ định rằng chương trình sẽ được chạy trên trình mô phỏng. Điều này gây ra một sự thay thế
thư viện thời gian chạy được liên kết trong đó hỗ trợ, ví dụ, tệp I / O. Bạn không được
sử dụng tùy chọn này khi tạo các chương trình sẽ chạy trên phần cứng thực; bạn phải
cung cấp thư viện thời gian chạy của riêng bạn cho bất kỳ chức năng I / O nào cần thiết.
-memregs =con số
Chỉ định số lượng thanh ghi giả dựa trên bộ nhớ mà GCC sử dụng trong quá trình tạo mã.
Các thanh ghi giả này được sử dụng giống như các thanh ghi thực, vì vậy có sự cân bằng giữa
Khả năng của GCC để phù hợp với mã vào các thanh ghi có sẵn và hình phạt hiệu suất của
sử dụng bộ nhớ thay vì thanh ghi. Lưu ý rằng tất cả các mô-đun trong một chương trình phải
được biên dịch với cùng một giá trị cho tùy chọn này. Do đó, bạn không được sử dụng
tùy chọn với các thư viện thời gian chạy mặc định của GCC.
M32R / D Các lựa chọn
Kia là -m các tùy chọn được xác định cho kiến trúc Renesas M32R / D:
-m32r2
Tạo mã cho M32R / 2.
-m32rx
Tạo mã cho M32R / X.
-m32r
Tạo mã cho M32R. Đây là mặc định.
-mmodel = nhỏ
Giả sử tất cả các đối tượng nằm trong 16MB bộ nhớ thấp hơn (để địa chỉ của chúng có thể
được tải bằng lệnh "ld24") và giả sử rằng tất cả các chương trình con đều có thể truy cập được với
hướng dẫn "bl". Đây là mặc định.
Khả năng định địa chỉ của một đối tượng cụ thể có thể được đặt bằng thuộc tính "model".
-mmodel = phương tiện
Giả sử các đối tượng có thể ở bất kỳ đâu trong không gian địa chỉ 32 bit (trình biên dịch tạo
hướng dẫn "seth / add3" để tải địa chỉ của chúng) và giả sử tất cả các chương trình con đều
có thể truy cập bằng hướng dẫn "bl".
-mmodel = lớn
Giả sử các đối tượng có thể ở bất kỳ đâu trong không gian địa chỉ 32 bit (trình biên dịch tạo
hướng dẫn "seth / add3" để tải địa chỉ của chúng) và giả sử các chương trình con có thể không
có thể truy cập bằng lệnh "bl" (trình biên dịch tạo ra tốc độ chậm hơn nhiều
chuỗi lệnh "seth / add3 / jl").
-msdata = không có
Vô hiệu hóa việc sử dụng vùng dữ liệu nhỏ. Các biến được đưa vào một trong các .dữ liệu, .bss, hoặc là
.rodata (trừ khi thuộc tính "section" đã được chỉ định). Đây là mặc định.
Vùng dữ liệu nhỏ bao gồm các phần .sdata và .sbss. Đối tượng có thể rõ ràng
đưa vào vùng dữ liệu nhỏ với thuộc tính "section" bằng cách sử dụng một trong các phần này.
-msdata = sdata
Đặt dữ liệu toàn cục và dữ liệu tĩnh nhỏ trong vùng dữ liệu nhỏ, nhưng không tạo ra các dữ liệu đặc biệt
mã để tham chiếu chúng.
-msdata = sử dụng
Đưa dữ liệu tĩnh và toàn cục nhỏ vào vùng dữ liệu nhỏ và tạo ra các dữ liệu đặc biệt
hướng dẫn để tham khảo chúng.
-G num
Đặt các đối tượng toàn cục và tĩnh nhỏ hơn hoặc bằng num byte vào dữ liệu nhỏ hoặc
Các phần BSS thay vì dữ liệu thông thường hoặc các phần BSS. Giá trị mặc định của num is
8. Các -msdata tùy chọn phải được đặt thành một trong số dữ liệu or sử dụng cho tùy chọn này để có bất kỳ
hiệu ứng.
Tất cả các mô-đun phải được biên dịch với cùng một -G num giá trị. Biên dịch với khác nhau
giá trị của num có thể hoạt động hoặc không; nếu nó không, trình liên kết đưa ra một lỗi
tin nhắn --- mã không chính xác không được tạo.
-mdebug
Làm cho mã M32R cụ thể trong trình biên dịch hiển thị một số thống kê có thể hữu ích
trong các chương trình gỡ lỗi.
-malign-vòng
Căn chỉnh tất cả các vòng theo ranh giới 32 byte.
-mno-align-vòng
Không thực thi căn chỉnh 32 byte cho các vòng lặp. Đây là mặc định.
-missue-rate =con số
Vấn đề con số hướng dẫn mỗi chu kỳ. con số chỉ có thể là 1 hoặc 2.
-mbranch-chi phí =con số
con số chỉ có thể là 1 hoặc 2. Nếu là 1 thì các nhánh được ưu tiên hơn là có điều kiện
mã, nếu nó là 2, thì ngược lại sẽ áp dụng.
-mflush-trap =con số
Chỉ định số bẫy sẽ sử dụng để xóa bộ nhớ cache. Giá trị mặc định là 12. Hợp lệ
các số nằm trong khoảng từ 0 đến 15.
-mno-flush-bẫy
Chỉ định rằng bộ nhớ cache không thể được xóa bằng cách sử dụng một cái bẫy.
-mflush-func =tên
Chỉ định tên của chức năng hệ điều hành sẽ gọi để xóa bộ nhớ cache. Các
mặc định là _tuôn ra_cache, nhưng một lệnh gọi hàm chỉ được sử dụng nếu không có bẫy.
-mno-xả-func
Cho biết rằng không có chức năng hệ điều hành nào để xóa bộ nhớ cache.
M680x0 Các lựa chọn
Đây là những -m các tùy chọn được xác định cho bộ xử lý M680x0 và ColdFire. Cài đặt mặc định
phụ thuộc vào kiến trúc nào đã được chọn khi trình biên dịch được cấu hình; các mặc định
cho các lựa chọn phổ biến nhất được đưa ra dưới đây.
-march =arch
Tạo mã cho kiến trúc tập lệnh M680x0 hoặc ColdFire cụ thể.
Giá trị cho phép của arch đối với kiến trúc M680x0 là: 68000, 68010, 68020, 68030,
68040, 68060 và cpu32. Các kiến trúc ColdFire được lựa chọn theo Freescale's
Phân loại ISA và các giá trị cho phép là: isaah, isaplus, isab và Isac.
GCC xác định một macro __mcfarch__ bất cứ khi nào nó đang tạo mã cho mục tiêu ColdFire.
Sản phẩm arch trong macro này là một trong những -tháng Ba đối số đưa ra ở trên.
Khi được sử dụng cùng nhau, -tháng Ba và -âm điệu chọn mã chạy trên một họ tương tự
bộ xử lý nhưng được tối ưu hóa cho một vi kiến trúc cụ thể.
-mcpu =cpu
Tạo mã cho bộ xử lý M680x0 hoặc ColdFire cụ thể. M680x0 cpus là:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 và cpu32. ngọn lửa lạnh cpus
được đưa ra bởi bảng dưới đây, bảng này cũng phân loại các CPU thành các họ:
Gia đình : -mcpu đối số
51 : 51 51ac 51g 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51mXNUMX
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 ghi đè -march =arch if arch tương ứng với cpu. Các kết hợp khác của
-mcpu và -tháng Ba bị từ chối.
GCC xác định macro __mcf_cpu_cpu khi mục tiêu ColdFire cpu đã được chọn. Nó cũng
định nghĩa __mcf_gia_đình_gia đình, giá trị của gia đình được cho bởi bảng trên.
-mtune =điều chỉnh
Điều chỉnh mã cho một vi kiến trúc cụ thể trong các ràng buộc do -tháng Ba
và -mcpu. Vi kiến trúc M680x0 là: 68000, 68010, 68020, 68030, 68040,
68060 và cpu32. Các vi kiến trúc ColdFire là: cfv1, cfv2, cfv3, cfv4 và
cfv4e.
Vous sử dụng pouvez aussi -mtune = 68020-40 đối với mã cần chạy tương đối tốt trên 68020,
68030 và 68040 chỉ tiêu. -mtune = 68020-60 tương tự nhưng bao gồm 68060 mục tiêu như
ổn. Hai tùy chọn này chọn các quyết định điều chỉnh giống như -m68020-40 và -m68020-60
tương ứng.
GCC xác định các macro __mcarch và __mcarch__ khi điều chỉnh cho kiến trúc 680x0
arch. Nó cũng xác định mcarch trừ khi một trong hai -ansi hoặc không phải GNU -std tùy chọn được sử dụng.
Nếu GCC đang điều chỉnh cho một loạt các kiến trúc, như được chọn bởi -mtune = 68020-40 or
-mtune = 68020-60, nó xác định các macro cho mọi kiến trúc trong phạm vi.
GCC cũng xác định macro __NSsớm__ khi điều chỉnh vi kiến trúc ColdFire
sớm, Nơi sớm là một trong những đối số được đưa ra ở trên.
-m68000
-mc68000
Tạo đầu ra cho 68000. Đây là mặc định khi trình biên dịch được định cấu hình cho
68000 hệ thống dựa trên. Nó tương đương với -march = 68000.
Sử dụng tùy chọn này cho các bộ vi điều khiển có lõi 68000 hoặc EC000, bao gồm 68008,
68302, 68306, 68307, 68322, 68328 và 68356.
-m68010
Tạo đầu ra cho 68010. Đây là mặc định khi trình biên dịch được định cấu hình cho
68010 hệ thống dựa trên. Nó tương đương với -march = 68010.
-m68020
-mc68020
Tạo đầu ra cho 68020. Đây là mặc định khi trình biên dịch được định cấu hình cho
68020 hệ thống dựa trên. Nó tương đương với -march = 68020.
-m68030
Tạo đầu ra cho 68030. Đây là mặc định khi trình biên dịch được định cấu hình cho
68030 hệ thống dựa trên. Nó tương đương với -march = 68030.
-m68040
Tạo đầu ra cho 68040. Đây là mặc định khi trình biên dịch được định cấu hình cho
68040 hệ thống dựa trên. Nó tương đương với -march = 68040.
Tùy chọn này hạn chế việc sử dụng các lệnh 68881/68882 phải được mô phỏng bởi
phần mềm trên 68040. Sử dụng tùy chọn này nếu 68040 của bạn không có mã để mô phỏng
những hướng dẫn đó.
-m68060
Tạo đầu ra cho 68060. Đây là mặc định khi trình biên dịch được định cấu hình cho
68060 hệ thống dựa trên. Nó tương đương với -march = 68060.
Tùy chọn này hạn chế việc sử dụng các lệnh 68020 và 68881/68882 phải
được mô phỏng bằng phần mềm trên 68060. Sử dụng tùy chọn này nếu 68060 của bạn không có mã
để mô phỏng các hướng dẫn đó.
-mcpu32
Tạo đầu ra cho CPU32. Đây là mặc định khi trình biên dịch được cấu hình cho
Hệ thống dựa trên CPU32. Nó tương đương với -march = cpu32.
Sử dụng tùy chọn này cho các bộ vi điều khiển có lõi CPU32 hoặc CPU32 +, bao gồm 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 và 68360.
-m5200
Tạo đầu ra cho CPU ColdFire 520X. Đây là mặc định khi trình biên dịch
được cấu hình cho các hệ thống dựa trên 520X. Nó tương đương với -mcpu = 5206, và bây giờ là
không dùng nữa để ủng hộ tùy chọn đó.
Sử dụng tùy chọn này cho vi điều khiển có lõi 5200, bao gồm MCF5202, MCF5203,
MCF5204 và MCF5206.
-m5206e
Tạo đầu ra cho CPU ColdFire 5206e. Tùy chọn hiện không được chấp nhận thay vì
tương đương với -mcpu = 5206e.
-m528x
Tạo đầu ra cho một thành viên của gia đình ColdFire 528X. Tùy chọn bây giờ là
không được chấp nhận thay vì tương đương -mcpu = 528x.
-m5307
Tạo đầu ra cho CPU ColdFire 5307. Tùy chọn hiện không được chấp nhận thay vì
tương đương -mcpu = 5307.
-m5407
Tạo đầu ra cho CPU ColdFire 5407. Tùy chọn hiện không được chấp nhận thay vì
tương đương -mcpu = 5407.
-mcfv4e
Tạo đầu ra cho CPU dòng ColdFire V4e (ví dụ: 547x / 548x). Điều này bao gồm việc sử dụng
hướng dẫn dấu phẩy động phần cứng. Tùy chọn tương đương với -mcpu = 547x, và là
hiện không được dùng nữa để ủng hộ tùy chọn đó.
-m68020-40
Tạo đầu ra cho 68040 mà không cần sử dụng bất kỳ hướng dẫn mới nào. Kết quả này
trong mã có thể chạy tương đối hiệu quả trên 68020/68881 hoặc 68030 hoặc
68040. Mã được tạo sử dụng các lệnh 68881 được mô phỏng trên
68040.
Tùy chọn tương đương với -march = 68020 -mtune = 68020-40.
-m68020-60
Tạo đầu ra cho 68060 mà không cần sử dụng bất kỳ hướng dẫn mới nào. Kết quả này
trong mã có thể chạy tương đối hiệu quả trên 68020/68881 hoặc 68030 hoặc
68040. Mã được tạo sử dụng các lệnh 68881 được mô phỏng trên
68060.
Tùy chọn tương đương với -march = 68020 -mtune = 68020-60.
-mhard-phao
-m68881
Tạo hướng dẫn dấu phẩy động. Đây là mặc định cho 68020 trở lên và
cho các thiết bị ColdFire có FPU. Nó xác định macro __CÓ_68881__ trên M680x0
mục tiêu và __mcffpu__ trên các mục tiêu ColdFire.
-msoft-phao
Không tạo hướng dẫn dấu phẩy động; sử dụng các cuộc gọi thư viện để thay thế. Đây là
mặc định cho mục tiêu 68000, 68010 và 68832. Nó cũng là mặc định cho ColdFire
thiết bị không có FPU.
-mdiv
-mno-div
Tạo (không tạo) lệnh chia phần cứng và phần còn lại của ColdFire. Nếu như
-tháng Ba được sử dụng mà không có -mcpu, mặc định là "bật" đối với kiến trúc ColdFire và "tắt"
cho kiến trúc M680x0. Nếu không, mặc định được lấy từ CPU mục tiêu (
CPU mặc định hoặc CPU được chỉ định bởi -mcpu). Ví dụ: mặc định là "tắt"
cho -mcpu = 5206 và "bật" cho -mcpu = 5206e.
GCC xác định macro __mcfhwdiv__ khi tùy chọn này được bật.
-mới
Hãy xem xét loại "int" rộng 16 bit, như "short int". Ngoài ra, các thông số
được truyền trên ngăn xếp cũng được căn chỉnh theo ranh giới 16 bit ngay cả trên các mục tiêu có API
yêu cầu quảng cáo lên 32-bit.
-không ngắn
Đừng coi kiểu "int" là rộng 16 bit. Đây là mặc định.
-mnobitfield
-mno-bitfield
Không sử dụng hướng dẫn trường bit. Các -m68000, -mcpu32 và -m5200 các tùy chọn ngụ ý
-mnobitfield.
-mbitfield
Sử dụng các hướng dẫn trường bit. Các -m68020 tùy chọn ngụ ý -mbitfield. Đây là
mặc định nếu bạn sử dụng cấu hình được thiết kế cho 68020.
-mrtd
Sử dụng một quy ước gọi hàm khác, trong đó các hàm cố định
số lượng các đối số trả về bằng lệnh "rtd", làm bật các đối số của chúng
trong khi quay trở lại. Điều này sẽ lưu một hướng dẫn trong trình gọi vì không cần phải
đưa các đối số vào đó.
Quy ước gọi này không tương thích với quy ước thường được sử dụng trên Unix, vì vậy bạn
không thể sử dụng nó nếu bạn cần gọi các thư viện được biên dịch bằng trình biên dịch Unix.
Ngoài ra, bạn phải cung cấp các nguyên mẫu hàm cho tất cả các hàm có biến
số đối số (bao gồm cả "printf"); nếu không mã không chính xác được tạo ra cho
các lệnh gọi đến các chức năng đó.
Ngoài ra, kết quả mã không chính xác nghiêm trọng nếu bạn gọi một hàm có quá nhiều
tranh luận. (Thông thường, các đối số phụ bị bỏ qua một cách vô hại.)
Lệnh "rtd" được hỗ trợ bởi 68010, 68020, 68030, 68040, 68060 và CPU32
bộ xử lý, nhưng không phải bằng 68000 hoặc 5200.
-mno-rtd
Không sử dụng các quy ước gọi điện được chọn bởi -mrtd. Đây là mặc định.
-malign-int
-mno-align-int
Kiểm soát xem GCC có căn chỉnh "int", "long", "long long", "float", "double" và "long hay không
biến kép "trên ranh giới 32 bit (-malign-int) hoặc ranh giới 16 bit
(-mno-align-int). Căn chỉnh các biến trên ranh giới 32 bit tạo ra mã chạy
nhanh hơn một chút trên bộ xử lý có bus 32-bit với chi phí bộ nhớ nhiều hơn.
Cảnh báo: nếu bạn sử dụng -malign-int chuyển đổi, GCC sắp xếp các cấu trúc có chứa ở trên
loại khác với hầu hết các thông số kỹ thuật giao diện nhị phân của ứng dụng đã xuất bản cho
m68k.
-mprel
Sử dụng trực tiếp chế độ định địa chỉ liên quan đến máy tính của 68000, thay vì sử dụng toàn cầu
bảng bù trừ. Hiện tại, tùy chọn này ngụ ý -fpic, cho phép tối đa chênh lệch 16 bit
để định địa chỉ pc-tương đối. -fPIC hiện không được hỗ trợ với -mprel, Mặc dù
điều này có thể được hỗ trợ cho bộ xử lý 68020 trở lên.
-mno-nghiêm ngặt-căn chỉnh
-mstrict-căn chỉnh
Đừng (làm) cho rằng các tham chiếu bộ nhớ không được đánh dấu là do hệ thống xử lý.
-msep-dữ liệu
Tạo mã cho phép phân đoạn dữ liệu được định vị trong một vùng khác của bộ nhớ
từ phân đoạn văn bản. Điều này cho phép thực thi tại chỗ trong một môi trường không có
quản lý bộ nhớ ảo. Tùy chọn này ngụ ý -fPIC.
-mno-sep-data
Tạo mã giả định rằng phân đoạn dữ liệu theo sau phân đoạn văn bản. Đây là
mặc định.
-giữa-thư viện chia sẻ
Tạo mã hỗ trợ các thư viện được chia sẻ thông qua phương thức ID thư viện. Điều này cho phép
để thực thi tại chỗ và thư viện được chia sẻ trong môi trường không có bộ nhớ ảo
ban quản lý. Tùy chọn này ngụ ý -fPIC.
-mno-id-shared-thư viện
Tạo mã không giả sử các thư viện được chia sẻ dựa trên ID đang được sử dụng. Đây là
mặc định.
-mshared-library-id = n
Chỉ định số nhận dạng của thư viện được chia sẻ dựa trên ID đang được biên dịch.
Chỉ định giá trị 0 tạo ra mã nhỏ gọn hơn; chỉ định các lực lượng giá trị khác
việc phân bổ số đó cho thư viện hiện tại, nhưng không còn không gian- hay thời gian-
hiệu quả hơn là bỏ qua tùy chọn này.
-mxgot
-mno-xgot
Khi tạo mã độc lập vị trí cho ColdFire, hãy tạo mã hoạt động nếu
GOT có hơn 8192 mục nhập. Mã này lớn hơn và chậm hơn mã
được tạo mà không có tùy chọn này. Trên bộ vi xử lý M680x0, tùy chọn này không cần thiết; -fPIC
đủ.
GCC thường sử dụng một lệnh duy nhất để tải các giá trị từ GOT. Trong khi đây là
tương đối hiệu quả, nó chỉ hoạt động nếu GOT nhỏ hơn khoảng 64k. Bất cứ điều gì
lớn hơn khiến trình liên kết báo cáo lỗi, chẳng hạn như:
vị trí được cắt bớt để vừa với: foobar R_68K_GOT16O
Nếu điều này xảy ra, bạn nên biên dịch lại mã của mình với -mxgot. Sau đó, nó sẽ hoạt động với
GOTs rất lớn. Tuy nhiên, mã được tạo bằng -mxgot kém hiệu quả hơn, vì nó
có 4 lệnh để tìm nạp giá trị của một biểu tượng toàn cục.
Lưu ý rằng một số trình liên kết, bao gồm cả các phiên bản mới hơn của trình liên kết GNU, có thể tạo
nhiều GOT và sắp xếp các mục nhập GOT. Nếu bạn có một trình liên kết như vậy, bạn chỉ cần
sử dụng -mxgot khi biên dịch một tệp đối tượng duy nhất truy cập hơn 8192 GOT
mục. Rất ít làm.
Các tùy chọn này không có hiệu lực trừ khi GCC đang tạo mã độc lập với vị trí.
Mcore Các lựa chọn
Đây là những -m các tùy chọn được xác định cho bộ vi xử lý Motorola M * Core.
-mhardlit
-mno-hardlit
Các hằng số nội dòng vào dòng mã nếu nó có thể được thực hiện trong hai hướng dẫn hoặc ít hơn.
-mdiv
-mno-div
Sử dụng lệnh chia. (Được bật theo mặc định).
-mrelax-ngay lập tức
-mno-thư giãn-ngay lập tức
Cho phép kích thước tùy ý ngay lập tức trong các hoạt động bit.
-mwide-bitfield
-mno-wide-bitfield
Luôn coi trường bit là "int" -size.
-m4byte-các chức năng
-mno-4byte-chức năng
Buộc tất cả các hàm được căn chỉnh theo ranh giới 4 byte.
-mcallgraph-dữ liệu
-mno-callgraph-data
Phát ra thông tin về cuộc gọi.
-mslow-byte
-mno-chậm-byte
Ưu tiên truy cập từ khi đọc số lượng byte.
-mlittle-endian
-mbig-endian
Tạo mã cho một mục tiêu ít endian.
-m210
-m340
Tạo mã cho bộ xử lý 210.
-mno-lsim
Giả sử rằng hỗ trợ thời gian chạy đã được cung cấp và do đó, bỏ qua thư viện trình mô phỏng
(libsim.a) từ dòng lệnh của trình liên kết.
-mstack-increment =kích thước
Đặt số tiền tối đa cho một hoạt động tăng dần ngăn xếp. Giá trị lớn có thể
tăng tốc độ của các chương trình có chứa các chức năng cần một lượng lớn
không gian ngăn xếp, nhưng chúng cũng có thể gây ra lỗi phân đoạn nếu ngăn xếp được mở rộng
quá nhiều. Giá trị mặc định là 0x1000.
MeP Các lựa chọn
-mabsdiff
Bật lệnh "abs", là sự khác biệt tuyệt đối giữa hai thanh ghi.
-trung tâm mua sắm
Cho phép tất cả các lệnh tùy chọn --- các phép toán trung bình, nhân, chia, bit,
số XNUMX dẫn đầu, chênh lệch tuyệt đối, tối thiểu / tối đa, clip và độ bão hòa.
-dung dịch
Bật lệnh "ave", tính toán giá trị trung bình của hai thanh ghi.
-based =n
Các biến về kích thước n byte hoặc nhỏ hơn được đặt trong phần ".based" theo mặc định.
Các biến dựa trên sử dụng thanh ghi $ tp làm thanh ghi cơ sở và có giới hạn 128 byte
vào phần ".based".
-mbitops
Bật hướng dẫn hoạt động bit --- kiểm tra bit ("btstm"), set ("bsetm"), xóa
("bclrm"), invert ("bnotm") và test-and-set ("tas").
-mc =tên
Chọn dữ liệu hằng số phần được đặt vào. tên có thể là "nhỏ", "gần" hoặc
"xa".
-mclip
Bật hướng dẫn "clip". Lưu ý rằng "-mclip" không hữu ích trừ khi bạn cũng
cung cấp "-mminmax".
-mconfig =tên
Chọn một trong các cấu hình cốt lõi được tích hợp sẵn. Mỗi chip MeP có một hoặc nhiều
các mô-đun trong đó; mỗi mô-đun có một CPU lõi và nhiều bộ xử lý đồng bộ, tùy chọn
hướng dẫn và thiết bị ngoại vi. Công cụ "MeP-Integrator", không phải là một phần của GCC, cung cấp
các cấu hình này thông qua tùy chọn này; sử dụng tùy chọn này cũng giống như sử dụng tất cả
các tùy chọn dòng lệnh tương ứng. Cấu hình mặc định là "default".
-mcop
Bật hướng dẫn bộ đồng xử lý. Theo mặc định, đây là bộ đồng xử lý 32-bit. Ghi chú
mà bộ đồng xử lý thường được kích hoạt thông qua tùy chọn "-mconfig =".
-mcop32
Bật hướng dẫn của bộ đồng xử lý 32 bit.
-mcop64
Bật hướng dẫn của bộ đồng xử lý 64 bit.
-mivc2
Bật lập lịch IVC2. IVC2 là một bộ đồng xử lý VLIW 64-bit.
-mdc
Khiến các biến không đổi được đặt trong phần ".near".
-mdiv
Bật hướng dẫn "div" và "divu".
-meb
Tạo mã big-endian.
-mel
Tạo mã endian nhỏ.
-mio dễ bay hơi
Cho trình biên dịch biết rằng bất kỳ biến nào được đánh dấu bằng thuộc tính "io" sẽ là
được coi là dễ bay hơi.
-ml Làm cho các biến được gán cho phần ".far" theo mặc định.
-mleadz
Bật lệnh "leadz" (số XNUMX đứng đầu).
-ừm Làm cho các biến được gán cho phần ".near" theo mặc định.
-mminmax
Bật hướng dẫn "tối thiểu" và "tối đa".
-ừm
Bật hướng dẫn nhân và nhân-tích lũy.
-mno-opt
Tắt tất cả các hướng dẫn tùy chọn được bật bởi "-mall-opts".
-mrepeat
Bật hướng dẫn "lặp lại" và "lắp ráp", được sử dụng để lặp lại chi phí thấp.
-bệnh đa xơ cứng Làm cho tất cả các biến mặc định thành phần ".tiny". Lưu ý rằng có một
Giới hạn 65536 byte cho phần này. Quyền truy cập vào các biến này sử dụng cơ sở% gp
đăng ký.
-msatur
Bật hướng dẫn bão hòa. Lưu ý rằng trình biên dịch hiện không
tự tạo ra những thứ này, nhưng tùy chọn này được bao gồm để tương thích với các công cụ khác,
giống như là".
-msdram
Liên kết thời gian chạy dựa trên SDRAM thay vì thời gian chạy dựa trên ROM mặc định.
-msim
Liên kết các thư viện thời gian chạy trình mô phỏng.
-msimnovec
Liên kết các thư viện thời gian chạy trình mô phỏng, ngoại trừ hỗ trợ tích hợp sẵn để đặt lại và
vectơ ngoại lệ và bảng.
-mtf
Làm cho tất cả các chức năng mặc định thành phần ".far". Nếu không có tùy chọn này, các chức năng
mặc định cho phần ".near".
-mtiny =n
Các biến n byte hoặc nhỏ hơn được phân bổ cho phần ".tiny". Này
các biến sử dụng thanh ghi cơ sở $ gp. Mặc định cho tùy chọn này là 4, nhưng lưu ý rằng
có giới hạn 65536 byte cho phần ".tiny".
MicroBlaze Các lựa chọn
-msoft-phao
Sử dụng phần mềm giả lập cho dấu phẩy động (mặc định).
-mhard-phao
Sử dụng hướng dẫn dấu phẩy động phần cứng.
-mmemcpy
Không tối ưu hóa việc di chuyển khối, hãy sử dụng "memcpy".
-mno-clearbss
Tùy chọn này không được dùng nữa. Sử dụng -fno-zero-khởi tạo-trong-bss thay thế.
-mcpu =loại cpu
Sử dụng các tính năng của và mã lập lịch cho CPU đã cho. Các giá trị được hỗ trợ nằm trong
định dạng vX.YY.Z, Nơi X là một phiên bản chính, YY là phiên bản nhỏ, và Z is
mã tương thích. Giá trị ví dụ là v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.
-mxl-mềm-mul
Sử dụng phần mềm nhân giả lập (mặc định).
-mxl-soft-div
Sử dụng phần mềm giả lập cho các bộ chia (mặc định).
-mxl-thùng-shift
Sử dụng bộ chuyển số thùng cứng.
-mxl-pattern-so sánh
Sử dụng hướng dẫn so sánh mẫu.
-m nhỏ-chia
Sử dụng tối ưu hóa tra cứu bảng cho các phép chia số nguyên có dấu nhỏ.
-mxl-stack-kiểm tra
Tùy chọn này không được dùng nữa. Sử dụng -séc bao thay thế.
-mxl-gp-opt
Sử dụng phần GP-tương đối ".sdata" / ". Sbss".
-mxl-nhân-cao
Sử dụng hướng dẫn nhân cao cho phần cao của 32x32 nhân.
-mxl-float-chuyển đổi
Sử dụng hướng dẫn chuyển đổi dấu phẩy động phần cứng.
-mxl-float-sqrt
Sử dụng lệnh căn bậc hai dấu phẩy động phần cứng.
-mbig-endian
Tạo mã cho một mục tiêu lớn.
-mlittle-endian
Tạo mã cho một mục tiêu ít endian.
-mxl-sắp xếp lại
Sử dụng hướng dẫn sắp xếp lại thứ tự (hoán đổi và tải / lưu trữ đảo ngược byte).
-mxl-chế độ-mô hình ứng dụng
Chọn mô hình ứng dụng mô hình ứng dụng. Các mô hình hợp lệ là
thực thi được
thực thi bình thường (mặc định), sử dụng mã khởi động crt0.o.
xmdstub
để sử dụng với phần mềm gỡ lỗi xâm nhập dựa trên trình gỡ lỗi vi xử lý Xilinx (XMD)
đại lý có tên xmdstub. Điều này sử dụng tệp khởi động crt1.o và đặt địa chỉ bắt đầu của
chương trình thành 0x800.
bootstrap
cho các ứng dụng được tải bằng bộ nạp khởi động. Mô hình này sử dụng tệp khởi động
crt2.o không chứa trình xử lý vectơ đặt lại bộ xử lý. Điều này là phù hợp
để chuyển quyền kiểm soát trên bộ xử lý được đặt lại vào bộ nạp khởi động thay vì
ứng dụng.
nhà báo chí
cho các ứng dụng không yêu cầu bất kỳ vectơ MicroBlaze nào. Tùy chọn này
có thể hữu ích cho các ứng dụng chạy trong một ứng dụng giám sát. Mô hình này
sử dụng crt3.o dưới dạng tệp khởi động.
Tùy chọn -xl-chế độ-mô hình ứng dụng là một bí danh không dùng nữa cho -mxl-chế độ-mô hình ứng dụng.
MIPS Các lựa chọn
-EB Tạo mã big-endian.
-CÁC Tạo mã endian nhỏ. Đây là mặc định cho mips * el - * - * cấu hình.
-march =arch
Tạo mã chạy trên arch, có thể là tên của MIPS ISA chung hoặc
tên của một bộ xử lý cụ thể. Tên ISA là: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips64 và mips64r2. Tên bộ xử lý là: 4kc, 4km, 4kp, 4ksc,
4kec, 4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1,
24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc,
1004kf2_1, 1004kf1_1, longson2e, loongson2f, longson3a, M4K, bát phân, octeon +,
bát phân2, orion, 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 và xlp. Giá trị đặc biệt từ-abi
chọn kiến trúc tương thích nhất cho ABI đã chọn (nghĩa là mips1 cho
ABI 32 bit và mips3 cho ABI 64-bit).
Chuỗi công cụ Linux / GNU bản địa cũng hỗ trợ giá trị tự nhiên, lựa chọn tốt nhất
tùy chọn kiến trúc cho bộ xử lý máy chủ. -march = gốc không có hiệu lực nếu GCC làm
không nhận ra bộ xử lý.
Trong tên bộ xử lý, một 000 có thể được viết tắt là k (ví dụ, -march = r2k).
Tiền tố là tùy chọn và vr có thể được viết r.
Tên của biểu mẫu nf2_1 đề cập đến các bộ xử lý có FPUs có tốc độ bằng một nửa tốc độ của
cốt lõi, tên của biểu mẫu nf1_1 tham khảo các bộ xử lý có FPUs có tốc độ tương tự
làm cốt lõi và tên của biểu mẫu nf3_2 đề cập đến các bộ xử lý có FPUs có tỷ lệ xung nhịp
của 3: 2 đối với cốt lõi. Vì lý do tương thích, nf được chấp nhận như một
từ đồng nghĩa với nf2_1 trong khi nx và bfx được chấp nhận là từ đồng nghĩa với nf1_1.
GCC xác định hai macro dựa trên giá trị của tùy chọn này. Đầu tiên là _MIPS_ARCH,
cung cấp tên của kiến trúc đích, dưới dạng một chuỗi. Thứ hai có hình thức
_MIPS_ARCH_foo, Nơi foo là giá trị được viết hoa của _MIPS_ARCH. Ví dụ,
-march = r2000 bộ _MIPS_ARCH đến "r2000" và xác định macro _MIPS_ARCH_R2000.
Lưu ý rằng _MIPS_ARCH macro sử dụng tên bộ xử lý đã cho ở trên. Nói cách khác,
nó có tiền tố đầy đủ và không viết tắt 000 as k. Trong trường hợp từ-abi, Các
macro đặt tên cho kiến trúc đã phân giải (hoặc "mips1" or "mips3"). Nó đặt tên cho
kiến trúc mặc định khi không -tháng Ba tùy chọn được đưa ra.
-mtune =arch
Tối ưu hóa cho arch. Trong số những thứ khác, tùy chọn này kiểm soát cách hướng dẫn
đã lên lịch và chi phí nhận biết của các phép toán số học. Danh sách của arch giá trị
cũng giống như đối với -tháng Ba.
Khi tùy chọn này không được sử dụng, GCC sẽ tối ưu hóa cho bộ xử lý được chỉ định bởi -tháng Ba. Qua
sử dụng -tháng Ba và -âm điệu cùng với nhau, có thể tạo mã chạy trên
họ bộ xử lý, nhưng tối ưu hóa mã cho một thành viên cụ thể của họ đó.
-âm điệu xác định các macro _MIPS_TUNE và _MIPS_TUNE_foo, hoạt động theo cách tương tự như
các -tháng Ba những cái được mô tả ở trên.
-mips1
Tương đương với -march = mips1.
-mips2
Tương đương với -march = mips2.
-mips3
Tương đương với -march = mips3.
-mips4
Tương đương với -march = mips4.
-mips32
Tương đương với -march = mips32.
-mips32r2
Tương đương với -march = mips32r2.
-mips64
Tương đương với -march = mips64.
-mips64r2
Tương đương với -march = mips64r2.
-mips16
-mno-mips16
Tạo (không tạo) mã MIPS16. Nếu GCC đang nhắm mục tiêu MIPS32 hoặc MIPS64
kiến trúc, nó sử dụng MIPS16e ASE.
Việc tạo mã MIPS16 cũng có thể được kiểm soát trên cơ sở từng chức năng bằng cách
thuộc tính "mips16" và "nomips16".
-mflip-mips16
Tạo mã MIPS16 trên các chức năng xen kẽ. Tùy chọn này được cung cấp cho hồi quy
thử nghiệm tạo mã MIPS16 hỗn hợp / không phải MIPS16 và không nhằm mục đích thông thường
sử dụng trong việc biên dịch mã người dùng.
-minterlink-mips16
-mno-liên kết-mips16
Yêu cầu (không yêu cầu) mã không phải MIPS16 phải tương thích với liên kết với mã MIPS16.
Ví dụ: mã không phải MIPS16 không thể nhảy trực tiếp đến mã MIPS16; nó phải sử dụng một
cuộc gọi hoặc một bước nhảy gián tiếp. -minterlink-mips16 do đó vô hiệu hóa các bước nhảy trực tiếp trừ khi
GCC biết rằng mục tiêu của bước nhảy không phải là MIPS16.
-mabi = 32
-mabi = o64
-mabi = n32
-mabi = 64
-mabi = eabi
Tạo mã cho ABI đã cho.
Lưu ý rằng EABI có phiên bản 32 bit và 64 bit. GCC thường tạo ra 64-bit
mã khi bạn chọn kiến trúc 64 bit, nhưng bạn có thể sử dụng -mgp32 để lấy mã 32 bit
thay thế.
Để biết thông tin về O64 ABI, hãy xemhttp://gcc.gnu.org/projects/mipso64-abi.html>.
GCC hỗ trợ một biến thể của ABI o32 trong đó thanh ghi dấu phẩy động là 64
rộng hơn 32 bit. Bạn có thể chọn kết hợp này với -mabi = 32 -mfp64. ABI này
dựa vào hướng dẫn "mthc1" và "mfhc1" và do đó chỉ được hỗ trợ cho
Bộ xử lý MIPS32R2.
Các phép gán thanh ghi cho các đối số và giá trị trả về vẫn như cũ, nhưng mỗi
giá trị vô hướng được chuyển vào một thanh ghi 64 bit duy nhất thay vì một cặp 32 bit
sổ đăng ký. Ví dụ: các giá trị dấu phẩy động vô hướng được trả về trong $ f0 duy nhất, không phải là một
$ f0/$ f1 đôi. Tập hợp các thanh ghi lưu cuộc gọi cũng được giữ nguyên, nhưng tất cả 64 bit
được lưu.
-mabiccalls
-mno-abicalls
Tạo (không tạo) mã phù hợp với các đối tượng động kiểu SVR4.
-mabiccalls là mặc định cho các hệ thống dựa trên SVR4.
-mshared
-mno-chia sẻ
Tạo (không tạo) mã hoàn toàn độc lập về vị trí và điều đó có thể
do đó được liên kết vào các thư viện được chia sẻ. Tùy chọn này chỉ ảnh hưởng đến -mabiccalls.
Tất cả -mabiccalls mã theo truyền thống là độc lập về vị trí, bất kể các tùy chọn
Lượt thích -fPIC và -fpic. Tuy nhiên, là một phần mở rộng, chuỗi công cụ GNU cho phép các tệp thực thi
để sử dụng quyền truy cập tuyệt đối cho các ký hiệu liên kết cục bộ. Nó cũng có thể sử dụng GP ngắn hơn
trình tự khởi tạo và tạo ra các cuộc gọi trực tiếp đến các chức năng được xác định tại địa phương. Cái này
chế độ được chọn bởi -mno-chia sẻ.
-mno-chia sẻ phụ thuộc vào binutils 2.16 hoặc cao hơn và tạo ra các đối tượng chỉ có thể là
được liên kết bởi trình liên kết GNU. Tuy nhiên, tùy chọn này không ảnh hưởng đến ABI của trận chung kết
có thể thực thi được; nó chỉ ảnh hưởng đến ABI của các đối tượng có thể di dời. Sử dụng -mno-chia sẻ
nói chung làm cho các tệp thực thi nhỏ hơn và nhanh hơn.
-mshared là mặc định.
-mplt
-mno-plt
Giả sử (không giả định) rằng các trình liên kết tĩnh và động hỗ trợ PLT và sao chép
sự tái định cư. Tùy chọn này chỉ ảnh hưởng đến -mno-chia sẻ -mabiccalls. Đối với ABI n64, điều này
tùy chọn không có hiệu lực nếu không có -mym32.
Bạn có thể làm -mplt mặc định bằng cách định cấu hình GCC với --with-mips-plt. Mặc định
is -mno-plt nếu không thì.
-mxgot
-mno-xgot
Nâng (không nâng) các hạn chế thông thường về kích thước của bảng bù toàn cục.
GCC thường sử dụng một lệnh duy nhất để tải các giá trị từ GOT. Trong khi đây là
tương đối hiệu quả, nó chỉ hoạt động nếu GOT nhỏ hơn khoảng 64k. Bất cứ điều gì
lớn hơn khiến trình liên kết báo cáo lỗi, chẳng hạn như:
định vị lại được cắt bớt để vừa với: R_MIPS_GOT16 foobar
Nếu điều này xảy ra, bạn nên biên dịch lại mã của mình với -mxgot. Điều này hoạt động với rất
GOT lớn, mặc dù mã cũng kém hiệu quả hơn, vì nó cần ba
hướng dẫn để tìm nạp giá trị của một biểu tượng toàn cục.
Lưu ý rằng một số trình liên kết có thể tạo nhiều GOT. Nếu bạn có một trình liên kết như vậy, bạn
chỉ nên sử dụng -mxgot khi một tệp đối tượng truy cập nhiều hơn 64k
giá trị của các mục GOT. Rất ít làm.
Các tùy chọn này không có hiệu lực trừ khi GCC đang tạo mã độc lập về vị trí.
-mgp32
Giả sử rằng các thanh ghi có mục đích chung là rộng 32 bit.
-mgp64
Giả sử rằng các thanh ghi có mục đích chung là rộng 64 bit.
-mfp32
Giả sử rằng các thanh ghi dấu phẩy động có chiều rộng 32 bit.
-mfp64
Giả sử rằng các thanh ghi dấu phẩy động có chiều rộng 64 bit.
-mhard-phao
Sử dụng hướng dẫn bộ đồng xử lý dấu phẩy động.
-msoft-phao
Không sử dụng hướng dẫn bộ đồng xử lý dấu phẩy động. Triển khai dấu phẩy động
thay vào đó, tính toán bằng cách sử dụng các lệnh gọi thư viện.
-mno-phao
Tương đương với -msoft-phao, nhưng cũng khẳng định rằng chương trình đang được biên dịch
không thực hiện bất kỳ phép toán dấu phẩy động nào. Tùy chọn này hiện được hỗ trợ
chỉ bằng một số cấu hình MIPS kim loại trần, nơi nó có thể chọn một bộ
thư viện thiếu tất cả hỗ trợ dấu phẩy động (bao gồm, ví dụ,
định dạng điểm "printf"). Nếu mã được biên dịch bằng "-mno-float" vô tình chứa
hoạt động dấu phẩy động, nó có khả năng bị lỗi thời gian liên kết hoặc thời gian chạy.
-msingle-float
Giả sử rằng bộ đồng xử lý dấu phẩy động chỉ hỗ trợ các hoạt động chính xác đơn lẻ.
-mdouble-float
Giả sử rằng bộ đồng xử lý dấu phẩy động hỗ trợ các hoạt động chính xác gấp đôi. Cái này
là mặc định.
-mllsc
-mno-llsc
Sử dụng (không sử dụng) ll, scvà đồng bộ hướng dẫn triển khai bộ nhớ nguyên tử tích hợp sẵn
chức năng. Khi cả hai tùy chọn đều không được chỉ định, GCC sẽ sử dụng các hướng dẫn nếu mục tiêu
kiến trúc hỗ trợ chúng.
-mllsc rất hữu ích nếu môi trường thời gian chạy có thể mô phỏng các hướng dẫn và -mno-llsc
có thể hữu ích khi biên dịch cho các ISA không chuẩn. Bạn có thể thực hiện một trong hai tùy chọn
mặc định bằng cách định cấu hình GCC với --với-llsc và --không-llsc tương ứng.
--với-llsc là mặc định cho một số cấu hình; xem tài liệu cài đặt
để biết thêm chi tiết.
-mdsp
-mno-dsp
Sử dụng (không sử dụng) bản sửa đổi 1 của MIPS DSP ASE.
Tùy chọn này xác định macro bộ xử lý trước __mips_dsp. Nó cũng xác định
__mips_dsp_rev để 1.
-mdspr2
-mno-dspr2
Sử dụng (không sử dụng) bản sửa đổi 2 của MIPS DSP ASE.
Tùy chọn này xác định các macro của bộ xử lý trước __mips_dsp và __mips_dspr2. Nó cũng
định nghĩa __mips_dsp_rev để 2.
-msmartmips
-mno-smartmips
Sử dụng (không sử dụng) MIPS SmartMIPS ASE.
-cặp đôi-độc thân
-mno-cặp-đơn
Sử dụng (không sử dụng) các hướng dẫn dấu phẩy động được ghép nối duy nhất.
Tùy chọn này yêu cầu bật hỗ trợ dấu phẩy động phần cứng.
-mdmx
-mno-mdmx
Sử dụng (không sử dụng) hướng dẫn Phần mở rộng Phương tiện Kỹ thuật số MIPS. Tùy chọn này chỉ có thể là
được sử dụng khi tạo mã 64-bit và yêu cầu hỗ trợ dấu phẩy động phần cứng để được
kích hoạt.
-mips3d
-mno-mips3d
Sử dụng (không sử dụng) MIPS-3D ASE. Các tùy chọn -mips3d ngụ ý -cặp đôi-độc thân.
-ừm
-mno-mt
Sử dụng (không sử dụng) Hướng dẫn đa luồng MT.
-ừm
-mno-mcu
Sử dụng (không sử dụng) hướng dẫn MIPS MCU ASE.
-mlong64
Buộc các loại "dài" phải rộng 64 bit. Nhìn thấy -mlong32 để được giải thích về sự mặc định
và cách xác định kích thước con trỏ.
-mlong32
Buộc các loại "long", "int" và con trỏ phải rộng 32 bit.
Kích thước mặc định của "int" s, "long" s và con trỏ phụ thuộc vào ABI. Tất cả
ABI được hỗ trợ sử dụng "int" 32-bit. ABI n64 sử dụng 64-bit "dài", cũng như 64-bit
EABI; những người khác sử dụng "dài" 32-bit. Con trỏ có cùng kích thước với "long" hoặc
cùng kích thước với thanh ghi số nguyên, giá trị nào nhỏ hơn.
-mym32
-mno-sym32
Giả sử (không giả định) rằng tất cả các ký hiệu đều có giá trị 32 bit, bất kể giá trị đã chọn là gì
ABI. Tùy chọn này hữu ích khi kết hợp với -mabi = 64 và -mno-abicalls bởi vì nó
cho phép GCC tạo các tham chiếu ngắn hơn và nhanh hơn đến các địa chỉ tượng trưng.
-G num
Đặt định nghĩa về dữ liệu hiển thị bên ngoài trong phần dữ liệu nhỏ nếu dữ liệu đó không
to hơn num byte. GCC sau đó có thể tạo ra các quyền truy cập hiệu quả hơn vào dữ liệu; Thấy chưa
-mgpopt để biết thêm chi tiết.
Mặc định -G tùy chọn tùy thuộc vào cấu hình.
-mlocal-sdata
-mno-local-sdata
Mở rộng (không mở rộng) -G hành vi đối với dữ liệu cục bộ, chẳng hạn như các biến tĩnh
trong C. -mlocal-sdata là mặc định cho tất cả các cấu hình.
Nếu trình liên kết phàn nàn rằng một ứng dụng đang sử dụng quá nhiều dữ liệu nhỏ, bạn có thể
muốn thử xây dựng lại các phần ít quan trọng về hiệu suất hơn với -mno-local-sdata. Bạn
cũng có thể muốn xây dựng các thư viện lớn với -mno-local-sdata, để các thư viện
chừa nhiều chỗ cho chương trình chính.
-mextern-sdata
-mno-extern-sdata
Giả định (không giả định) rằng dữ liệu được xác định bên ngoài nằm trong phần dữ liệu nhỏ nếu
kích thước của dữ liệu đó nằm trong -G giới hạn. -mextern-sdata là mặc định cho tất cả
cấu hình.
Nếu bạn biên dịch một mô-đun Đường với -mextern-sdata -G num -mgpoptvà Đường tham chiếu a
biến Mỗi điều đó không lớn hơn num byte, bạn phải đảm bảo rằng Mỗi được đặt
trong một phần dữ liệu nhỏ. Nếu như Mỗi được định nghĩa bởi một mô-đun khác, bạn phải biên dịch
mô-đun đó với đủ cao -G cài đặt hoặc đính kèm thuộc tính "section" vào Mỗi's
Định nghĩa. Nếu như Mỗi là phổ biến, bạn phải liên kết ứng dụng với -G
thiết lập.
Cách dễ nhất để đáp ứng những hạn chế này là biên dịch và liên kết mọi mô-đun
với cùng -G Lựa chọn. Tuy nhiên, bạn có thể muốn xây dựng một thư viện hỗ trợ
một số giới hạn dữ liệu nhỏ khác nhau. Bạn có thể làm điều này bằng cách biên dịch thư viện với
hỗ trợ cao nhất -G cài đặt và sử dụng bổ sung -mno-extern-sdata để ngăn chặn
thư viện từ việc đưa ra các giả định về dữ liệu được xác định bên ngoài.
-mgpopt
-mno-gpopt
Sử dụng (không sử dụng) truy cập GP-tương đối cho các ký hiệu được biết là nằm trong một dữ liệu nhỏ
phần; Thấy chưa -G, -mlocal-sdata và -mextern-sdata. -mgpopt là mặc định cho tất cả
cấu hình.
-mno-gpopt rất hữu ích cho các trường hợp thanh ghi $ gp có thể không giữ giá trị của
"_gp". Ví dụ: nếu mã là một phần của thư viện có thể được sử dụng khi khởi động
giám sát, các chương trình gọi quy trình giám sát khởi động chuyển một giá trị không xác định trong $ gp. (Trong
những tình huống như vậy, bản thân màn hình khởi động thường được biên dịch với -G0.)
-mno-gpopt ngụ ý -mno-local-sdata và -mno-extern-sdata.
-membedded-dữ liệu
-mno-nhúng-dữ liệu
Phân bổ các biến cho phần dữ liệu chỉ đọc trước tiên nếu có thể, sau đó tiếp theo trong phần
phần dữ liệu nhỏ nếu có thể, nếu không trong dữ liệu. Điều này cung cấp mã chậm hơn một chút
so với mặc định, nhưng giảm dung lượng RAM cần thiết khi thực thi và do đó có thể
được ưu tiên cho một số hệ thống nhúng.
-muninit-const-in-rodata
-mno-uninit-const-in-rodata
Đặt các biến "const" chưa được khởi tạo trong phần dữ liệu chỉ đọc. Tùy chọn này là
chỉ có ý nghĩa khi kết hợp với -membedded-dữ liệu.
-mcode-readable =thiết lập
Chỉ định liệu GCC có thể tạo mã đọc từ các phần thực thi hay không. Có
ba cài đặt có thể có:
-mcode-readable = yes
Hướng dẫn có thể tự do truy cập các phần thực thi. Đây là thiết lập mặc định.
-mcode-readable = pcrel
MIPS16 hướng dẫn tải tương đối PC có thể truy cập các phần thực thi, nhưng khác
hướng dẫn không được làm như vậy. Tùy chọn này hữu ích trên bộ xử lý 4KSc và 4KSd
khi mã TLB có bộ bit Read Inhib. Nó cũng hữu ích trên bộ vi xử lý
có thể được định cấu hình để có giao diện SRAM hướng dẫn / dữ liệu kép và
như M4K, tự động chuyển hướng tải tương đối của PC đến RAM hướng dẫn.
-mcode-readable = no
Hướng dẫn không được truy cập các phần thực thi. Tùy chọn này có thể hữu ích trên
các mục tiêu được định cấu hình để có giao diện SRAM hướng dẫn / dữ liệu kép nhưng
điều đó (không giống như M4K) không tự động chuyển hướng tải tương đối của PC đến
RAM hướng dẫn.
-msplit-địa chỉ
-mno-split-address
Cho phép (vô hiệu hóa) việc sử dụng toán tử chuyển vị trí trình hợp dịch "% hi ()" và "% lo ()". Cái này
tùy chọn đã được thay thế bởi -mexplicit-relocs nhưng được giữ lại để làm ngược lại
khả năng tương thích.
-mexplicit-relocs
-mno-rõ ràng-relocs
Sử dụng (không sử dụng) các toán tử tái định vị trình hợp dịch khi xử lý các địa chỉ tượng trưng.
Phương án thay thế, được chọn bởi -mno-rõ ràng-relocs, là sử dụng macro trình hợp dịch để thay thế.
-mexplicit-relocs là mặc định nếu GCC được định cấu hình để sử dụng trình hợp dịch
hỗ trợ các nhà khai thác di dời.
-mcheck-zero-chia
-mno-séc-không-chia
Bẫy (không bẫy) khi chia số nguyên cho không.
Mặc định là -mcheck-zero-chia.
-mdivide-trap
-mdivide-break
Hệ thống MIPS kiểm tra phép chia cho XNUMX bằng cách tạo bẫy có điều kiện hoặc
hướng dẫn giải lao. Sử dụng bẫy dẫn đến mã nhỏ hơn, nhưng chỉ được hỗ trợ trên MIPS
II và sau đó. Ngoài ra, một số phiên bản của hạt nhân Linux có một lỗi ngăn chặn bẫy
từ việc tạo ra tín hiệu thích hợp ("SIGFPE"). Sử dụng -mdivide-trap để cho phép có điều kiện
bẫy các kiến trúc hỗ trợ chúng và -mdivide-break buộc sử dụng
nghỉ giải lao.
Mặc định thường là -mdivide-trap, nhưng điều này có thể bị ghi đè tại thời điểm định cấu hình
sử dụng --with-split = break. Kiểm tra chia cho-không có thể bị vô hiệu hóa hoàn toàn bằng cách sử dụng
-mno-séc-không-chia.
-mmemcpy
-mno-memcpy
Buộc (không ép buộc) việc sử dụng "memcpy ()" để di chuyển khối không tầm thường. Mặc định
is -mno-memcpy, cho phép GCC nội tuyến hầu hết các bản sao có kích thước không đổi.
-các cuộc gọi dài
-các cuộc gọi không dài
Vô hiệu hoá (không vô hiệu hoá) việc sử dụng hướng dẫn "jal". Gọi các hàm bằng "jal"
hiệu quả hơn nhưng yêu cầu người gọi và bộ nhớ phải ở cùng 256 megabyte
phân khúc.
Tùy chọn này không ảnh hưởng đến mã abicalls. Mặc định là -các cuộc gọi không dài.
-ừm
-không điên
Bật (tắt) sử dụng các hướng dẫn "mad", "madu" và "mul", như được cung cấp bởi
R4650 ISA.
-mfused-mad
-mno-fused-madd
Bật (tắt) sử dụng hướng dẫn tích lũy nhân dấu phẩy động, khi chúng
có sẵn. Mặc định là -mfused-mad.
Trên CPU R8000 khi sử dụng các lệnh tích lũy nhân,
sản phẩm được tính toán với độ chính xác vô hạn và không phải tuân theo FCSR Flush tới
Không bit. Điều này có thể không mong muốn trong một số trường hợp. Trên các bộ xử lý khác,
kết quả giống về số với phép tính tương đương bằng cách sử dụng phép nhân riêng biệt,
thêm, trừ và phủ định hướng dẫn.
-nocpp
Yêu cầu trình hợp dịch MIPS không chạy bộ tiền xử lý của nó trên các tệp trình hợp dịch của người dùng (với
.s hậu tố) khi lắp ráp chúng.
-mfix-24k
-mno-fix-24k
Làm việc xung quanh errata 24K E48 (dữ liệu bị mất trên cửa hàng trong quá trình nạp tiền). Các giải pháp thay thế
được thực hiện bởi trình lắp ráp chứ không phải bởi GCC.
-mfix-r4000
-mno-fix-r4000
Làm việc xung quanh một số lỗi CPU R4000:
- Một từ kép hoặc một biến chuyển đổi có thể cho kết quả không chính xác nếu được thực thi
ngay sau khi bắt đầu một phép chia số nguyên.
- Một từ kép hoặc một biến chuyển có thể cho kết quả không chính xác nếu được thực hiện trong khi
một phép nhân số nguyên đang được thực hiện.
- Phép chia số nguyên có thể cho kết quả không chính xác nếu được bắt đầu trong khoảng thời gian trễ của một
lấy nhánh hoặc một bước nhảy.
-mfix-r4400
-mno-fix-r4400
Làm việc xung quanh một số lỗi CPU R4400:
- Một từ kép hoặc một biến chuyển đổi có thể cho kết quả không chính xác nếu được thực thi
ngay sau khi bắt đầu một phép chia số nguyên.
-mfix-r10000
-mno-fix-r10000
Làm việc xung quanh R10000 errata nhất định:
- Các chuỗi "ll" / "sc" có thể không hoạt động nguyên tử trên các bản sửa đổi trước 3.0. Họ có thể
bế tắc trên các phiên bản 2.6 trở về trước.
Tùy chọn này chỉ có thể được sử dụng nếu kiến trúc đích hỗ trợ khả năng rẽ nhánh
hướng dẫn. -mfix-r10000 là mặc định khi -march = r10000 Được sử dụng; -mno-fix-r10000
là mặc định nếu không.
-mfix-vr4120
-mno-fix-vr4120
Làm việc xung quanh một số VR4120 errata:
- "dmultu" không phải lúc nào cũng tạo ra kết quả chính xác.
- "div" và "ddiv" không phải lúc nào cũng tạo ra kết quả chính xác nếu một trong các toán hạng
là tiêu cực.
Các giải pháp thay thế cho phân chia errata dựa vào các chức năng đặc biệt trong libgcc.a. Tại
hiện tại, các chức năng này chỉ được cung cấp bởi cấu hình "mips64vr * -elf".
Các loại VR4120 khác yêu cầu NOP được chèn vào giữa một số cặp
hướng dẫn. Các lỗi này được xử lý bởi trình lắp ráp, không phải bởi chính GCC.
-mfix-vr4130
Làm việc xung quanh VR4130 "mflo" / "mfhi" errata. Các giải pháp thay thế được thực hiện bởi
trình hợp dịch chứ không phải bởi GCC, mặc dù GCC tránh sử dụng "mflo" và "mfhi" nếu
Thay vào đó, các hướng dẫn VR4130 "macc", "macchi", "dmacc" và "dmacchi" có sẵn.
-mfix-sb1
-mno-fix-sb1
Làm việc xung quanh một số lỗi lõi CPU SB-1 nhất định. (Cờ này hiện hoạt động xung quanh SB-1
sửa đổi 2 errata dấu phẩy động "F1" và "F2".)
-mr10k-cache-rào cản =thiết lập
Chỉ định xem GCC có nên chèn các rào cản bộ nhớ cache để tránh các tác dụng phụ của
đầu cơ vào bộ vi xử lý R10K.
Điểm chung với nhiều bộ xử lý, R10K cố gắng dự đoán kết quả của một
nhánh và thực thi một cách suy đoán các lệnh từ nhánh "lấy". Trễ rồi
hủy bỏ các hướng dẫn này nếu kết quả dự đoán là sai. Tuy nhiên, trên R10K,
ngay cả những hướng dẫn bị hủy bỏ có thể có tác dụng phụ.
Sự cố này chỉ ảnh hưởng đến các kho lưu trữ nhân và tùy thuộc vào hệ thống, tải nhân.
Ví dụ: một kho lưu trữ được thực thi theo phương pháp suy đoán có thể tải bộ nhớ đích vào bộ nhớ đệm
và đánh dấu dòng bộ nhớ cache là bẩn, ngay cả khi bản thân lưu trữ sau đó đã bị hủy bỏ. Nếu một DMA
hoạt động ghi vào cùng một vùng bộ nhớ trước khi dòng "bẩn" được xóa,
dữ liệu đã lưu trong bộ nhớ cache sẽ ghi đè dữ liệu DMA-ed. Xem hướng dẫn sử dụng bộ xử lý R10K để biết đầy đủ
mô tả, bao gồm các vấn đề tiềm ẩn khác.
Một cách giải quyết là chèn hướng dẫn hàng rào bộ nhớ cache trước mỗi lần truy cập bộ nhớ
có thể được thực thi một cách phỏng đoán và điều đó có thể có tác dụng phụ ngay cả khi bị hủy bỏ.
-mr10k-cache-rào cản =thiết lập kiểm soát việc triển khai giải pháp này của GCC. Nó
giả định rằng các truy cập bị hủy bỏ vào bất kỳ byte nào trong các vùng sau không có bên
Các hiệu ứng:
1. bộ nhớ bị chiếm bởi khung ngăn xếp của chức năng hiện tại;
2. bộ nhớ bị chiếm bởi một đối số ngăn xếp đến;
3. bộ nhớ bị chiếm bởi một đối tượng có địa chỉ liên kết-thời gian-hằng số.
Hạt nhân có trách nhiệm đảm bảo rằng các truy cập đầu cơ vào các khu vực này
thực sự an toàn.
Nếu chương trình đầu vào chứa một khai báo hàm như:
void foo (vô hiệu);
thì việc triển khai "foo" phải cho phép "j foo" và "jal foo" được thực thi
suy đoán. GCC tôn trọng hạn chế này đối với các chức năng mà nó tự biên dịch. Nó
mong đợi các chức năng không phải GCC (chẳng hạn như mã lắp ráp viết tay) cũng làm như vậy.
Tùy chọn có ba hình thức:
-mr10k-cache-rào cản = tải-lưu trữ
Chèn hàng rào bộ nhớ cache trước khi tải hoặc lưu trữ có thể được thực thi một cách phỏng đoán
và điều đó có thể có tác dụng phụ ngay cả khi bỏ dở.
-mr10k-cache-rào cản = cửa hàng
Chèn hàng rào bộ nhớ cache trước một cửa hàng có thể được thực thi một cách phỏng đoán và
có thể có tác dụng phụ ngay cả khi bị hủy bỏ.
-mr10k-cache-rào cản = không có
Vô hiệu hóa việc chèn các rào cản bộ nhớ cache. Đây là thiết lập mặc định.
-mflush-func =chức năng
-mno-xả-func
Chỉ định hàm gọi để xóa bộ đệm I và D hoặc không gọi bất kỳ hàm nào như vậy
hàm số. Nếu được gọi, hàm phải nhận các đối số giống như đối số chung
"_flush_func ()", tức là địa chỉ của phạm vi bộ nhớ mà bộ nhớ đệm đang được sử dụng
tuôn ra, kích thước của phạm vi bộ nhớ và số 3 (để xóa cả hai bộ đệm). Các
mặc định phụ thuộc vào GCC mục tiêu đã được định cấu hình, nhưng thường là
_flush_func or __cpu_flush.
mbranch-chi phí =num
Đặt chi phí của các chi nhánh thành khoảng num hướng dẫn "đơn giản". Chi phí này chỉ là một
heuristic và không được đảm bảo để tạo ra kết quả nhất quán giữa các bản phát hành. Một con số không
chi phí dự phòng chọn giá trị mặc định, dựa trên -âm điệu thiết lập.
-mbranch-có khả năng
-mno-chi nhánh-có khả năng
Cho phép hoặc vô hiệu hóa việc sử dụng các hướng dẫn Chi nhánh có thể có, bất kể giá trị mặc định cho
kiến trúc đã chọn. Theo mặc định, các hướng dẫn Có thể chi nhánh có thể được tạo nếu
chúng được hỗ trợ bởi kiến trúc đã chọn. Một ngoại lệ dành cho MIPS32 và
Các kiến trúc và bộ xử lý MIPS64 thực hiện các kiến trúc đó; cho những người,
Hướng dẫn có thể rẽ nhánh không được tạo theo mặc định vì MIPS32 và
Các kiến trúc MIPS64 đặc biệt không dùng nữa.
-mfp-ngoại lệ
-mno-fp-ngoại lệ
Chỉ định liệu các ngoại lệ FP có được bật hay không. Điều này ảnh hưởng đến cách các hướng dẫn FP
lên lịch cho một số bộ xử lý. Mặc định là các ngoại lệ FP được bật.
Ví dụ: trên SB-1, nếu các ngoại lệ FP bị tắt và chúng tôi sẽ phát ra 64-bit
mã, sau đó chúng ta có thể sử dụng cả hai đường ống FP. Nếu không, chúng ta chỉ có thể sử dụng một đường ống FP.
-mvr4130-căn chỉnh
-mno-vr4130-căn chỉnh
Đường ống VR4130 là siêu phương trình hai chiều, nhưng chỉ có thể đưa ra hai hướng dẫn
cùng nhau nếu cái đầu tiên được căn chỉnh 8 byte. Khi tùy chọn này được bật, GCC sẽ căn chỉnh
các cặp lệnh mà nó cho rằng nên thực hiện song song.
Tùy chọn này chỉ có hiệu lực khi tối ưu hóa cho VR4130. Nó thường tạo mã
nhanh hơn, nhưng phải làm cho nó lớn hơn. Nó được bật theo mặc định tại
mức độ tối ưu hóa -O3.
-msynci
-mno-synci
Bật (tắt) tạo hướng dẫn "synci" trên các kiến trúc hỗ trợ nó.
Hướng dẫn "synci" (nếu được bật) được tạo khi "__builtin ___ clear_cache ()"
được biên dịch.
Tùy chọn này mặc định là "-mno-synci", nhưng tùy chọn mặc định có thể được ghi đè bằng cách định cấu hình
với "--with-synci".
Khi biên dịch mã cho các hệ thống bộ xử lý đơn lẻ, nói chung là an toàn khi sử dụng "synci".
Tuy nhiên, trên nhiều hệ thống đa lõi (SMP), nó không làm mất hiệu lực của lệnh
bộ nhớ đệm trên tất cả các lõi và có thể dẫn đến hành vi không xác định.
-mrelax-pic-call
-mno-thư giãn-pic-gọi
Cố gắng biến các cuộc gọi PIC thường được gửi qua đăng ký $ 25 thành các cuộc gọi trực tiếp.
Điều này chỉ có thể thực hiện được nếu trình liên kết có thể giải quyết điểm đến tại thời điểm liên kết và nếu
điểm đến nằm trong phạm vi cho một cuộc gọi trực tiếp.
-mrelax-pic-call là mặc định nếu GCC được định cấu hình để sử dụng trình hợp dịch và
trình liên kết hỗ trợ chỉ thị hợp ngữ ".reloc" và "-mexplicit-relocs" nằm trong
tác dụng. Với "-mno-explicit-relocs", việc tối ưu hóa này có thể được thực hiện bởi
trình hợp dịch và trình liên kết một mình mà không cần sự trợ giúp từ trình biên dịch.
-mcount-ra-address
-mno-mcount-ra-địa chỉ
Phát (không phát ra) mã cho phép "_mcount" sửa đổi trả về của hàm gọi
Địa chỉ. Khi được bật, tùy chọn này sẽ mở rộng giao diện "_mcount" thông thường bằng một giao diện mới
địa chỉ ra tham số, có kiểu "intptr_t *" và được chuyển vào thanh ghi $ 12.
Sau đó, "_mcount" có thể sửa đổi địa chỉ trả hàng bằng cách thực hiện cả hai thao tác sau:
· Trả lại địa chỉ mới trong đăng ký $ 31.
· Lưu trữ địa chỉ mới trong "*địa chỉ ra ", Nếu địa chỉ ra là khác rỗng.
Mặc định là -mno-mcount-ra-địa chỉ.
MIMIX Các lựa chọn
Các tùy chọn này được xác định cho MMIX:
-mlibfunc
-mno-libfuncs
Chỉ định rằng các hàm thư viện nội tại đang được biên dịch, chuyển tất cả các giá trị vào
đăng ký, bất kể kích thước.
-mepsilon
-mno-epsilon
Tạo hướng dẫn so sánh dấu phẩy động so sánh với "rE"
đăng ký epsilon.
-mabi = mmixware
-mabi = gnu
Tạo mã chuyển các tham số hàm và trả về các giá trị (trong lệnh được gọi là
hàm) được coi là thanh ghi $ 0 trở lên, trái ngược với GNU ABI sử dụng toàn cầu
đăng ký $ 231 trở lên.
-mzero-mở rộng
-mno-zero-extension
Khi đọc dữ liệu từ bộ nhớ có kích thước ngắn hơn 64 bit, hãy sử dụng (không sử dụng) zero-
mở rộng hướng dẫn tải theo mặc định, thay vì mở rộng hướng dẫn tải.
-mknuthdiv
-mno-knuthdiv
Làm cho kết quả của một phép chia có số dư có cùng dấu với số bị chia.
Với mặc định, -mno-knuthdiv, dấu của phần còn lại theo sau dấu của
cổ tức. Cả hai phương pháp đều hợp lệ về mặt số học, phương pháp sau hầu như chỉ
đã sử dụng.
-mtoplevel-ký hiệu
-mno-toplevel-Symbol
Thêm trước (không thêm trước) a : cho tất cả các ký hiệu toàn cục, vì vậy mã hợp ngữ có thể được sử dụng
với chỉ thị hợp ngữ "PREFIX".
-chính mình
Tạo tệp thực thi ở định dạng ELF, thay vì định dạng mặc định mmo định dạng được sử dụng bởi
các hỗn hợp giả lập.
-mbranch-dự đoán
-mno-chi nhánh-dự đoán
Sử dụng (không sử dụng) các hướng dẫn nhánh có thể xảy ra, khi dự đoán nhánh tĩnh
chỉ ra một nhánh có thể xảy ra.
-mbase-address
-mno-base-address
Tạo (không tạo) mã sử dụng cơ sở địa chỉ. Sử dụng địa chỉ cơ sở
tự động tạo một yêu cầu (do trình hợp dịch và trình liên kết xử lý) cho một
hằng số được thiết lập trong sổ đăng ký toàn cục. Thanh ghi được sử dụng cho một hoặc nhiều cơ sở
địa chỉ các yêu cầu trong phạm vi từ 0 đến 255 từ giá trị được giữ trong thanh ghi. Các
thường dẫn đến mã ngắn và nhanh, nhưng số lượng mục dữ liệu khác nhau
có thể được giải quyết là hạn chế. Điều này có nghĩa là một chương trình sử dụng nhiều dữ liệu tĩnh
có thể yêu cầu -mno-base-address.
-msingle-thoát
-mno-lối ra đơn
Buộc (không ép buộc) mã được tạo ra để có một điểm thoát duy nhất trong mỗi chức năng.
MN10300 Các lựa chọn
Kia là -m các tùy chọn được xác định cho các kiến trúc Matsushita MN10300:
-mult-bug
Tạo mã để tránh lỗi trong các lệnh nhân cho bộ xử lý MN10300.
Đây là mặc định.
-mno-đa-lỗi
Không tạo mã để tránh lỗi trong các hướng dẫn nhân cho MN10300
bộ vi xử lý.
-mẹ33
Tạo mã bằng cách sử dụng các tính năng dành riêng cho bộ xử lý AM33.
-mno-am33
Không tạo mã bằng các tính năng dành riêng cho bộ xử lý AM33. Đây là
mặc định.
-mẹ33-2
Tạo mã bằng các tính năng dành riêng cho bộ xử lý AM33 / 2.0.
-mẹ34
Tạo mã bằng cách sử dụng các tính năng dành riêng cho bộ xử lý AM34.
-mtune =loại cpu
Sử dụng các đặc tính thời gian của loại CPU được chỉ định khi lập lịch hướng dẫn.
Điều này không thay đổi loại bộ xử lý được nhắm mục tiêu. Loại CPU phải là một trong những
mn10300, am33, sáng 33-2 or am34.
-mreturn-con trỏ-trên-d0
Khi tạo một hàm trả về con trỏ, hãy trả về con trỏ trong cả "a0" và
"d0". Nếu không, con trỏ chỉ được trả về trong "a0" và cố gắng gọi như vậy
các chức năng không có nguyên mẫu dẫn đến lỗi. Lưu ý rằng tùy chọn này được bật bởi
vỡ nợ; sử dụng -mno-return-con trỏ-trên-d0 để vô hiệu hóa nó.
-mno-crt0
Không liên kết trong tệp đối tượng khởi tạo thời gian chạy C.
-mthư giãn
Cho trình liên kết biết rằng nó nên thực hiện chuyển tối ưu hóa thư giãn tới
rút gọn các nhánh, cuộc gọi và địa chỉ bộ nhớ tuyệt đối. Tùy chọn này chỉ có tác dụng
khi được sử dụng trên dòng lệnh cho bước liên kết cuối cùng.
Tùy chọn này làm cho việc gỡ lỗi tượng trưng không thể thực hiện được.
-mliw
Cho phép trình biên dịch tạo dài Hướng dẫn Từ hướng dẫn nếu mục tiêu là
AM33 hoặc sau đó. Đây là mặc định. Tùy chọn này xác định macro bộ xử lý trước
__LIW__.
-mnoliw
Không cho phép trình biên dịch tạo dài Hướng dẫn Từ hướng dẫn. Tùy chọn này
xác định macro bộ xử lý trước __KHÔNG_LIW__.
-msetlb
Cho phép trình biên dịch tạo THIẾT LẬP và lcc hướng dẫn nếu mục tiêu là
AM33 hoặc sau đó. Đây là mặc định. Tùy chọn này xác định macro bộ xử lý trước
__SETLB__.
-mnosetlb
Không cho phép trình biên dịch tạo THIẾT LẬP or lcc hướng dẫn. Tùy chọn này xác định
macro bộ xử lý trước __KHÔNG_SETLB__.
Moxie Các lựa chọn
-meb
Tạo mã big-endian. Đây là mặc định cho moxie - * - * cấu hình.
-mel
Tạo mã endian nhỏ.
-mno-crt0
Không liên kết trong tệp đối tượng khởi tạo thời gian chạy C.
PDP-11 Các lựa chọn
Các tùy chọn này được xác định cho PDP-11:
-mfpu
Sử dụng dấu phẩy động FPP phần cứng. Đây là mặc định. (Dấu chấm động FIS trên
PDP-11/40 không được hỗ trợ.)
-msoft-phao
Không sử dụng dấu phẩy động phần cứng.
-mac0
Trả về kết quả dấu phẩy động trong ac0 (fr0 trong cú pháp trình hợp dịch Unix).
-mno-ac0
Trả về kết quả dấu phẩy động trong bộ nhớ. Đây là mặc định.
-m40
Tạo mã cho PDP-11/40.
-m45
Tạo mã cho PDP-11/45. Đây là mặc định.
-m10
Tạo mã cho PDP-11/10.
-mbcopy-nội trang
Sử dụng các mẫu "movmemhi" nội tuyến để sao chép bộ nhớ. Đây là mặc định.
-bình soi
Không sử dụng các mẫu "movmemhi" nội tuyến để sao chép bộ nhớ.
-bạc hà16
-mno-int32
Sử dụng 16-bit "int". Đây là mặc định.
-bạc hà32
-mno-int16
Sử dụng "int" 32-bit.
-mfloat64
-mno-float32
Sử dụng "float" 64-bit. Đây là mặc định.
-mfloat32
-mno-float64
Sử dụng "float" 32-bit.
-mabshi
Sử dụng mẫu "abshi2". Đây là mặc định.
-mno-abshi
Không sử dụng mẫu "abshi2".
-mbranch-đắt
Giả vờ rằng các chi nhánh là đắt tiền. Đây là để thử nghiệm với việc tạo mã
chỉ
-mbranch-giá rẻ
Đừng giả vờ rằng các chi nhánh là đắt tiền. Đây là mặc định.
-munix-asm
Sử dụng cú pháp trình hợp dịch Unix. Đây là mặc định khi được định cấu hình cho pdp11 - * - bsd.
-mdec-asm
Sử dụng cú pháp trình hợp dịch DEC. Đây là mặc định khi được định cấu hình cho bất kỳ mục tiêu PDP-11 nào
khác hơn pdp11 - * - bsd.
picochip Các lựa chọn
Kia là -m các tùy chọn được xác định cho việc triển khai picoChip:
-mẹ =ae_type
Đặt tập lệnh, tập thanh ghi và các tham số lập lịch hướng dẫn cho mảng
loại nguyên tố ae_type. Các giá trị được hỗ trợ cho ae_type đang BẤT CỨ, MUvà MAC.
-mae = ANY chọn một kiểu AE hoàn toàn chung chung. Mã được tạo bằng tùy chọn này sẽ chạy
trên bất kỳ loại AE nào khác. Mã không hiệu quả như nếu được biên dịch
đối với một loại AE cụ thể và một số loại hoạt động (ví dụ: phép nhân) không hoạt động
đúng trên tất cả các loại AE.
-mae = MUL chọn kiểu MUL AE. Đây là kiểu AE hữu ích nhất cho mã đã biên dịch,
và là mặc định.
-mae = MAC chọn MAC AE kiểu DSP. Mã được biên dịch với tùy chọn này có thể bị
hiệu suất kém của thao tác byte (ký tự), vì DSP AE không cung cấp
hỗ trợ phần cứng cho tải / lưu trữ byte.
-msymbol-as-địa chỉ
Cho phép trình biên dịch sử dụng trực tiếp tên biểu tượng làm địa chỉ trong tải / cửa hàng
hướng dẫn mà không cần tải trước vào sổ đăng ký. Điển hình là việc sử dụng
tùy chọn tạo ra các chương trình lớn hơn, chạy nhanh hơn so với khi tùy chọn không được sử dụng.
Tuy nhiên, kết quả khác nhau giữa các chương trình, vì vậy nó được để như một tùy chọn của người dùng,
thay vì được kích hoạt vĩnh viễn.
-mno-không hiệu quả-cảnh báo
Tắt cảnh báo về việc tạo mã không hiệu quả. Những cảnh báo này có thể được
được tạo, ví dụ, khi biên dịch mã thực hiện các hoạt động bộ nhớ cấp byte
trên MAC AE loại. MAC AE không hỗ trợ phần cứng cho bộ nhớ mức byte
hoạt động, vì vậy tất cả tải byte / lưu trữ phải được tổng hợp từ tải từ / lưu trữ
các hoạt động. Điều này không hiệu quả và một cảnh báo được tạo ra để cho biết rằng bạn
nên viết lại mã để tránh các hoạt động byte hoặc để nhắm mục tiêu kiểu AE có
hỗ trợ phần cứng cần thiết. Tùy chọn này vô hiệu hóa các cảnh báo này.
PowerPC Các lựa chọn
Những thứ này được liệt kê dưới
RL78 Các lựa chọn
-msim
Các liên kết trong các thư viện mục tiêu bổ sung để hỗ trợ hoạt động trong một trình mô phỏng.
-mmul = không
-mmul = g13
-mmul = rl78
Chỉ định loại hỗ trợ nhân phần cứng sẽ được sử dụng. Mặc định là
"none", sử dụng các chức năng nhân phần mềm. Tùy chọn "g13" dành cho
phần cứng chỉ nhân / chia thiết bị ngoại vi trên các mục tiêu RL78 / G13. Tùy chọn "rl78"
là cho phép nhân phần cứng tiêu chuẩn được xác định trong sổ tay phần mềm RL78.
IBM RS / 6000 và PowerPC Các lựa chọn
Kia là -m các tùy chọn được xác định cho IBM RS / 6000 và PowerPC:
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
Bạn sử dụng các tùy chọn này để chỉ định hướng dẫn nào có sẵn trên bộ xử lý bạn
đang sử dụng. Giá trị mặc định của các tùy chọn này được xác định khi định cấu hình GCC.
Chỉ định -mcpu =cpu_type ghi đè thông số kỹ thuật của các tùy chọn này. chúng tôi
khuyên bạn nên sử dụng -mcpu =cpu_type chứ không phải là các tùy chọn được liệt kê ở trên.
Chỉ định -mpowerpc-gpopt cho phép GCC sử dụng kiến trúc PowerPC tùy chọn
hướng dẫn trong nhóm Mục đích chung, bao gồm căn bậc hai dấu phẩy động.
Chỉ định -mpowerpc-gfxopt cho phép GCC sử dụng kiến trúc PowerPC tùy chọn
hướng dẫn trong nhóm Đồ họa, bao gồm cả chọn dấu phẩy động.
Sản phẩm -mmcrf tùy chọn cho phép GCC tạo di chuyển từ trường đăng ký điều kiện
hướng dẫn được triển khai trên bộ xử lý POWER4 và các bộ xử lý khác hỗ trợ
Kiến trúc PowerPC V2.01. Các -mpopcntb tùy chọn cho phép GCC tạo popcount
và hướng dẫn ước tính đối ứng FP chính xác kép được triển khai trên POWER5
bộ xử lý và các bộ xử lý khác hỗ trợ kiến trúc PowerPC V2.02. Các
-mpopcntd tùy chọn cho phép GCC tạo hướng dẫn tài khoản bật lên được triển khai trên
Bộ xử lý POWER7 và các bộ xử lý khác hỗ trợ kiến trúc PowerPC V2.06.
Sản phẩm -mfprnd tùy chọn cho phép GCC tạo các lệnh từ vòng FP đến số nguyên
được triển khai trên bộ xử lý POWER5 + và các bộ xử lý khác hỗ trợ PowerPC
Kiến trúc V2.03. Các -mcmpb tùy chọn cho phép GCC tạo các byte so sánh
hướng dẫn được triển khai trên bộ xử lý POWER6 và các bộ xử lý khác hỗ trợ
Kiến trúc PowerPC V2.05. Các -mmpgpr tùy chọn cho phép GCC tạo động thái FP
đến / từ hướng dẫn thanh ghi mục đích chung được triển khai trên bộ xử lý POWER6X và
các bộ xử lý khác hỗ trợ kiến trúc PowerPC V2.05 mở rộng. Các -mhard-dfp
tùy chọn cho phép GCC tạo các lệnh dấu phẩy động thập phân được triển khai trên
một số bộ xử lý POWER.
Sản phẩm -mpowerpc64 tùy chọn cho phép GCC tạo các hướng dẫn 64 bit bổ sung
được tìm thấy trong kiến trúc PowerPC64 đầy đủ và coi GPR là 64-bit, từ kép
số lượng. GCC mặc định là -mno-powerpc64.
-mcpu =cpu_type
Đặt kiểu kiến trúc, đăng ký sử dụng và các tham số lập lịch hướng dẫn cho
loại máy cpu_type. Các giá trị được hỗ trợ cho cpu_type đang 401, 403, 405, 405 khung hình/giây, 440,
440 khung hình/giây, 464, 464 khung hình/giây, 476, 476 khung hình/giây, 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, power5 +, power6,
điện6x, power7, power8, máy tính năng lượng, điệnpc64, powerpc64levà rs64.
-mcpu = powerpc, -mcpu = powerpc64và -mcpu = powerpc64le chỉ định PowerPC 32-bit thuần túy
(hoặc endian), PowerPC lớn 64-bit endian và PowerPC nhỏ 64-bit
loại máy kiến trúc, với một mô hình bộ xử lý chung, thích hợp được giả định cho
các mục đích lập lịch trình.
Các tùy chọn khác chỉ định một bộ xử lý cụ thể. Mã được tạo theo các tùy chọn đó
chạy tốt nhất trên bộ xử lý đó và có thể hoàn toàn không chạy trên bộ xử lý khác.
Sản phẩm -mcpu các tùy chọn tự động bật hoặc tắt các tùy chọn sau:
-maltivec -mfprnd -mhard-phao -mmcrf -nhiều -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float -msimple-fpu -mstring
-mmulhw -mdlmzb -mmpgpr -mvsx -mcrypto -mdirect-di chuyển -mpower8-hợp nhất
-mpower8-vector -mquad-bộ nhớ -mquad-bộ nhớ-nguyên tử
Các tùy chọn cụ thể được đặt cho bất kỳ CPU cụ thể nào khác nhau giữa các phiên bản trình biên dịch,
tùy thuộc vào cài đặt nào dường như tạo ra mã tối ưu cho CPU đó; nó không
nhất thiết phải phản ánh khả năng thực tế của phần cứng. Nếu bạn muốn thiết lập một
tùy chọn riêng lẻ cho một giá trị cụ thể, bạn có thể chỉ định nó sau -mcpu Tùy chọn,
Lượt thích -mcpu = 970 -mno-altivec.
Trên AIX, -maltivec và -mpowerpc64 các tùy chọn không được bật hoặc tắt bởi -mcpu
hiện tại vì AIX không có hỗ trợ đầy đủ cho các tùy chọn này. Bạn có thể
vẫn bật hoặc tắt chúng riêng lẻ nếu bạn chắc chắn rằng nó sẽ hoạt động trong
môi trường.
-mtune =cpu_type
Đặt các thông số lập lịch hướng dẫn cho loại máy cpu_type, nhưng không đặt
kiểu kiến trúc hoặc đăng ký sử dụng, như -mcpu =cpu_type làm. Các giá trị giống nhau cho
cpu_type được sử dụng cho -âm điệu như đối với -mcpu. Nếu cả hai đều được chỉ định, mã được tạo
sử dụng kiến trúc và thanh ghi được thiết lập bởi -mcpu, nhưng các thông số lập lịch do
-âm điệu.
-mcmodel = nhỏ
Tạo mã PowerPC64 cho mô hình nhỏ: TOC được giới hạn ở 64k.
-mcmodel = trung bình
Tạo mã PowerPC64 cho mô hình trung bình: TOC và dữ liệu tĩnh khác có thể tăng
lên tổng dung lượng 4G.
-mcmodel = lớn
Tạo mã PowerPC64 cho kiểu máy lớn: TOC có thể có kích thước lên đến 4G. Khác
dữ liệu và mã chỉ bị giới hạn bởi không gian địa chỉ 64-bit.
-maltivec
-mno-altivec
Tạo mã sử dụng (không sử dụng) hướng dẫn AltiVec và cũng cho phép sử dụng
các chức năng tích hợp cho phép truy cập trực tiếp hơn vào tập lệnh AltiVec.
Bạn cũng có thể cần đặt -mabi = altivec để điều chỉnh ABI hiện tại với AltiVec ABI
cải tiến.
Thời Gian -maltivec được sử dụng, thay vì -maltivec = le or -maltivec = be, thứ tự phần tử
đối với bản chất Altivec như "vec_splat", "vec_extract" và "vec_insert" sẽ khớp
thứ tự phần tử mảng tương ứng với độ cuối cùng của mục tiêu. Đó là, phần tử
số không xác định phần tử ngoài cùng bên trái trong thanh ghi vectơ khi nhắm mục tiêu một big-endian
nền tảng và xác định phần tử ngoài cùng bên phải trong sổ đăng ký vectơ khi nhắm mục tiêu
nền tảng little-endian.
-maltivec = be
Tạo hướng dẫn Altivec bằng cách sử dụng thứ tự phần tử big-endian, bất kể
mục tiêu là lớn hoặc ít endian. Đây là cài đặt mặc định khi nhắm mục tiêu đến một đại gia
nền tảng.
Thứ tự phần tử được sử dụng để giải thích số phần tử trong bản chất Altivec chẳng hạn như
"vec_splat", "vec_extract" và "vec_insert". Theo mặc định, chúng sẽ khớp với mảng
thứ tự phần tử tương ứng với độ bền cho mục tiêu.
-maltivec = le
Tạo hướng dẫn Altivec bằng cách sử dụng thứ tự phần tử nhỏ-endian, bất kể
mục tiêu là lớn hoặc ít endian. Đây là mặc định khi nhắm mục tiêu một chút-
nền tảng endian. Tùy chọn này hiện đang bị bỏ qua khi nhắm mục tiêu đến một đại gia
nền tảng.
Thứ tự phần tử được sử dụng để giải thích số phần tử trong bản chất Altivec chẳng hạn như
"vec_splat", "vec_extract" và "vec_insert". Theo mặc định, chúng sẽ khớp với mảng
thứ tự phần tử tương ứng với độ bền cho mục tiêu.
-mvrsave
-mno-vrsave
Tạo hướng dẫn VRSAVE khi tạo mã AltiVec.
-mgen-cell-microcode
Tạo hướng dẫn vi mã tế bào.
-mwarn-cell-microcode
Cảnh báo khi một lệnh vi mã Cell được phát ra. Ví dụ về mã vi mô tế bào
lệnh là một sự thay đổi có thể thay đổi.
-msecure-plt
Tạo mã cho phép ld và ld.so để xây dựng tệp thực thi và thư viện được chia sẻ với
phần ".plt" và ".got" không thể thực thi. Đây là tùy chọn PowerPC 32-bit SYSV ABI.
-mbss-plt
Tạo mã sử dụng phần BSS ".plt" ld.so điền vào và yêu cầu ".plt"
và các phần ".got" đều có thể ghi và thực thi. Đây là PowerPC 32-bit
Tùy chọn SYSV ABI.
-miseel
-mno-isel
Công tắc này bật hoặc tắt việc tạo các lệnh ISEL.
-misel =có không
Công tắc này không được dùng nữa. Sử dụng -miseel và -mno-isel thay thế.
-mspe
-mno-speech
Công tắc này bật hoặc tắt việc tạo các lệnh SPE simd.
-cửa hàng
-mno-ghép nối
Công tắc này bật hoặc tắt việc tạo hướng dẫn simd CẶP.
-mspe =có không
Tùy chọn này đã không được chấp nhận. Sử dụng -mspe và -mno-speech thay thế.
-mvsx
-mno-vsx
Tạo mã sử dụng (không sử dụng) hướng dẫn vectơ / vô hướng (VSX) và cả
cho phép sử dụng các chức năng tích hợp cho phép truy cập trực tiếp hơn vào VSX
tập hướng dẫn.
-mcrypto
-mno-crypto
Cho phép sử dụng (vô hiệu hóa) các chức năng tích hợp cho phép truy cập trực tiếp vào
hướng dẫn mật mã đã được thêm vào phiên bản 2.07 của PowerPC ISA.
-mdirect-di chuyển
-mno-trực tiếp-di chuyển
Tạo mã sử dụng (không sử dụng) các hướng dẫn để di chuyển dữ liệu giữa
thanh ghi mục đích chung và thanh ghi vectơ / vô hướng (VSX) đã được thêm vào
phiên bản 2.07 của PowerPC ISA.
-mpower8-hợp nhất
-mno-power8-hợp nhất
Tạo mã giữ (không giữ) một số hoạt động số nguyên liền kề để
hướng dẫn có thể được hợp nhất với nhau trên bộ xử lý power8 trở lên.
-mpower8-vector
-mno-power8-vector
Tạo mã sử dụng (không sử dụng) các hướng dẫn vectơ và vô hướng đã
được thêm vào phiên bản 2.07 của PowerPC ISA. Đồng thời cho phép sử dụng các chức năng tích hợp
cho phép truy cập trực tiếp hơn vào các hướng dẫn vectơ.
-mquad-bộ nhớ
-mno-quad-bộ nhớ
Tạo mã sử dụng (không sử dụng) hướng dẫn bộ nhớ từ bốn từ không phải nguyên tử.
Sản phẩm -mquad-bộ nhớ tùy chọn yêu cầu sử dụng chế độ 64 bit.
-mquad-bộ nhớ-nguyên tử
-mno-quad-memory-nguyên tử
Tạo mã sử dụng (không sử dụng) hướng dẫn bộ nhớ từ nguyên tử quad. Các
-mquad-bộ nhớ-nguyên tử tùy chọn yêu cầu sử dụng chế độ 64 bit.
-mfloat-gprs =có / đơn / đôi / không
-mfloat-gprs
Công tắc này bật hoặc tắt việc tạo các phép toán dấu phẩy động trên
thanh ghi mục đích chung cho các kiến trúc hỗ trợ nó.
Đối số Vâng or duy nhất cho phép sử dụng dấu phẩy động chính xác đơn
hoạt động.
Đối số tăng gấp đôi cho phép sử dụng dấu phẩy động chính xác đơn và kép
hoạt động.
Đối số Không vô hiệu hóa các hoạt động dấu phẩy động trên thanh ghi mục đích chung.
Tùy chọn này hiện chỉ khả dụng trên MPC854x.
-m32
-m64
Tạo mã cho môi trường 32 bit hoặc 64 bit của các mục tiêu Darwin và SVR4 (bao gồm
GNU / Linux). Môi trường 32 bit đặt int, long và con trỏ thành 32 bit và
tạo mã chạy trên bất kỳ biến thể PowerPC nào. Môi trường 64-bit đặt int thành
32 bit và dài và con trỏ tới 64 bit và tạo mã cho PowerPC64, như đối với
-mpowerpc64.
-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-tối thiểu-toc
Sửa đổi việc tạo TOC (Mục lục), được tạo cho mọi
tệp thực thi. Các -mfull-toc tùy chọn được chọn theo mặc định. Trong trường hợp đó, GCC
phân bổ ít nhất một mục nhập TOC cho mỗi tham chiếu biến không tự động duy nhất trong
chương trình của bạn. GCC cũng đặt các hằng số dấu phẩy động trong TOC. Tuy nhiên, chỉ
16,384 mục có sẵn trong TOC.
Nếu bạn nhận được thông báo lỗi của trình liên kết nói rằng bạn đã làm tràn phần có sẵn
Không gian TOC, bạn có thể giảm dung lượng TOC được sử dụng với -mno-fp-in-toc và
-mno-sum-in-toc tùy chọn. -mno-fp-in-toc ngăn GCC đặt dấu phẩy động
hằng số trong TOC và -mno-sum-in-toc buộc GCC tạo mã để tính toán
tổng của một địa chỉ và một hằng số tại thời gian chạy thay vì đặt tổng đó vào TOC.
Bạn có thể chỉ định một hoặc cả hai tùy chọn này. Mỗi nguyên nhân khiến GCC tạo ra rất
mã chậm hơn và lớn hơn một chút với chi phí bảo toàn không gian TOC.
Nếu bạn vẫn dùng hết dung lượng trong TOC ngay cả khi bạn chỉ định cả hai tùy chọn này,
chỉ định -tối thiểu-toc thay thế. Tùy chọn này khiến GCC chỉ tạo một mục nhập TOC cho
mọi tệp. Khi bạn chỉ định tùy chọn này, GCC sẽ tạo ra mã chậm hơn và lớn hơn
nhưng sử dụng rất ít không gian TOC. Bạn có thể chỉ muốn sử dụng tùy chọn này trên
các tệp chứa mã được thực thi ít thường xuyên hơn.
-maix64
-maix32
Bật AIX ABI 64 bit và quy ước gọi: con trỏ 64 bit, loại "dài" 64 bit và
cơ sở hạ tầng cần thiết để hỗ trợ họ. Xác định -maix64 ngụ ý -mpowerpc64,
trong khi -maix32 tắt ABI 64-bit và ngụ ý -mno-powerpc64. GCC mặc định là
-maix32.
-mxl-tương thích
-mno-xl-tương thích
Tạo mã phù hợp hơn với ngữ nghĩa trình biên dịch XL của IBM khi sử dụng AIX-
ABI tương thích. Chuyển các đối số dấu phẩy động cho các hàm nguyên mẫu ngoài
đăng ký vùng lưu (RSA) trên ngăn xếp ngoài FPR đối số. Đưng co giả định
gấp đôi quan trọng nhất trong giá trị kép dài 128 bit được làm tròn đúng cách khi
so sánh các giá trị và chuyển đổi thành gấp đôi. Sử dụng tên biểu tượng XL cho đôi dài
các thói quen hỗ trợ.
Quy ước gọi AIX đã được mở rộng nhưng ban đầu không được ghi nhận để xử lý một
Trường hợp K&R C tối nghĩa khi gọi một hàm lấy địa chỉ của các đối số của nó với
ít đối số hơn đã khai báo. Các trình biên dịch XL của IBM truy cập các đối số dấu phẩy động
không phù hợp với RSA từ ngăn xếp khi chương trình con được biên dịch mà không có
tối ưu hóa. Bởi vì luôn lưu trữ các đối số dấu phẩy động trên ngăn xếp là
không hiệu quả và hiếm khi cần thiết, tùy chọn này không được bật theo mặc định và chỉ
cần thiết khi gọi các chương trình con được biên dịch bởi trình biên dịch XL của IBM mà không cần tối ưu hóa.
-mpe
HỖ TRỢ IBM RS / 6000 SP Song song Môi trường (PE). Liên kết một ứng dụng được viết để sử dụng
thông báo chuyển với mã khởi động đặc biệt để cho phép ứng dụng chạy. Các
hệ thống phải có PE được cài đặt ở vị trí tiêu chuẩn (/usr/lpp/ppe.poe/), hoặc là
thông số kỹ thuật tệp phải được ghi đè bằng -specs = tùy chọn để chỉ định thích hợp
vị trí thư mục. Môi trường song song không hỗ trợ các chuỗi, vì vậy -mpe
tùy chọn và -pthread tùy chọn không tương thích.
-đen-tự nhiên
-mang-điện
Trên AIX, Darwin 32 bit và PowerPC GNU / Linux 64 bit, tùy chọn -đen-tự nhiên
ghi đè căn chỉnh do ABI xác định của các loại lớn hơn, chẳng hạn như dấu chấm động kép,
trên ranh giới dựa trên kích thước tự nhiên của chúng. Các tùy chọn -mang-điện hướng dẫn GCC
tuân theo các quy tắc căn chỉnh do ABI chỉ định. GCC mặc định là căn chỉnh tiêu chuẩn
được xác định trong ABI.
Trên Darwin 64-bit, căn chỉnh tự nhiên là mặc định, và -mang-điện không phải là
được hỗ trợ.
-msoft-phao
-mhard-phao
Tạo mã không sử dụng (sử dụng) tập thanh ghi dấu phẩy động. Phần mềm
giả lập dấu phẩy động được cung cấp nếu bạn sử dụng -msoft-phao và vượt qua
tùy chọn GCC khi liên kết.
-msingle-float
-mdouble-float
Tạo mã cho các phép toán dấu phẩy động chính xác đơn hoặc kép.
-mdouble-float ngụ ý -msingle-float.
-msimple-fpu
Không tạo hướng dẫn "sqrt" và "div" cho đơn vị dấu phẩy động phần cứng.
-mfpu =tên
Chỉ định loại đơn vị dấu phẩy động. Giá trị hợp lệ cho tên đang sp_lite (tương đương với
-msingle-float -msimple-fpu), dp_lite (tương đương với -mdouble-float -msimple-fpu),
sp_full (tương đương với -msingle-float), Và dp_full (tương đương với -mdouble-float).
-mxilinx-fpu
Thực hiện tối ưu hóa đơn vị dấu phẩy động trên Xilinx PPC 405/440.
-nhiều
-mno-nhiều
Tạo mã sử dụng (không sử dụng) hướng dẫn tải nhiều từ và
lưu trữ nhiều hướng dẫn từ. Các hướng dẫn này được tạo theo mặc định vào
Hệ thống POWER và không được tạo trên hệ thống PowerPC. Không được dùng -nhiều trên một chút-
hệ thống PowerPC endian, vì những hướng dẫn đó không hoạt động khi bộ xử lý ở
chế độ little-endian. Các trường hợp ngoại lệ là PPC740 và PPC750 cho phép những
hướng dẫn trong chế độ little-endian.
-mstring
-mno-chuỗi
Tạo mã sử dụng (không sử dụng) hướng dẫn chuỗi tải và lưu trữ
chuỗi từ hướng dẫn để lưu nhiều thanh ghi và di chuyển khối nhỏ. Này
các hướng dẫn được tạo theo mặc định trên hệ thống POWER và không được tạo trên PowerPC
các hệ thống. Không được dùng -mstring trên các hệ thống PowerPC loại nhỏ, vì những
hướng dẫn không hoạt động khi bộ xử lý ở chế độ ít kết thúc. Các trường hợp ngoại lệ
là PPC740 và PPC750 cho phép các hướng dẫn này ở chế độ little-endian.
-cập nhật
-mno-cập nhật
Tạo mã sử dụng (không sử dụng) tải hoặc lưu trữ các hướng dẫn cập nhật
thanh ghi cơ sở đến địa chỉ của vị trí bộ nhớ được tính toán. Những hướng dẫn này
được tạo theo mặc định. Nếu bạn dùng -mno-cập nhật, có một cửa sổ nhỏ giữa
thời gian con trỏ ngăn xếp được cập nhật và địa chỉ của khung trước đó là
được lưu trữ, có nghĩa là mã đi qua khung ngăn xếp qua các ngắt hoặc các tín hiệu có thể
lấy dữ liệu bị hỏng.
-mavoid-indexed-address
-mno-tránh-địa chỉ được lập chỉ mục
Tạo mã cố gắng tránh (không tránh) việc sử dụng tải hoặc lưu trữ được lập chỉ mục
hướng dẫn. Các hướng dẫn này có thể bị phạt về hiệu suất trên bộ xử lý Power6
trong một số tình huống nhất định, chẳng hạn như khi bước qua các mảng lớn vượt qua 16M
ranh giới. Tùy chọn này được bật theo mặc định khi nhắm mục tiêu Power6 và bị tắt
nếu không thì.
-mfused-mad
-mno-fused-madd
Tạo mã sử dụng (không sử dụng) dấu phẩy động nhân và tích lũy
hướng dẫn. Các hướng dẫn này được tạo theo mặc định nếu dấu chấm động phần cứng
Được sử dụng. Máy phụ thuộc -mfused-mad tùy chọn hiện được ánh xạ vào máy-
độc lập -ffp-contract = nhanh tùy chọn, và -mno-fused-madd được ánh xạ tới
-ffp-contract = tắt.
-mmulhw
-mno-mulhw
Tạo mã sử dụng (không sử dụng) nửa từ nhân và nhân-tích lũy
hướng dẫn về bộ vi xử lý IBM 405, 440, 464 và 476. Những hướng dẫn này là
được tạo theo mặc định khi nhắm mục tiêu các bộ xử lý đó.
-mdlmzb
-mno-dlmzb
Tạo mã sử dụng (không sử dụng) tìm kiếm chuỗi dlmzb hướng dẫn về IBM
Bộ vi xử lý 405, 440, 464 và 476. Hướng dẫn này được tạo theo mặc định khi
nhắm mục tiêu các bộ xử lý đó.
-mno-bit-căn chỉnh
-mbit-căn chỉnh
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng không (không) bắt buộc các cấu trúc và liên kết
chứa các trường bit được căn chỉnh theo kiểu cơ sở của trường bit.
Ví dụ: theo mặc định, một cấu trúc không chứa gì ngoài 8 trường bit "không dấu" của
chiều dài 1 được căn chỉnh theo ranh giới 4 byte và có kích thước 4 byte. Bằng cách sử dụng
-mno-bit-căn chỉnh, cấu trúc được căn chỉnh theo ranh giới 1 byte và có kích thước 1 byte.
-mno-nghiêm ngặt-căn chỉnh
-mstrict-căn chỉnh
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng không (làm) giả định rằng bộ nhớ không được điều chỉnh
tham chiếu được xử lý bởi hệ thống.
-có thể phân bổ
-không thể di dời
Tạo mã cho phép (không cho phép) một tệp thực thi tĩnh được chuyển đến một
địa chỉ khác nhau tại thời điểm chạy. Một bộ tải hệ thống PowerPC nhúng đơn giản nên
chuyển vị trí toàn bộ nội dung của ".got2" và vị trí 4 byte được liệt kê trong ".fixup"
, một bảng địa chỉ 32 bit được tạo bởi tùy chọn này. Để điều này hoạt động, tất cả
các đối tượng được liên kết với nhau phải được biên dịch bằng -có thể phân bổ or -mrelocatable-lib.
-có thể phân bổ mã sắp xếp ngăn xếp thành ranh giới 8 byte.
-mrelocatable-lib
-mno-configure-lib
Như -có thể phân bổ, -mrelocatable-lib tạo phần ".fixup" để cho phép tĩnh
các tệp thực thi sẽ được di dời vào thời gian chạy, nhưng -mrelocatable-lib không sử dụng
căn chỉnh ngăn xếp nhỏ hơn của -có thể phân bổ. Các đối tượng được biên dịch với -mrelocatable-lib có thể
được liên kết với các đối tượng được biên dịch bằng bất kỳ sự kết hợp nào của -có thể phân bổ tùy chọn.
-mno-toc
-mtoc
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng không (do) giả định rằng thanh ghi 2 chứa
một con trỏ đến một khu vực toàn cầu trỏ đến các địa chỉ được sử dụng trong chương trình.
-mít
-mlittle-endian
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng, biên dịch mã cho bộ xử lý trong một thời gian ngắn-
chế độ endian. Các -mlittle-endian tùy chọn giống như -mít.
-mbig
-mbig-endian
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng, biên dịch mã cho bộ xử lý trong big-
chế độ endian. Các -mbig-endian tùy chọn giống như -mbig.
-mdynamic-no-pic
Trên hệ thống Darwin và Mac OS X, hãy biên dịch mã để nó không thể di chuyển được, nhưng
các tham chiếu bên ngoài của nó có thể định vị lại. Mã kết quả phù hợp với
ứng dụng, nhưng không phải là thư viện được chia sẻ.
-msingle-pic-base
Coi thanh ghi được sử dụng để định địa chỉ PIC là chỉ đọc, thay vì tải nó vào
phần mở đầu cho mỗi chức năng. Hệ thống thời gian chạy chịu trách nhiệm khởi tạo
đăng ký với một giá trị thích hợp trước khi bắt đầu thực thi.
-mpriorifying-limited-insns =ưu tiên
Tùy chọn này kiểm soát mức độ ưu tiên được chỉ định cho vùng điều phối bị hạn chế
hướng dẫn trong lần vượt qua lịch trình thứ hai. Lý lẽ ưu tiên lấy giá trị
0, 1, hoặc là 2 để chỉ định mức độ ưu tiên không, cao nhất hoặc cao nhất thứ hai (tương ứng) cho
hướng dẫn hạn chế thời gian gửi.
-msched-cost-dep =phụ thuộc_type
Tùy chọn này kiểm soát những phụ thuộc nào được mục tiêu coi là tốn kém trong quá trình
lập lịch hướng dẫn. Lý lẽ phụ thuộc_type lấy một trong những điều sau đây
các giá trị:
Không Không phụ thuộc là tốn kém.
tất cả các Tất cả sự phụ thuộc đều tốn kém.
true_store_to_load
Một sự phụ thuộc thực sự từ cửa hàng đến tải là tốn kém.
lưu trữ_to_load
Bất kỳ sự phụ thuộc nào từ cửa hàng đến tải đều tốn kém.
con số
Bất kỳ sự phụ thuộc nào mà độ trễ lớn hơn hoặc bằng con số là tốn kém.
-minsert-Sched-nops =Đề án
Tùy chọn này kiểm soát lược đồ chèn NOP nào được sử dụng trong lần lập lịch thứ hai
đi qua. Lý lẽ Đề án nhận một trong các giá trị sau:
Không Không chèn NOP.
tập giấy Pad với NOP bất kỳ nhóm điều phối nào có vị trí phát hành còn trống, theo
lập lịch nhóm.
tập hợp lại_chính xác
Chèn các NOP để buộc các đơn vị phụ thuộc đắt tiền vào các nhóm riêng biệt. Chèn chính xác
càng nhiều NOP càng tốt để buộc người tham gia vào một nhóm mới, theo ước tính
phân nhóm bộ xử lý.
con số
Chèn các NOP để buộc các đơn vị phụ thuộc đắt tiền vào các nhóm riêng biệt. Chèn con số
NOP để buộc người tham gia vào một nhóm mới.
-mcall-sysv
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng, biên dịch mã bằng cách sử dụng các quy ước gọi
tuân theo dự thảo tháng 1995 năm XNUMX của Giao diện nhị phân ứng dụng System V, PowerPC
bộ xử lý bổ sung. Đây là mặc định trừ khi bạn đã định cấu hình GCC bằng
powerpc - * - eabiaix.
-mcall-sysv-eabi
-mcall-eabi
Chỉ định cả hai -mcall-sysv và -meabi tùy chọn.
-mcall-sysv-noeabi
Chỉ định cả hai -mcall-sysv và -mno-eabi tùy chọn.
-mcall-aixdesc
Trên Hệ thống V.4 và hệ thống PowerPC nhúng, biên dịch mã cho hệ điều hành AIX.
-mcall-linux
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng, biên dịch mã cho GNU dựa trên Linux
hệ thống.
-mcall-freebsd
Trên Hệ thống V.4 và hệ thống PowerPC nhúng, biên dịch mã cho hoạt động FreeBSD
hệ thống.
-mcall-netbsd
Trên Hệ thống V.4 và hệ thống PowerPC nhúng, biên dịch mã cho hoạt động NetBSD
hệ thống.
-mcall-openbsd
Trên Hệ thống V.4 và hệ thống PowerPC nhúng, biên dịch mã cho hoạt động OpenBSD
hệ thống.
-maix-struct-return
Trả lại tất cả các cấu trúc trong bộ nhớ (như được chỉ định bởi AIX ABI).
-msvr4-struct-return
Trả về cấu trúc nhỏ hơn 8 byte trong thanh ghi (như được chỉ định bởi SVR4 ABI).
-mabi =kiểu abi
Mở rộng ABI hiện tại bằng một phần mở rộng cụ thể hoặc xóa phần mở rộng đó. Có giá trị
giá trị là alivec, không có lợi, spe, không nói gì, ibmlongdouble, ieeelongdouble, elfv1,
elfv2.
-mabi = speech
Mở rộng ABI hiện tại với các phần mở rộng SPE ABI. Điều này không thay đổi ABI mặc định,
thay vào đó nó thêm các phần mở rộng SPE ABI vào ABI hiện tại.
-mabi = no-speech
Tắt phần mở rộng Book-E SPE ABI cho ABI hiện tại.
-mabi = ibmlongdouble
Thay đổi ABI hiện tại để sử dụng đôi dài chính xác mở rộng của IBM. Đây là một PowerPC
Tùy chọn SYSV ABI 32-bit.
-mabi = ieeelongdouble
Thay đổi ABI hiện tại để sử dụng đôi dài chính xác mở rộng IEEE. Đây là một PowerPC
Tùy chọn ABI Linux 32-bit.
-mabi = elfv1
Thay đổi ABI hiện tại để sử dụng ELFv1 ABI. Đây là ABI mặc định cho big-endian
PowerPC 64-bit Linux. Ghi đè ABI mặc định yêu cầu hỗ trợ hệ thống đặc biệt và
có khả năng thất bại theo những cách ngoạn mục.
-mabi = elfv2
Thay đổi ABI hiện tại để sử dụng ABI ELFv2. Đây là ABI mặc định cho
endian PowerPC 64-bit Linux. Ghi đè ABI mặc định yêu cầu hệ thống đặc biệt
hỗ trợ và có khả năng thất bại theo những cách ngoạn mục.
-mprototype
-mno-nguyên mẫu
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng giả định rằng tất cả các lệnh gọi đến đối số biến
các chức năng được tạo đúng nguyên mẫu. Nếu không, trình biên dịch phải chèn một lệnh
trước mỗi lệnh gọi không phải nguyên mẫu để đặt hoặc xóa bit 6 của thanh ghi mã điều kiện
(CR) để cho biết liệu các giá trị dấu phẩy động có được chuyển vào dấu phẩy động hay không
đăng ký trong trường hợp hàm nhận đối số biến. Với -mprototype, chỉ các cuộc gọi
đến các hàm đối số biến nguyên mẫu được thiết lập hoặc xóa bit.
-msim
Trên hệ thống PowerPC nhúng, giả sử rằng mô-đun khởi động được gọi là sim-crt0.o và
rằng các thư viện C tiêu chuẩn là libsim.a và libc.a. Đây là mặc định cho
powerpc - * - eabisim cấu hình.
-mmvme
Trên hệ thống PowerPC nhúng, giả sử rằng mô-đun khởi động được gọi là crt0.o và
thư viện C tiêu chuẩn là libmvme.a và libc.a.
-mẹ
Trên hệ thống PowerPC nhúng, giả sử rằng mô-đun khởi động được gọi là crt0.o và
thư viện C tiêu chuẩn là libads.a và libc.a.
-yellowknife
Trên hệ thống PowerPC nhúng, giả sử rằng mô-đun khởi động được gọi là crt0.o và
thư viện C tiêu chuẩn là libyk.a và libc.a.
-mvxworks
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng, chỉ định rằng bạn đang biên dịch
Hệ thống VxWorks.
-thành viên
Trên hệ thống PowerPC nhúng, hãy đặt PPC_EMB bit trong tiêu đề cờ ELF để chỉ ra
việc này eabi tái định cư mở rộng được sử dụng.
-meabi
-mno-eabi
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng không (không) tuân thủ
Giao diện nhị phân ứng dụng (EABI), là một tập hợp các sửa đổi đối với Hệ thống
Thông số kỹ thuật V.4. Lựa chọn -meabi có nghĩa là ngăn xếp được căn chỉnh thành 8 byte
ranh giới, một hàm "__eabi" được gọi từ "main" để thiết lập môi trường EABI,
và -msdata tùy chọn có thể sử dụng cả "r2" và "r13" để trỏ đến hai dữ liệu nhỏ riêng biệt
khu vực. Lựa chọn -mno-eabi có nghĩa là ngăn xếp được căn chỉnh theo ranh giới 16 byte, không
Hàm khởi tạo EABI được gọi từ "main" và -msdata tùy chọn chỉ sử dụng
"r13" để trỏ đến một vùng dữ liệu nhỏ. Các -meabi tùy chọn được bật theo mặc định nếu bạn
đã định cấu hình GCC bằng cách sử dụng một trong các powerpc * - * - eabi * tùy chọn.
-msdata = eabi
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng, hãy đặt "const" nhỏ được khởi tạo chung và
dữ liệu tĩnh trong .sdata2 , được trỏ tới bởi thanh ghi "r2". Đặt nhỏ
được khởi tạo dữ liệu toàn cục và dữ liệu tĩnh không phải "const" trong .sdata phần được nhọn
bằng cách đăng ký "r13". Đặt dữ liệu tĩnh và toàn cầu nhỏ chưa được khởi tạo trong .sbss
phần tiếp giáp với .sdata phần. Các -msdata = eabi Tùy chọn là
không tương thích với -có thể phân bổ Lựa chọn. Các -msdata = eabi tùy chọn cũng đặt
-thành viên tùy chọn.
-msdata = sysv
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng, hãy đưa dữ liệu tĩnh và toàn cầu nhỏ vào
.sdata , được trỏ tới bởi thanh ghi "r13". Đưa toàn cầu nhỏ chưa khởi tạo
và dữ liệu tĩnh trong .sbss phần tiếp giáp với .sdata phần. Các
-msdata = sysv tùy chọn không tương thích với -có thể phân bổ tùy chọn.
-msdata = mặc định
-msdata
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng, nếu -meabi được sử dụng, biên dịch mã giống nhau
as -msdata = eabi, nếu không thì biên dịch mã giống như -msdata = sysv.
-msdata = dữ liệu
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng, đưa dữ liệu toàn cầu nhỏ vào .sdata
phần. Đưa dữ liệu toàn cầu nhỏ chưa được khởi tạo vào .sbss phần. Không được dùng
Tuy nhiên, đăng ký "r13" để giải quyết dữ liệu nhỏ. Đây là hành vi mặc định trừ khi
khác -msdata các tùy chọn được sử dụng.
-msdata = không có
-mno-sdata
Trên hệ thống PowerPC nhúng, hãy đặt tất cả dữ liệu tĩnh và toàn cầu đã khởi tạo trong .dữ liệu
và tất cả dữ liệu chưa được khởi tạo trong .bss phần.
-mblock-move-inline-limit =num
Nội tuyến tất cả các lần di chuyển khối (chẳng hạn như lệnh gọi đến "memcpy" hoặc bản sao cấu trúc) ít hơn hoặc
tương đương với num byte. Giá trị tối thiểu cho num là 32 byte trên mục tiêu 32 bit và 64
byte trên mục tiêu 64 bit. Giá trị mặc định là mục tiêu cụ thể.
-G num
Trên hệ thống PowerPC nhúng, đặt các mục toàn cục và tĩnh nhỏ hơn hoặc bằng num
byte vào dữ liệu nhỏ hoặc phần BSS thay vì dữ liệu thông thường hoặc phần BSS.
Theo mặc định, num là 8. -G num chuyển đổi cũng được chuyển đến trình liên kết. Tất cả các mô-đun
nên được biên dịch với cùng một -G num giá trị.
- tên
-mno-regnames
Trên Hệ thống V.4 và các hệ thống PowerPC nhúng (không) phát ra các tên đăng ký trong
hợp ngữ đầu ra bằng cách sử dụng các hình thức biểu tượng.
-mlongcall
-mno-longcall
Theo mặc định, giả định rằng tất cả các cuộc gọi đều ở xa nên lâu hơn và đắt hơn
trình tự gọi là bắt buộc. Điều này là bắt buộc đối với các cuộc gọi xa hơn 32 megabyte
(33,554,432 byte) từ vị trí hiện tại. Một cuộc gọi ngắn được tạo ra nếu
trình biên dịch biết rằng cuộc gọi không thể ở xa như vậy. Cài đặt này có thể bị ghi đè bởi
thuộc tính hàm "shortcall" hoặc bởi "#pragma cuộc gọi dài(0) ”.
Một số trình liên kết có khả năng phát hiện các cuộc gọi ngoài phạm vi và tạo mã keo trên
con ruồi. Trên các hệ thống này, các cuộc gọi dài là không cần thiết và tạo ra mã chậm hơn. Như
của bài viết này, trình liên kết AIX có thể làm điều này, cũng như trình liên kết GNU cho PowerPC / 64. Nó
cũng được lên kế hoạch thêm tính năng này vào trình liên kết GNU cho các hệ thống PowerPC 32-bit.
Trên hệ thống Darwin / PPC, "#pragma longcall" tạo "jbsr callee, L42", cộng với địa điể̀m chọn lựa
đảo (mã keo). Hai địa chỉ đích đại diện cho callee và nhánh
hòn đảo. Trình liên kết Darwin / PPC thích địa chỉ đầu tiên hơn và tạo "bl callee"
nếu lệnh PPC "bl" đến trực tiếp bộ nhớ; nếu không, trình liên kết
tạo ra "bl L42" để gọi đảo nhánh. Đảo nhánh được nối vào
phần thân của hàm gọi; nó tính toán địa chỉ 32-bit đầy đủ của callee và
nhảy đến nó.
Trên hệ thống Mach-O (Darwin), tùy chọn này hướng trình biên dịch phát ra chất kết dính cho
mọi cuộc gọi trực tiếp và trình liên kết Darwin quyết định sử dụng hay loại bỏ nó.
Trong tương lai, GCC có thể bỏ qua tất cả các thông số kỹ thuật của cuộc gọi dài khi trình liên kết được biết
tạo keo.
-mtls-điểm đánh dấu
-mno-tls-điểm đánh dấu
Đánh dấu (không đánh dấu) các cuộc gọi đến "__tls_get_addr" bằng một vị trí chỉ định chức năng
tranh luận. Việc di dời cho phép trình liên kết kết hợp một cách đáng tin cậy với lệnh gọi hàm với
hướng dẫn thiết lập đối số để tối ưu hóa TLS, từ đó cho phép GCC tốt hơn
lập lịch trình tự.
-pthread
Thêm hỗ trợ cho đa luồng với pthread thư viện. Tùy chọn này đặt cờ cho
cả bộ tiền xử lý và bộ liên kết.
-đề nghị
-mno-người nhận
Tùy chọn này cho phép sử dụng ước tính đối ứng và ước tính căn bậc hai đối ứng
hướng dẫn với các bước Newton-Raphson bổ sung để tăng độ chính xác thay vì
thực hiện phép chia hoặc căn bậc hai và phép chia cho các đối số dấu phẩy động. Bạn nên sử dụng
các -ffast-toán tùy chọn khi sử dụng -đề nghị (hoặc ít nhất -funsafe-math-Optimizations,
-finite-toán-chỉ, -freciprocal-toán và -fno-bẫy-toán học). Lưu ý rằng trong khi
thông lượng của chuỗi thường cao hơn thông lượng của chuỗi không
hướng dẫn tương hỗ, độ chính xác của trình tự có thể được giảm đến 2 ulp
(nghĩa là nghịch đảo của 1.0 bằng 0.99999994) đối với căn bậc hai nghịch đảo.
-mrecip =opt
Tùy chọn này kiểm soát hướng dẫn ước tính đối ứng nào có thể được sử dụng. opt là một
danh sách các tùy chọn được phân tách bằng dấu phẩy, có thể đứng trước dấu "!" để đảo ngược tùy chọn:
"all": bật tất cả các hướng dẫn ước tính, "default": bật các hướng dẫn mặc định,
tương đương với -đề nghị, "none": tắt tất cả các hướng dẫn ước tính, tương đương với
-mno-người nhận; "div": bật hướng dẫn xấp xỉ đối ứng cho cả hai
và độ chính xác gấp đôi; "divf": cho phép phép xấp xỉ đối ứng chính xác một lần
hướng dẫn; "divd": cho phép tính gần đúng đối ứng độ chính xác kép
hướng dẫn; "rsqrt": bật hướng dẫn xấp xỉ căn bậc hai đối ứng
cho cả độ chính xác đơn và kép; "rsqrtf": bật đối ứng độ chính xác đơn
hướng dẫn tính gần đúng căn bậc hai; "rsqrtd": bật độ chính xác kép
hướng dẫn xấp xỉ căn bậc hai nghịch đảo;
Ví dụ, -mrecip = tất cả,! rsqrtd cho phép tất cả ước tính đối ứng
hướng dẫn, ngoại trừ hướng dẫn "FRSQRTE", "XSRSQRTEDP" và "XVRSQRTEDP"
xử lý các phép tính căn bậc hai đối ứng có độ chính xác kép.
-mrecip-độ chính xác
-mno-đối-chính xác
Giả định (không giả định) rằng các hướng dẫn ước tính đối ứng cung cấp cao hơn-
ước tính chính xác hơn được yêu cầu bởi PowerPC ABI. Lựa chọn -mcpu = power6,
-mcpu = power7 or -mcpu = power8 tự động chọn -mrecip-độ chính xác. Đôi-
Các hướng dẫn ước tính căn bậc hai chính xác không được tạo theo mặc định trên low-
máy chính xác, vì chúng không cung cấp ước tính hội tụ sau ba
các bước.
-mveclibabi =kiểu
Chỉ định loại ABI để sử dụng cho vectơ bản chất bằng cách sử dụng thư viện bên ngoài.
Loại duy nhất được hỗ trợ hiện tại là "khối lượng", chỉ định sử dụng
Thư viện Hệ thống con Gia tốc Toán học (MASS) để vectơ hóa bản chất bằng cách sử dụng
thư viện bên ngoài. GCC hiện phát lệnh gọi tới "acosd2", "acosf4", "acoshd2",
"acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4", "atan2d2", "atan2f4", "atand2",
"atanf4", "atanhd2", "atanhf4", "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2",
"coshf4", "erfcd2", "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
"expm1d2", "expm1f4", "hypd2", "hypf4", "lgammad2", "lgammaf4", "log10d2",
"log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4", "logd2", "logf4", "powd2",
"powf4", "sind2", "sinf4", "sinhd2", "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4",
"tanhd2" và "tanhf4" khi tạo mã cho power7. Cả hai -vectơ hóa miễn phí và
-funsafe-math-Optimizations cũng phải được kích hoạt. Các thư viện MASS phải
được chỉ định tại thời gian liên kết.
-mfriz
-mno-friz
Tạo (không tạo) lệnh "friz" khi -funsafe-math-Optimizations
tùy chọn được sử dụng để tối ưu hóa việc làm tròn các giá trị dấu phẩy động thành số nguyên 64 bit và
trở lại dấu phẩy động. Lệnh "friz" không trả về cùng một giá trị nếu
số dấu phẩy động quá lớn để vừa với một số nguyên.
-mpointers-to-nested-hàm
-mno-con trỏ-đến-hàm lồng nhau
Tạo (không tạo) mã để tải lên thanh ghi chuỗi tĩnh (r11) khi nào
gọi thông qua một con trỏ trên hệ thống AIX và Linux 64-bit trong đó một con trỏ hàm
trỏ đến bộ mô tả 3 từ cung cấp địa chỉ hàm, giá trị TOC được tải vào
ghi danh r2và giá trị chuỗi tĩnh sẽ được tải vào thanh ghi r11. Các
-mpointers-to-nested-hàm được bật theo mặc định. Bạn không thể gọi thông qua các con trỏ tới
các hàm lồng nhau hoặc con trỏ đến các hàm được biên dịch bằng các ngôn ngữ khác sử dụng
chuỗi tĩnh nếu bạn sử dụng -mno-con trỏ-đến-hàm lồng nhau.
-msave-toc-gián tiếp
-mno-save-toc-gián tiếp
Tạo (không tạo) mã để lưu giá trị TOC ở vị trí ngăn xếp dành riêng
trong phần mở đầu hàm nếu hàm gọi thông qua một con trỏ trên AIX và 64-bit
Hệ thống Linux. Nếu giá trị TOC không được lưu trong phần mở đầu, thì nó sẽ được lưu ngay trước đó
cuộc gọi thông qua con trỏ. Các -mno-save-toc-gián tiếp tùy chọn là mặc định.
-mcompat-align-parm
-mno-compat-align-parm
Tạo (không tạo) mã để chuyển các tham số cấu trúc với sự liên kết tối đa
64 bit, để tương thích với các phiên bản cũ hơn của GCC.
Các phiên bản cũ hơn của GCC (trước 4.9.0) đã không căn chỉnh chính xác tham số cấu trúc
trên ranh giới 128 bit khi cấu trúc đó chứa một phần tử yêu cầu 128 bit
sự liên kết. Điều này được sửa chữa trong các phiên bản GCC gần đây hơn. Tùy chọn này có thể được sử dụng
để tạo mã tương thích với các chức năng được biên dịch bằng các phiên bản cũ hơn của
GCC.
Trong phiên bản này của trình biên dịch, -mcompat-align-parm là mặc định, ngoại trừ khi
sử dụng Linux ELFv2 ABI.
RX Các lựa chọn
Các tùy chọn dòng lệnh này được xác định cho các mục tiêu RX:
-m64bit-nhân đôi
-m32bit-nhân đôi
Đặt kiểu dữ liệu "kép" là 64 bit (-m64bit-nhân đôi) hoặc 32 bit (-m32bit-nhân đôi)
về kích thước. Mặc định là -m32bit-nhân đôi. Chú thích Phần cứng dấu phẩy động RX chỉ hoạt động
trên các giá trị 32-bit, đó là lý do tại sao mặc định là -m32bit-nhân đôi.
-fpu
-nofpu
Cho phép (-fpu) hoặc tắt (-nofpu) việc sử dụng phần cứng dấu phẩy động RX. Các
mặc định được bật cho RX600 sê-ri và bị vô hiệu hóa đối với RX200 series.
Các lệnh dấu phẩy động chỉ được tạo cho các giá trị dấu phẩy động 32 bit,
tuy nhiên, do đó, phần cứng FPU không được sử dụng để tăng gấp đôi nếu -m64bit-nhân đôi Tùy chọn là
đã sử dụng.
Chú thích Nếu -fpu tùy chọn được kích hoạt sau đó -funsafe-math-Optimizations cũng được kích hoạt
tự động. Điều này là do bản thân các hướng dẫn RX FPU không an toàn.
-mcpu =tên
Chọn loại CPU RX sẽ được nhắm mục tiêu. Hiện tại ba loại được hỗ trợ,
chủng loại RX600 và RX200 phần cứng loạt và cụ thể RX610 CPU. Mặc định là
RX600.
Sự khác biệt duy nhất giữa RX600 và RX610 est que le RX610 không hỗ trợ
Hướng dẫn "MVTIPL".
Sản phẩm RX200 sê-ri không có đơn vị dấu phẩy động phần cứng và do đó -nofpu được kích hoạt
theo mặc định khi loại này được chọn.
-mbig-endian-dữ liệu
-mlittle-endian-data
Lưu trữ dữ liệu (nhưng không phải mã) ở định dạng big-endian. Mặc định là
-mlittle-endian-data, tức là để lưu trữ dữ liệu ở định dạng little-endian.
-msmall-data-limit =N
Chỉ định kích thước tối đa tính bằng byte của biến toàn cục và biến tĩnh có thể được đặt
vào vùng dữ liệu nhỏ. Sử dụng vùng dữ liệu nhỏ có thể dẫn đến nhỏ hơn và nhanh hơn
mã, nhưng kích thước của khu vực bị hạn chế và người lập trình có thể đảm bảo rằng
vùng không tràn. Ngoài ra, khi vùng dữ liệu nhỏ được sử dụng, một trong những
thanh ghi (thường là "r13") được sử dụng để trỏ đến khu vực này, vì vậy nó không
còn có sẵn để trình biên dịch sử dụng. Điều này có thể dẫn đến chậm hơn và / hoặc lớn hơn
mã nếu các biến được đẩy lên ngăn xếp thay vì được giữ trong thanh ghi này.
Lưu ý, các biến phổ biến (biến chưa được khởi tạo) và hằng số là
không được đưa vào vùng dữ liệu nhỏ vì chúng được gán cho các phần khác trong
đầu ra có thể thực thi.
Giá trị mặc định là XNUMX, giá trị này sẽ vô hiệu hóa tính năng này. Lưu ý, tính năng này không
được bật theo mặc định với mức tối ưu hóa cao hơn (-O2 vv) vì
các tác động có thể có hại của việc lưu trữ một sổ đăng ký. Đó là vào các lập trình viên
để thử nghiệm và khám phá xem liệu tính năng này có mang lại lợi ích cho chương trình của họ hay không. Nhìn thấy
mô tả của -mpid tùy chọn để mô tả cách đăng ký thực tế để
giữ con trỏ vùng dữ liệu nhỏ được chọn.
-msim
-mno-sim
Sử dụng thời gian chạy trình mô phỏng. Mặc định là sử dụng thời gian chạy dành riêng cho bảng libgloss.
-mas100-cú pháp
-mno-as100-cú pháp
Khi tạo đầu ra trình hợp dịch, hãy sử dụng cú pháp tương thích với AS100 của Renesas
người lắp ráp. Cú pháp này cũng có thể được xử lý bởi trình hợp dịch GAS, nhưng nó có một số
hạn chế nên nó không được tạo theo mặc định.
-mmax-hằng số-kích thước =N
Chỉ định kích thước tối đa, tính bằng byte, của một hằng số có thể được sử dụng làm toán hạng trong
một hướng dẫn RX. Mặc dù tập lệnh RX cho phép các hằng số lên đến 4
độ dài byte sẽ được sử dụng trong hướng dẫn, giá trị dài hơn tương đương với giá trị dài hơn
hướng dẫn. Do đó, trong một số trường hợp, có thể có lợi khi hạn chế kích thước của
hằng số được sử dụng trong hướng dẫn. Thay vào đó, các hằng số quá lớn
được đặt vào một nhóm không đổi và được tham chiếu thông qua hướng đăng ký.
Giá trị N có thể nằm trong khoảng từ 0 đến 4. Giá trị 0 (mặc định) hoặc 4 có nghĩa là
cho phép các hằng số có kích thước bất kỳ.
-mthư giãn
Bật thư giãn trình liên kết. Thư giãn trình liên kết là một quá trình trong đó trình liên kết cố gắng
để giảm kích thước của chương trình bằng cách tìm các phiên bản ngắn hơn của các hướng dẫn khác nhau.
Vô hiệu hóa theo mặc định.
-mint-register =N
Chỉ định số lượng thanh ghi để dự trữ cho các chức năng xử lý ngắt nhanh. Các
giá trị N có thể nằm trong khoảng từ 0 đến 4. Giá trị 1 có nghĩa là thanh ghi "r13" được bảo lưu
để sử dụng độc quyền các trình xử lý ngắt nhanh. Giá trị của 2 dự trữ "r13" và
"r12". Giá trị của 3 dự trữ "r13", "r12" và "r11" và giá trị của 4 dự trữ "r13"
thông qua "r10". Giá trị 0, mặc định, không đặt trước bất kỳ thanh ghi nào.
-msave-acc-in-interrupt
Chỉ định rằng các hàm xử lý ngắt phải bảo toàn thanh ghi bộ tích lũy.
Điều này chỉ cần thiết nếu mã bình thường có thể sử dụng thanh ghi bộ tích lũy, chẳng hạn
bởi vì nó thực hiện các phép nhân 64 bit. Mặc định là bỏ qua bộ tích lũy
vì điều này làm cho trình xử lý ngắt nhanh hơn.
-mpid
-mno-pid
Cho phép tạo dữ liệu độc lập về vị trí. Khi được bật, bất kỳ quyền truy cập nào vào
dữ liệu hằng được thực hiện thông qua một độ lệch từ một địa chỉ cơ sở được giữ trong một thanh ghi. Cái này
cho phép xác định vị trí của dữ liệu không đổi tại thời gian chạy mà không yêu cầu
tệp thực thi được di dời, đây là một lợi ích cho các ứng dụng nhúng với
hạn chế về bộ nhớ. Dữ liệu có thể được sửa đổi không bị ảnh hưởng bởi tùy chọn này.
Lưu ý, việc sử dụng tính năng này sẽ dự trữ một thanh ghi, thường là "r13", cho dữ liệu không đổi
địa chỉ cơ sở. Điều này có thể dẫn đến mã chậm hơn và / hoặc lớn hơn, đặc biệt là trong
chức năng.
Thanh ghi thực tế được chọn để giữ địa chỉ cơ sở dữ liệu không đổi phụ thuộc vào việc
các -msmall-data-giới hạn và / hoặc -mint-đăng ký các tùy chọn dòng lệnh được kích hoạt.
Bắt đầu với thanh ghi "r13" và tiếp tục đi xuống, các thanh ghi được cấp phát đầu tiên
để đáp ứng các yêu cầu của -mint-đăng kýthì -mpid và cuối cùng
-msmall-data-giới hạn. Do đó, có thể thanh ghi vùng dữ liệu nhỏ là "r8"
nếu cả hai -mint-register = 4 và -mpid được chỉ định trên dòng lệnh.
Theo mặc định, tính năng này không được kích hoạt. Mặc định có thể được khôi phục thông qua -mno-pid
tùy chọn dòng lệnh.
-mno-cảnh báo-nhiều-gián đoạn nhanh
-mwarn-nhiều-nhanh-ngắt
Ngăn GCC đưa ra thông báo cảnh báo nếu nó tìm thấy nhiều hơn một ngắt nhanh
xử lý khi nó đang biên dịch một tệp. Mặc định là đưa ra cảnh báo cho mỗi lần bổ sung
trình xử lý ngắt nhanh được tìm thấy, vì RX chỉ hỗ trợ một ngắt như vậy.
Lưu ý: Tùy chọn dòng lệnh GCC chung -sửa chữa-reg có ý nghĩa đặc biệt đối với RX
cổng khi được sử dụng với thuộc tính chức năng "ngắt". Thuộc tính này chỉ ra một
chức năng nhằm xử lý các ngắt nhanh. GCC đảm bảo rằng nó chỉ sử dụng các thanh ghi
"r10", "r11", "r12" và / hoặc "r13" và chỉ với điều kiện là việc sử dụng bình thường
đăng ký tương ứng đã bị hạn chế thông qua -sửa chữa-reg or -mint-đăng ký
các tùy chọn dòng lệnh.
S / 390 và zSeries Các lựa chọn
Đây là những -m các tùy chọn được xác định cho kiến trúc S / 390 và zSeries.
-mhard-phao
-msoft-phao
Sử dụng (không sử dụng) các hướng dẫn và đăng ký dấu phẩy động phần cứng cho dấu phẩy động
các phép toán điểm. Khi nào -msoft-phao được chỉ định, các chức năng trong libgcc.a đã quen với
thực hiện các phép toán dấu phẩy động. Khi nào -mhard-phao được chỉ định, trình biên dịch
tạo các lệnh dấu phẩy động IEEE. Đây là mặc định.
-mhard-dfp
-mno-hard-dfp
Sử dụng (không sử dụng) hướng dẫn phần cứng dấu phẩy động-thập phân cho số thập phân-
các phép toán dấu phẩy động. Khi nào -mno-hard-dfp được chỉ định, các chức năng trong libgcc.a đang
được sử dụng để thực hiện các phép toán dấu phẩy động thập phân. Khi nào -mhard-dfp được chỉ định,
trình biên dịch tạo ra các hướng dẫn phần cứng dấu phẩy động thập phân. Đây là mặc định
cho -march = z9-ec hoặc cao hơn.
-mlong-đôi-64
-mlong-đôi-128
Các công tắc này kiểm soát kích thước của loại "dài đôi". Kích thước 64 bit làm cho
loại "dài kép" tương đương với loại "kép". Đây là mặc định.
-mbackchain
-mno-backchain
Lưu trữ (không lưu trữ) địa chỉ của khung của người gọi dưới dạng con trỏ backchain vào
khung ngăn xếp của callee. Có thể cần một chuỗi nền để cho phép gỡ lỗi bằng các công cụ
không hiểu thông tin khung cuộc gọi DWARF 2. Khi nào -mno-pack-stack là
hiệu ứng, con trỏ backchain được lưu trữ ở dưới cùng của khung ngăn xếp; khi nào
-mpack-stack có hiệu lực, chuỗi nền được đặt vào từ trên cùng của
Vùng lưu thanh ghi 96/160 byte.
Nói chung, mã được biên dịch bằng -mbackchain tương thích với cuộc gọi với mã được biên dịch bằng
-mmo-backchain; tuy nhiên, việc sử dụng chuỗi nền cho mục đích gỡ lỗi thường yêu cầu
mà toàn bộ hệ nhị phân được xây dựng với -mbackchain. Lưu ý rằng sự kết hợp của
-mbackchain, -mpack-stack và -mhard-phao không được hỗ trợ. Để xây dựng một
sử dụng nhân linux -msoft-phao.
Mặc định là không duy trì chuỗi lưng.
-mpack-stack
-mno-pack-stack
Sử dụng (không sử dụng) bố cục ngăn xếp được đóng gói. Khi nào -mno-pack-stack được chỉ định,
trình biên dịch sử dụng tất cả các trường của vùng lưu thanh ghi 96/160 byte chỉ cho
mục đích mặc định; các trường không sử dụng vẫn chiếm không gian ngăn xếp. Khi nào -mpack-stack is
đã chỉ định, các vị trí lưu đăng ký được đóng gói dày đặc ở đầu lưu đăng ký
khu vực; không gian không sử dụng được tái sử dụng cho các mục đích khác, cho phép sử dụng hiệu quả hơn
không gian ngăn xếp có sẵn. Tuy nhiên, khi -mbackchain cũng có hiệu lực, trên cùng
từ vùng lưu luôn được sử dụng để lưu chuỗi lưng và địa chỉ trả hàng
đăng ký luôn được lưu hai từ bên dưới backchain.
Miễn là chuỗi khung ngăn xếp không được sử dụng, mã được tạo bằng -mpack-stack
cuộc gọi tương thích với mã được tạo bằng -mno-pack-stack. Lưu ý rằng một số không FSF
bản phát hành GCC 2.95 cho mã được tạo S / 390 hoặc zSeries sử dụng khung ngăn xếp
backchain tại thời điểm chạy, không chỉ cho mục đích gỡ lỗi. Mã như vậy không phải là cuộc gọi-
tương thích với mã được biên dịch bằng -mpack-stack. Ngoài ra, lưu ý rằng sự kết hợp của
-mbackchain, -mpack-stack và -mhard-phao không được hỗ trợ. Để xây dựng một
sử dụng nhân linux -msoft-phao.
Mặc định là không sử dụng bố cục ngăn xếp được đóng gói.
-msmall-executive
-mno-small-executive
Tạo (hoặc không tạo) mã bằng cách sử dụng lệnh "bras" để thực hiện chương trình con
cuộc gọi. Điều này chỉ hoạt động đáng tin cậy nếu tổng kích thước thực thi không vượt quá 64k.
Mặc định là sử dụng lệnh "basr" thay thế, lệnh này không có lệnh này
sự hạn chế.
-m64
-m31
Thời Gian -m31 được chỉ định, tạo mã tuân theo GNU / Linux cho S / 390 ABI. Khi nào
-m64 được chỉ định, tạo mã tuân theo GNU / Linux cho zSeries ABI. Cái này
cho phép GCC đặc biệt tạo ra các lệnh 64-bit. Cho s390 mục tiêu,
mặc định là -m31, trong khi s390x mục tiêu mặc định thành -m64.
-mzarch
-mesa
Thời Gian -mzarch được chỉ định, tạo mã bằng cách sử dụng các hướng dẫn có sẵn trên
z / Kiến trúc. Khi nào -mesa được chỉ định, tạo mã bằng cách sử dụng các hướng dẫn
có sẵn trên ESA / 390. Lưu ý rằng -mesa không thể với -m64. Khi tạo
mã tuân thủ GNU / Linux cho S / 390 ABI, mặc định là -mesa. Khi tạo
mã tuân thủ GNU / Linux cho zSeries ABI, mặc định là -mzarch.
-mmvcle
-mno-mvcle
Tạo (hoặc không tạo) mã bằng cách sử dụng lệnh "mvcle" để thực hiện khối
di chuyển. Khi nào -mno-mvcle được chỉ định, hãy sử dụng vòng lặp "mvc" để thay thế. Đây là mặc định
trừ khi tối ưu hóa kích thước.
-mdebug
-mno-gỡ lỗi
In (hoặc không in) thông tin gỡ lỗi bổ sung khi biên dịch. Mặc định là
để không in thông tin gỡ lỗi.
-march =loại cpu
Tạo mã chạy trên loại cpu, là tên của một hệ thống đại diện cho một
loại bộ xử lý nhất định. Các giá trị có thể có cho loại cpu đang g5, g6, z900, z990, z9-109,
z9-ec, z10, z196và zEC12. Khi tạo mã bằng cách sử dụng các hướng dẫn có sẵn trên
z / Kiến trúc, mặc định là -march = z900. Nếu không, mặc định là -march = g5.
-mtune =loại cpu
Điều chỉnh để loại cpu mọi thứ áp dụng về mã đã tạo, ngoại trừ ABI
và tập hợp các hướng dẫn có sẵn. Danh sách của loại cpu các giá trị giống như đối với
-tháng Ba. Giá trị mặc định là giá trị được sử dụng cho -tháng Ba.
-mtpf-dấu vết
-mno-tpf-dấu vết
Tạo mã bổ sung (không thêm) trong các nhánh cụ thể của TPF OS để theo dõi các quy trình
trong hệ điều hành. Tùy chọn này bị tắt theo mặc định, ngay cả khi biên dịch cho
HĐH TPF.
-mfused-mad
-mno-fused-madd
Tạo mã sử dụng (không sử dụng) dấu phẩy động nhân và tích lũy
hướng dẫn. Các hướng dẫn này được tạo theo mặc định nếu dấu chấm động phần cứng
Được sử dụng.
-mwarn-framesize =kích thước khung
Phát ra cảnh báo nếu chức năng hiện tại vượt quá kích thước khung hình đã cho. Bởi vì đây là
kiểm tra thời gian biên dịch nó không cần phải là một vấn đề thực sự khi chương trình chạy. Nó
nhằm xác định các chức năng có thể gây ra tràn ngăn xếp. Nó là
hữu ích được sử dụng trong môi trường có kích thước ngăn xếp hạn chế, ví dụ như nhân linux.
-mwarn-dynamicstack
Phát ra cảnh báo nếu hàm gọi "alloca" hoặc sử dụng mảng có kích thước động. Cái này
nói chung là một ý tưởng tồi với kích thước ngăn xếp hạn chế.
-mstack-Guard =bảo vệ ngăn xếp
-mstack-size =kích thước ngăn xếp
Nếu các tùy chọn này được cung cấp, mặt sau của S / 390 sẽ phát ra các hướng dẫn bổ sung trong
phần mở đầu hàm kích hoạt bẫy nếu kích thước ngăn xếp là bảo vệ ngăn xếp byte trên
kích thước ngăn xếp (hãy nhớ rằng ngăn xếp trên S / 390 phát triển xuống dưới). Nếu bảo vệ ngăn xếp
tùy chọn bị bỏ qua công suất nhỏ nhất của 2 lớn hơn kích thước khung của trình biên dịch
chức năng được chọn. Các tùy chọn này nhằm mục đích được sử dụng để giúp gỡ lỗi ngăn xếp
vấn đề tràn. Mã được phát ra bổ sung chỉ gây ra chi phí nhỏ và
do đó cũng có thể được sử dụng trong các hệ thống giống như sản xuất mà không có hiệu suất cao hơn
suy thoái. Các giá trị đã cho phải là lũy thừa chính xác của 2 và kích thước ngăn xếp phải là
lớn hơn bảo vệ ngăn xếp không vượt quá 64k. Để có hiệu quả, bổ sung
mã đưa ra giả định rằng ngăn xếp bắt đầu tại một địa chỉ được căn chỉnh với giá trị
được cho bởi kích thước ngăn xếp. Các bảo vệ ngăn xếp tùy chọn chỉ có thể được sử dụng cùng với
kích thước ngăn xếp.
-mhotpatch =lời nói trước,post-Halfwords
Nếu tùy chọn bản vá nóng được bật, phần mở đầu của chức năng "bản vá nóng" sẽ được tạo cho
tất cả các chức năng trong đơn vị biên dịch. Nhãn funtion được gắn trước với
số lượng lệnh NOP hai byte (lời nói trước, tối đa 1000000). Sau
nhãn, 2 * post-Halfwords byte được thêm vào, sử dụng các hướng dẫn giống như NOP lớn nhất
kiến trúc cho phép (tối đa 1000000).
Nếu cả hai đối số đều bằng XNUMX, tính năng khớp nóng sẽ bị vô hiệu hóa.
Tùy chọn này có thể được ghi đè cho các chức năng riêng lẻ với thuộc tính "hotpatch".
Điểm số Các lựa chọn
Các tùy chọn này được xác định để triển khai Điểm:
-meb
Biên dịch mã cho chế độ big-endian. Đây là mặc định.
-mel
Biên dịch mã cho chế độ little-endian.
-mnhwloop
Tắt tạo hướng dẫn "bcnz".
-muls
Cho phép tạo các hướng dẫn lưu trữ và tải không được chỉ định.
-ừm
Cho phép sử dụng các hướng dẫn tích lũy nhiều lần. Bị tắt theo mặc định.
-mcore5
Chỉ định SCORE5 làm kiến trúc đích.
-mscore5u
Chỉ định SCORE5U của kiến trúc đích.
-mcore7
Chỉ định SCORE7 làm kiến trúc đích. Đây là mặc định.
-mscore7d
Chỉ định SCORE7D làm kiến trúc đích.
SH Các lựa chọn
Kia là -m các tùy chọn được xác định cho việc triển khai SH:
-m1 Tạo mã cho SH1.
-m2 Tạo mã cho SH2.
-m2e
Tạo mã cho SH2e.
-m2a-nofpu
Tạo mã cho SH2a không có FPU hoặc cho SH2a-FPU theo cách sao cho
đơn vị dấu phẩy động không được sử dụng.
-m2a-duy nhất
Tạo mã cho SH2a-FPU, theo cách không có dấu phẩy động chính xác kép
các hoạt động được sử dụng.
-m2a-đơn
Tạo mã cho SH2a-FPU giả sử đơn vị dấu phẩy động ở độ chính xác đơn
theo mặc định.
-m2a
Tạo mã cho SH2a-FPU giả sử đơn vị dấu phẩy động có độ chính xác kép
theo mặc định.
-m3 Tạo mã cho SH3.
-m3e
Tạo mã cho SH3e.
-m4-nofpu
Tạo mã cho SH4 mà không có đơn vị dấu phẩy động.
-m4-duy nhất
Tạo mã cho SH4 bằng đơn vị dấu phẩy động chỉ hỗ trợ đơn-
số học chính xác.
-m4-đơn
Tạo mã cho SH4 giả sử đơn vị dấu phẩy động ở chế độ chính xác đơn
theo mặc định.
-m4 Tạo mã cho SH4.
-m4-100
Tạo mã cho SH4-100.
-m4-100-nofpu
Tạo mã cho SH4-100 theo cách mà đơn vị dấu phẩy động không được sử dụng.
-m4-100-đơn
Tạo mã cho SH4-100 giả sử đơn vị dấu phẩy động ở chế độ chính xác đơn
theo mặc định.
-m4-100-duy nhất
Tạo mã cho SH4-100 theo cách không có dấu phẩy động chính xác kép
các hoạt động được sử dụng.
-m4-200
Tạo mã cho SH4-200.
-m4-200-nofpu
Tạo mã cho SH4-200 mà không theo cách mà đơn vị dấu phẩy động không
đã sử dụng.
-m4-200-đơn
Tạo mã cho SH4-200 giả sử đơn vị dấu phẩy động ở chế độ chính xác đơn
theo mặc định.
-m4-200-duy nhất
Tạo mã cho SH4-200 theo cách không có dấu phẩy động chính xác kép
các hoạt động được sử dụng.
-m4-300
Tạo mã cho SH4-300.
-m4-300-nofpu
Tạo mã cho SH4-300 mà không theo cách mà đơn vị dấu phẩy động không
đã sử dụng.
-m4-300-đơn
Tạo mã cho SH4-300 theo cách không có dấu phẩy động chính xác kép
các hoạt động được sử dụng.
-m4-300-duy nhất
Tạo mã cho SH4-300 theo cách không có dấu phẩy động chính xác kép
các hoạt động được sử dụng.
-m4-340
Tạo mã cho SH4-340 (không MMU, không FPU).
-m4-500
Tạo mã cho SH4-500 (không có FPU). Vượt qua -isa = sh4-nofpu cho trình lắp ráp.
-m4a-nofpu
Tạo mã cho SH4al-dsp hoặc SH4a theo cách sao cho dấu phẩy động
đơn vị không được sử dụng.
-m4a-duy nhất
Tạo mã cho SH4a, theo cách không có dấu phẩy động chính xác kép
các hoạt động được sử dụng.
-m4a-đơn
Tạo mã cho SH4a giả sử đơn vị dấu phẩy động ở độ chính xác đơn
theo mặc định.
-m4a
Tạo mã cho SH4a.
-m4al
Giống như -m4a-nofpu, ngoại trừ việc nó hoàn toàn trôi qua -dsp cho trình lắp ráp. GCC
không tạo bất kỳ hướng dẫn DSP nào vào lúc này.
-m5-32media
Tạo mã 32-bit cho SHmedia.
-m5-32media-nofpu
Tạo mã 32-bit cho SHmedia theo cách mà đơn vị dấu phẩy động không
đã sử dụng.
-m5-64media
Tạo mã 64-bit cho SHmedia.
-m5-64media-nofpu
Tạo mã 64-bit cho SHmedia theo cách mà đơn vị dấu phẩy động không
đã sử dụng.
-m5-nhỏ gọn
Tạo mã cho SHcompact.
-m5-nhỏ gọn-nofpu
Tạo mã cho SHcompact theo cách mà đơn vị dấu phẩy động không được sử dụng.
-mb Biên dịch mã cho bộ xử lý ở chế độ big-endian.
-ml Biên dịch mã cho bộ xử lý ở chế độ little-endian.
-mdalign
Căn chỉnh nhân đôi ở ranh giới 64 bit. Lưu ý rằng điều này thay đổi quy ước gọi,
và do đó một số hàm từ thư viện C chuẩn không hoạt động trừ khi bạn biên dịch lại
nó đầu tiên với -mdalign.
-mthư giãn
Rút ngắn một số tham chiếu địa chỉ tại thời điểm liên kết, khi có thể; sử dụng tùy chọn trình liên kết
-thư giãn.
-bigtable
Sử dụng hiệu số 32-bit trong bảng "chuyển đổi". Mặc định là sử dụng hiệu số 16-bit.
-mbitops
Cho phép sử dụng hướng dẫn thao tác bit trên SH2A.
-mfmovd
Cho phép sử dụng hướng dẫn "fmovd". Đánh dấu -mdalign cho các ràng buộc liên kết.
-mrenesas
Tuân thủ các quy ước gọi điện do Renesas xác định.
-mno-renesas
Tuân thủ các quy ước kêu gọi được xác định cho GCC trước các công ước Renesas
Đã có sẵn. Tùy chọn này là mặc định cho tất cả các mục tiêu của chuỗi công cụ SH.
-mnomacsave
Đánh dấu thanh ghi "MAC" là cuộc gọi che phủ, ngay cả khi -mrenesas được đưa ra.
-mieee
-mno-ieee
Kiểm soát việc tuân thủ IEEE của phép so sánh dấu phẩy động, điều này ảnh hưởng đến việc xử lý
trường hợp kết quả của phép so sánh không có thứ tự. Theo mặc định -mieee is
được kích hoạt ngầm. Nếu như -ffinite-math-chỉ được kích hoạt -mno-ieee được thiết lập ngầm,
dẫn đến việc so sánh dấu phẩy động lớn hơn và nhỏ hơn nhanh hơn. Các
Cài đặt implcit có thể bị ghi đè bằng cách chỉ định một trong hai -mieee or -mno-ieee.
-minline-ic_invalidate
Mã nội tuyến để làm mất hiệu lực các mục trong bộ đệm chỉ dẫn sau khi thiết lập chức năng lồng nhau
trampolines. Tùy chọn này không có hiệu lực nếu -musermode đang có hiệu lực và đã chọn
tùy chọn tạo mã (ví dụ: -m4) không cho phép sử dụng hướng dẫn "icbi".
Nếu tùy chọn tạo mã đã chọn không cho phép sử dụng "icbi"
hướng dẫn, và -musermode không có hiệu lực, mã nội tuyến thao túng
mảng địa chỉ bộ đệm chỉ lệnh trực tiếp với một ghi kết hợp. Điều này không chỉ
yêu cầu chế độ đặc quyền tại thời điểm chạy, nhưng nó cũng không thành công nếu dòng bộ đệm
được ánh xạ qua TLB và đã trở thành không được ánh xạ.
-kích thước nhỏ
Kích thước và vị trí hướng dẫn kết xuất trong mã lắp ráp.
-mpadstruct
Tùy chọn này không được dùng nữa. Nó đệm cấu trúc thành nhiều của 4 byte, đó là
không tương thích với SH ABI.
-matomic-model =kiểu mẫu
Đặt mô hình hoạt động nguyên tử và các tham số bổ sung dưới dạng dấu phẩy được phân tách
danh sách. Để biết chi tiết về các chức năng tích hợp nguyên tử, hãy xem __nguyên tử Nội trang. Các
các mô hình và thông số sau được hỗ trợ:
không ai
Vô hiệu hóa trình tự nguyên tử do trình biên dịch tạo và phát lệnh gọi thư viện cho nguyên tử
các hoạt động. Đây là mặc định nếu mục tiêu không phải là "sh * - * - linux *".
mềm-gusa
Tạo chuỗi nguyên tử phần mềm gUSA tương thích GNU / Linux cho nguyên tử được xây dựng-
trong các chức năng. Các trình tự nguyên tử được tạo ra yêu cầu hỗ trợ thêm từ
mã xử lý ngắt / ngoại lệ của hệ thống và chỉ phù hợp với SH3 * và
Hệ thống đơn nhân SH4 *. Tùy chọn này được bật theo mặc định khi mục tiêu là
"sh * - * - linux *" và SH3 * hoặc SH4 *. Khi mục tiêu là SH4A, tùy chọn này cũng sẽ
sử dụng một phần hướng dẫn nguyên tử phần cứng "movli.l" và "movco.l" để
tạo mã hiệu quả hơn, trừ khi khắt khe được quy định.
mềm-tcb
Tạo chuỗi nguyên tử phần mềm sử dụng một biến trong điều khiển luồng
khối. Đây là một biến thể của trình tự gUSA cũng có thể được sử dụng trên SH1 *
và mục tiêu SH2 *. Các trình tự nguyên tử được tạo yêu cầu hỗ trợ thêm từ
mã xử lý ngắt / ngoại lệ của hệ thống và chỉ phù hợp với
hệ thống lõi đơn. Khi sử dụng mô hình này, gbr-offset = tham số phải là
cũng được chỉ định.
mềm-imask
Tạo chuỗi nguyên tử phần mềm tạm thời vô hiệu hóa ngắt bằng cách cài đặt
"SR.IMASK = 1111". Mô hình này chỉ hoạt động khi chương trình chạy ở chế độ đặc quyền
và chỉ thích hợp cho các hệ thống lõi đơn. Hỗ trợ bổ sung từ
mã xử lý ngắt / ngoại lệ của hệ thống là không bắt buộc. Mô hình này là
được bật theo mặc định khi mục tiêu là "sh * - * - linux *" và SH1 * hoặc SH2 *.
cứng-llcs
Tạo chuỗi nguyên tử phần cứng bằng cách sử dụng hướng dẫn "movli.l" và "movco.l"
chỉ một. Tính năng này chỉ có trên SH4A và phù hợp với các hệ thống đa lõi.
Vì các hướng dẫn phần cứng chỉ hỗ trợ các biến nguyên tử 32 bit truy cập vào 8
hoặc các biến 16 bit được mô phỏng với các truy cập 32 bit. Mã được biên dịch với cái này
tùy chọn cũng sẽ tương thích với mô hình nguyên tử phần mềm khác
hệ thống xử lý ngắt / ngoại lệ nếu được thực thi trên hệ thống SH4A. Thêm vào
không cần hỗ trợ từ mã xử lý ngắt / ngoại lệ của hệ thống
cho mô hình này.
gbr-offset =
Tham số này chỉ định độ lệch theo byte của biến trong điều khiển luồng
cấu trúc khối sẽ được sử dụng bởi các trình tự nguyên tử được tạo ra khi
mềm-tcb mô hình đã được chọn. Đối với các mô hình khác, thông số này bị bỏ qua.
Giá trị được chỉ định phải là bội số nguyên của bốn và trong phạm vi 0-1020.
khắt khe
Tham số này ngăn cản việc sử dụng hỗn hợp nhiều mô hình nguyên tử, mặc dù chúng
sẽ tương thích và sẽ làm cho trình biên dịch tạo ra các chuỗi nguyên tử của
chỉ mô hình được chỉ định.
-mtas
Tạo opcode "tas.b" cho "__atomic_test_and_set". Lưu ý rằng tùy thuộc vào
cấu hình phần cứng và phần mềm cụ thể, điều này có thể làm giảm hiệu suất tổng thể
do dòng bộ đệm toán hạng tuôn ra được ngụ ý bởi lệnh "tas.b". Trên
bộ xử lý SH4A đa lõi, lệnh "tas.b" phải được sử dụng thận trọng vì nó
có thể dẫn đến hỏng dữ liệu đối với một số cấu hình bộ đệm nhất định.
-mprefergot
Khi tạo mã độc lập với vị trí, hãy phát ra các lệnh gọi hàm bằng Chênh lệch Chung
Bảng thay vì Bảng liên kết thủ tục.
-musermode
-mno-usermode
Không cho phép (allow) trình biên dịch tạo mã chế độ đặc quyền. Xác định
-musermode cũng ngụ ý -mno-inline-ic_invalidate nếu mã nội tuyến sẽ không hoạt động
ở chế độ người dùng. -musermode là mặc định khi mục tiêu là "sh * - * - linux *". Nếu
mục tiêu là SH1 * hoặc SH2 * -musermode không có hiệu lực, vì không có chế độ người dùng.
-multcost =con số
Đặt chi phí để giả định cho một cấp số nhân.
-mdiv =chiến lược
Đặt chiến lược chia sẽ được sử dụng cho các phép toán chia số nguyên. Đối với SHmedia
chiến lược có thể là một trong số:
fp Thực hiện phép toán trong dấu phẩy động. Điều này có độ trễ rất cao, nhưng cần
chỉ một số hướng dẫn, vì vậy nó có thể là một lựa chọn tốt nếu mã của bạn có đủ
ILP dễ khai thác để cho phép trình biên dịch lập lịch dấu phẩy động
hướng dẫn cùng với các hướng dẫn khác. Phép chia cho XNUMX gây ra một
ngoại lệ dấu phẩy động.
mời Sử dụng các phép toán số nguyên để tính toán nghịch đảo của số chia, sau đó
nhân cổ tức với nghịch đảo. Chiến lược này cho phép CSE và nâng cấp
của phép tính nghịch đảo. Phép chia cho số XNUMX tính toán một kết quả không xác định,
nhưng không mắc bẫy.
inv: minlat
Một biến thể của mời ở đâu, nếu không tìm thấy CSE hoặc cơ hội tích trữ, hoặc nếu
toàn bộ hoạt động đã được chuyển đến cùng một nơi, giai đoạn cuối cùng của
phép tính nghịch đảo được đan xen với phép nhân cuối cùng để giảm tổng thể
độ trễ, với chi phí sử dụng thêm một số hướng dẫn và do đó cung cấp ít
lập lịch các cơ hội với mã khác.
cuộc gọi
Gọi một hàm thư viện thường triển khai inv: minlat chiến lược. Cái này
cung cấp mật độ mã cao cho các biên dịch "m5- * media-nofpu".
gọi2
Sử dụng một điểm vào khác của cùng một hàm thư viện, nơi nó giả định rằng một
con trỏ đến một bảng tra cứu đã được thiết lập, điều này làm hiển thị tải con trỏ
cho CSE và tối ưu hóa lưu trữ mã.
inv: gọi
inv: call2
inv: fp
Sử dụng mời thuật toán để tạo mã ban đầu, nhưng nếu mã vẫn
không được tối ưu hóa, hoàn nguyên về cuộc gọi, gọi2, hoặc là fp các chiến lược tương ứng. Lưu ý rằng
tác dụng phụ có khả năng mắc bẫy của phép chia cho XNUMX được thực hiện bởi một
hướng dẫn, vì vậy có thể tất cả các lệnh số nguyên được đưa ra,
nhưng điểm đánh dấu cho tác dụng phụ vẫn ở nguyên vị trí của nó. Sự kết hợp lại thành
Các hoạt động dấu phẩy động hoặc cuộc gọi không thực hiện được trong trường hợp đó.
inv20u
inv20l
Các biến thể của inv: minlat chiến lược. Trong trường hợp phép tính nghịch đảo là
không bị tách khỏi phép nhân, chúng tăng tốc độ phân chia khi cổ tức phù hợp
thành 20 bit (dấu cộng nếu có) bằng cách chèn một bài kiểm tra để bỏ qua một số
hoạt động trong trường hợp này; thử nghiệm này làm chậm trường hợp cổ tức lớn hơn.
inv20u giả định rằng trường hợp một mức cổ tức nhỏ như vậy là khó xảy ra, và inv20l
giả định rằng nó có khả năng xảy ra.
Đối với các mục tiêu không phải SHmedia chiến lược có thể là một trong số:
cuộc gọi-div1
Gọi một hàm thư viện sử dụng lệnh chia một bước "div1" để
thực hiện các hoạt động. Phép chia cho số XNUMX tính toán một kết quả không xác định và
không bẫy. Đây là mặc định ngoại trừ SH4, SH2A và SHcompact.
cuộc gọi-fp
Gọi một hàm thư viện thực hiện hoạt động ở dạng thả nổi chính xác kép
chỉ trỏ. Phép chia cho số XNUMX gây ra ngoại lệ dấu phẩy động. Đây là mặc định
cho SHcompact với FPU. Chỉ định điều này cho các mục tiêu không có
FPU chính xác sẽ mặc định thành "call-div1".
bàn gọi
Gọi một hàm thư viện sử dụng bảng tra cứu cho các ước số nhỏ và
lệnh "div1" có phân biệt chữ hoa chữ thường cho các ước số lớn hơn. Chia cho số không
tính toán một kết quả không xác định và không mắc bẫy. Đây là mặc định cho SH4.
Chỉ định điều này cho các mục tiêu không có hướng dẫn dịch chuyển động sẽ
mặc định thành "call-div1".
Khi chiến lược phân chia chưa được chỉ định, chiến lược mặc định sẽ được chọn
dựa trên mục tiêu hiện tại. Đối với SH2A, chiến lược mặc định là sử dụng "div" và
hướng dẫn "divu" thay vì gọi hàm thư viện.
-maccumulate-đi-args
Dành không gian một lần cho các đối số gửi đi trong phần mở đầu hàm thay vì xung quanh
mỗi cuộc gọi. Nói chung là có lợi cho hiệu suất và kích thước. Cũng cần thiết để tháo cuộn
để tránh thay đổi khung ngăn xếp xung quanh mã có điều kiện.
-mdivsi3_libfunc =tên
Đặt tên của hàm thư viện được sử dụng cho phép chia có dấu 32-bit thành tên. Điều này
chỉ ảnh hưởng đến tên được sử dụng trong cuộc gọi và inv: gọi chiến lược phân chia và
trình biên dịch vẫn mong đợi các bộ thanh ghi đầu vào / đầu ra / bộ đệm giống nhau như thể điều này
không có tùy chọn.
-mfixed-range =phạm vi đăng ký
Tạo mã coi phạm vi thanh ghi đã cho là thanh ghi cố định. Một thanh ghi cố định
là một trong đó bộ cấp phát thanh ghi không thể sử dụng. Điều này rất hữu ích khi biên dịch hạt nhân
mã số. Một dải thanh ghi được chỉ định là hai thanh ghi cách nhau bằng dấu gạch ngang. Nhiều
phạm vi đăng ký có thể được chỉ định cách nhau bằng dấu phẩy.
-mindexed-địa chỉ
Cho phép sử dụng chế độ định địa chỉ được lập chỉ mục cho SHmedia32 / SHcompact. Đây chỉ là
an toàn nếu phần cứng và / hoặc hệ điều hành triển khai ngữ nghĩa quấn quanh 32-bit cho phần được lập chỉ mục
chế độ địa chỉ. Kiến trúc cho phép triển khai các bộ xử lý 64-bit
MMU, mà hệ điều hành có thể sử dụng để lấy địa chỉ 32-bit, nhưng vì không có phần cứng hiện tại
triển khai hỗ trợ điều này hoặc bất kỳ cách nào khác để làm cho chế độ địa chỉ được lập chỉ mục trở nên an toàn
để sử dụng trong ABI 32-bit, mặc định là -mno-chỉ mục-địa chỉ.
-mgettrcost =con số
Đặt chi phí giả định cho lệnh "gettr" thành con số. Giá trị mặc định là 2 nếu
-mpt-đã sửa có hiệu lực, 100 nếu không.
-mpt-đã sửa
Giả sử hướng dẫn "pt *" sẽ không mắc bẫy. Điều này thường tạo ra mã được lập lịch tốt hơn,
nhưng không an toàn trên phần cứng hiện tại. Định nghĩa kiến trúc hiện tại nói rằng
bẫy "ptabs" và "ptrel" khi mục tiêu và điểm có 3 là 3. Cái này có
tác động vô tình của việc làm cho việc lập lịch các hướng dẫn này không an toàn trước một
nhánh, hoặc nâng chúng ra khỏi vòng lặp. Ví dụ: "__do_global_ctors", một phần của
libgcc chạy các hàm tạo khi khởi động chương trình, gọi các hàm trong danh sách
được giới hạn bởi -1. Với -mpt-đã sửa tùy chọn, "ptabs" được thực hiện trước khi thử nghiệm
chống lại -1. Điều đó có nghĩa là tất cả các hàm tạo chạy nhanh hơn một chút, nhưng khi
vòng lặp đến cuối danh sách, chương trình bị treo vì "ptabs" tải -1 vào
thanh ghi mục tiêu.
Vì tùy chọn này không an toàn cho bất kỳ phần cứng nào triển khai kiến trúc hiện tại
đặc điểm kỹ thuật, mặc định là -mno-pt-đã sửa. Trừ khi được chỉ định rõ ràng với
-mgettrcost, -mno-pt-đã sửa cũng ngụ ý -mgettrcost = 100; đăng ký này ngăn cản
phân bổ từ việc sử dụng các thanh ghi đích để lưu trữ các số nguyên thông thường.
-minvalid-ký hiệu
Giả sử các ký hiệu có thể không hợp lệ. Các ký hiệu hàm thông thường do trình biên dịch tạo ra
luôn hợp lệ để tải bằng "phim" / "shori" / "ptabs" hoặc "phim" / "shori" / "ptrel", nhưng
với thủ thuật trình hợp dịch và / hoặc trình liên kết, có thể tạo ra các ký hiệu gây ra
"ptabs" hoặc "ptrel" để bẫy. Tùy chọn này chỉ có ý nghĩa khi -mno-pt-đã sửa là
tác dụng. Nó ngăn chặn CSE khối cơ bản chéo, cẩu thả và hầu hết việc lập lịch biểu tượng
tải trọng. Mặc định là -mno-không hợp lệ-ký hiệu.
-mbranch-chi phí =num
Giả định num là chi phí cho một lệnh rẽ nhánh. Số cao hơn làm cho trình biên dịch
cố gắng tạo thêm mã không nhánh nếu có thể. Nếu không được chỉ định, giá trị là
được chọn tùy thuộc vào loại bộ xử lý đang được biên dịch.
-mzdcchi nhánh
-mno-zdcbranch
Giả sử (không giả định) rằng lệnh rẽ nhánh có điều kiện chuyển vị không "bt" và
"bf" là nhanh. Nếu như -mzdcchi nhánh được chỉ định, trình biên dịch sẽ cố gắng thích XNUMX
chuỗi mã nhánh dịch chuyển. Điều này được bật theo mặc định khi tạo mã
cho SH4 và SH4A. Nó có thể bị vô hiệu hóa rõ ràng bằng cách chỉ định -mno-zdcbranch.
-mcbranchdi
Bật mẫu hướng dẫn "cbranchdi4".
-mcmpeqdi
Phát ra mẫu hướng dẫn "cmpeqdi_t" ngay cả khi -mcbranchdi đang có hiệu lực.
-mfused-mad
-mno-fused-madd
Tạo mã sử dụng (không sử dụng) dấu phẩy động nhân và tích lũy
hướng dẫn. Các hướng dẫn này được tạo theo mặc định nếu dấu chấm động phần cứng
Được sử dụng. Máy phụ thuộc -mfused-mad tùy chọn hiện được ánh xạ vào máy-
độc lập -ffp-contract = nhanh tùy chọn, và -mno-fused-madd được ánh xạ tới
-ffp-contract = tắt.
-mfsca
-mno-fsca
Cho phép hoặc không cho phép trình biên dịch phát ra lệnh "fsca" cho sin và cosine
sự xấp xỉ. Tùy chọn "-mfsca" phải được sử dụng kết hợp với
"-funsafe-math-tối ưu hóa". Nó được bật theo mặc định khi tạo mã cho
SH4A. Sử dụng "-mno-fsca" sẽ vô hiệu hóa các phép gần đúng sin và cosin ngay cả khi
"-funsafe-math-Optimizations" đang có hiệu lực.
-mfsrra
-mno-fsrra
Cho phép hoặc không cho phép trình biên dịch phát ra lệnh "fsrra" cho hình vuông đối ứng
xấp xỉ gốc. Tùy chọn "-mfsrra" phải được sử dụng kết hợp với
"-funsafe-math-Optimizations" và "-ffinite-math-only". Nó được bật theo mặc định khi
tạo mã cho SH4A. Sử dụng "-mno-fsrra" sẽ vô hiệu hóa căn bậc hai đối ứng
xấp xỉ ngay cả khi "-funsafe-math-Optimizations" và "-ffinite-math-only" ở trong
hiệu ứng.
-giả vờ-cmove
Ưu tiên các nhánh có điều kiện chuyển vị bằng XNUMX cho lệnh di chuyển có điều kiện
các mẫu. Điều này có thể dẫn đến mã nhanh hơn trên bộ xử lý SH4.
Solaris 2 Các lựa chọn
Kia là -m các tùy chọn được hỗ trợ trên Solaris 2:
-văn bản giả
-văn bản giả, được sử dụng ngoài -chia sẻ, yêu cầu trình biên dịch không vượt qua -z văn bản đến
trình liên kết khi liên kết một đối tượng được chia sẻ. Sử dụng tùy chọn này, bạn có thể liên kết vị trí-
mã phụ thuộc vào một đối tượng được chia sẻ.
-văn bản giả ngăn chặn "các vị trí vẫn chống lại khả năng phân bổ nhưng không thể ghi
thông báo lỗi trình liên kết phần ". Tuy nhiên, các vị trí cần thiết sẽ kích hoạt sao chép trên-
ghi, và đối tượng được chia sẻ không thực sự được chia sẻ trên các quy trình. Thay vì
sử dụng -văn bản giả, bạn nên biên dịch tất cả mã nguồn với -fpic or -fPIC.
Các công tắc này được hỗ trợ ngoài các công tắc trên trên Solaris 2:
-pthread
Thêm hỗ trợ cho đa luồng bằng thư viện luồng POSIX. Tùy chọn này đặt
cờ cho cả bộ tiền xử lý và bộ liên kết. Tùy chọn này không ảnh hưởng đến chuỗi
sự an toàn của mã đối tượng do trình biên dịch tạo ra hoặc của các thư viện được cung cấp cùng với nó.
-pthread
Đây là một từ đồng nghĩa với -pthread.
SPARC Các lựa chọn
Kia là -m các tùy chọn được hỗ trợ trên SPARC:
-mno-app-reg
-mapp-reg
Chỉ định -mapp-reg để tạo đầu ra bằng cách sử dụng các thanh ghi chung từ 2 đến 4,
SPARC SVR4 ABI dự trữ cho các ứng dụng. Giống như sổ đăng ký toàn cầu 1, mỗi toàn cầu
đăng ký 2 đến 4 sau đó được coi như một đăng ký phân bổ được che bởi
các cuộc gọi chức năng. Đây là mặc định.
Để hoàn toàn tuân thủ SVR4 ABI với chi phí là một số tổn thất về hiệu suất, hãy chỉ định
-mno-app-reg. Bạn nên biên dịch thư viện và phần mềm hệ thống với tùy chọn này.
-mphẳng
-mno-phẳng
Với -mphẳng, trình biên dịch không tạo hướng dẫn lưu / khôi phục và sử dụng
"phẳng" hoặc mô hình cửa sổ thanh ghi đơn. Mô hình này tương thích với
đăng ký mô hình cửa sổ. Thanh ghi cục bộ và thanh ghi đầu vào (0--5) vẫn
được coi như các thanh ghi "cuộc gọi đã lưu" và được lưu trên ngăn xếp khi cần thiết.
Với -mno-phẳng (mặc định), trình biên dịch tạo hướng dẫn lưu / khôi phục (ngoại trừ
cho các chức năng của lá). Đây là chế độ hoạt động bình thường.
-mfpu
-mhard-phao
Tạo đầu ra có chứa các lệnh dấu phẩy động. Đây là mặc định.
-mno-fpu
-msoft-phao
Tạo đầu ra chứa các lệnh gọi thư viện cho dấu phẩy động. Cảnh báo: điều kiện tiên quyết
thư viện không có sẵn cho tất cả các mục tiêu SPARC. Thông thường các cơ sở của
trình biên dịch C thông thường của máy được sử dụng, nhưng điều này không thể được thực hiện trực tiếp trong cross-
biên dịch. Bạn phải tự sắp xếp để cung cấp thư viện phù hợp
các chức năng để biên dịch chéo. Các mục tiêu được nhúng sparc - * - aout và sparclite - * - *
cung cấp phần mềm hỗ trợ dấu phẩy động.
-msoft-phao thay đổi quy ước gọi trong tệp đầu ra; do đó, nó chỉ là
hữu ích nếu bạn biên dịch tất cả các của một chương trình có tùy chọn này. Đặc biệt, bạn cần
biên dịch libgcc.a, thư viện đi kèm với GCC, với -msoft-phao để làm điều này
để làm việc.
-mhard-quad-float
Tạo đầu ra chứa các lệnh dấu phẩy động bốn từ (dài kép).
-msoft-quad-float
Tạo đầu ra có chứa các lệnh gọi thư viện cho dấu phẩy động gồm bốn từ (dài kép)
hướng dẫn. Các chức năng được gọi là những chức năng được chỉ định trong SPARC ABI. Đây là
mặc định.
Kể từ khi viết bài này, không có triển khai SPARC nào có hỗ trợ phần cứng cho
hướng dẫn dấu phẩy động gồm bốn từ. Tất cả họ đều gọi một trình xử lý bẫy cho một trong những
các hướng dẫn này, và sau đó trình xử lý bẫy mô phỏng tác dụng của lệnh.
Do chi phí của trình xử lý bẫy, điều này chậm hơn nhiều so với việc gọi thư viện ABI
các thói quen. Vì vậy, -msoft-quad-float tùy chọn là mặc định.
-mno-unaligned-double
-munaligned-đôi
Giả sử rằng các bộ đôi có căn chỉnh 8 byte. Đây là mặc định.
Với -munaligned-đôi, GCC giả định rằng các bộ đôi chỉ có căn chỉnh 8 byte nếu chúng
được chứa trong một kiểu khác, hoặc nếu chúng có một địa chỉ tuyệt đối. Nếu không, nó
giả sử chúng có căn chỉnh 4 byte. Việc chỉ định tùy chọn này sẽ tránh được một số trường hợp hiếm gặp
vấn đề tương thích với mã do trình biên dịch khác tạo ra. Nó không phải là mặc định
vì nó dẫn đến giảm hiệu suất, đặc biệt là đối với mã dấu phẩy động.
-chế độ người dùng
-mno-chế độ người dùng
Không tạo mã chỉ có thể chạy ở chế độ người giám sát. Điều này chỉ liên quan đến
lệnh "casa" được phát ra cho bộ xử lý LEON3. Mặc định là
-mno-chế độ người dùng.
-mno-nhanh hơn-cấu trúc
-mfaster-cấu trúc
Với -mfaster-cấu trúc, trình biên dịch giả định rằng cấu trúc phải có 8 byte
sự liên kết. Điều này cho phép sử dụng các cặp hướng dẫn "ldd" và "std" cho các bản sao
trong phép gán cấu trúc, thay cho cặp "ld" và "st" nhiều gấp đôi. Tuy nhiên,
việc sử dụng căn chỉnh đã thay đổi này trực tiếp vi phạm SPARC ABI. Vì vậy, nó dự định
chỉ để sử dụng cho các mục tiêu mà nhà phát triển thừa nhận rằng mã kết quả của họ là
không trực tiếp phù hợp với các quy tắc của ABI.
-mcpu =cpu_type
Đặt tập lệnh, tập thanh ghi và các tham số lập lịch hướng dẫn cho
loại máy cpu_type. Các giá trị được hỗ trợ cho cpu_type đang v7, cây trắc bá, v8, supersparc,
hypersparc, leon, leon3, leo3v7, sparclit, f930, f934, sparclite86x, đốm lửa,
tsc701, v9, siêu tinh thể, siêu tinh trùng3, Niagara, Niagara2, Niagara3 và Niagara4.
Native Solaris và GNU / Linux toolchains cũng hỗ trợ giá trị tự nhiên, lựa chọn
tùy chọn kiến trúc tốt nhất cho bộ xử lý máy chủ. -mcpu = bản địa không có hiệu lực nếu
GCC không nhận dạng được bộ xử lý.
Các tham số lập lịch hướng dẫn mặc định được sử dụng cho các giá trị chọn một
kiến trúc và không phải là một triển khai. đó là v7, v8, sparclit, đốm lửa, v9.
Dưới đây là danh sách của từng kiến trúc được hỗ trợ và các triển khai được hỗ trợ của chúng.
cây bách v7, leon3v7
v8 supersparc, hypersparc, leon, leon3
sparclit
f930, f934, spaclite86x
đốm lửa
tsc701
v9 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
Theo mặc định (trừ khi được định cấu hình khác), GCC tạo mã cho biến thể V7 của
Kiến trúc SPARC. Với -mcpu = cây bách, trình biên dịch cũng tối ưu hóa nó cho
chip Cypress CY7C602, như được sử dụng trong dòng SPARCStation / SPARCServer 3xx. Đây là
cũng thích hợp cho SPARCStation 1, 2, IPX cũ hơn, v.v.
Với -mcpu = v8, GCC tạo mã cho biến thể V8 của kiến trúc SPARC. Các
chỉ khác với mã V7 là trình biên dịch phát ra số nguyên nhân và
lệnh chia số nguyên tồn tại trong SPARC-V8 nhưng không tồn tại trong SPARC-V7. Với
-mcpu = supersparc, trình biên dịch còn tối ưu hóa nó cho chip SuperSPARC, như
được sử dụng trong loạt SPARCStation 10, 1000 và 2000.
Với -mcpu = sparclite, GCC tạo mã cho biến thể SPARClite của SPARC
ngành kiến trúc. Điều này thêm số nguyên nhân, bước chia số nguyên và quét ("ffs")
hướng dẫn tồn tại trong SPARClite nhưng không tồn tại trong SPARC-V7. Với -mcpu = f930, Các
trình biên dịch bổ sung tối ưu hóa nó cho chip Fujitsu MB86930, là chip gốc
SPARClite, không có FPU. Với -mcpu = f934, trình biên dịch cũng tối ưu hóa nó cho
chip Fujitsu MB86934, là SPARClite gần đây hơn với FPU.
Với -mcpu = sparclet, GCC tạo mã cho biến thể SPARClet của SPARC
ngành kiến trúc. Điều này thêm số nguyên nhân, nhân / tích lũy, số nguyên chia
hướng dẫn bước và quét ("ffs") tồn tại trong SPARClet nhưng không có trong SPARC-V7. Với
-mcpu = tsc701, trình biên dịch cũng tối ưu hóa nó cho chip TEMIC SPARClet.
Với -mcpu = v9, GCC tạo mã cho biến thể V9 của kiến trúc SPARC. Cái này
thêm số nguyên 64 bit và hướng dẫn di chuyển dấu phẩy động, 3 dấu phẩy động bổ sung
thanh ghi mã điều kiện và hướng dẫn di chuyển có điều kiện. Với -mcpu = ultrasparc,
trình biên dịch cũng tối ưu hóa nó cho các chip Sun UltraSPARC I / II / IIi. Với
-mcpu = ultrasparc3, trình biên dịch cũng tối ưu hóa nó cho Sun UltraSPARC
III / III + / IIIi / IIIi + / IV / IV + chip. Với -mcpu = niagara, trình biên dịch bổ sung
tối ưu hóa nó cho các chip Sun UltraSPARC T1. Với -mcpu = niagara2, trình biên dịch
cũng tối ưu hóa nó cho các chip Sun UltraSPARC T2. Với -mcpu = niagara3, Các
trình biên dịch cũng tối ưu hóa nó cho các chip Sun UltraSPARC T3. Với -mcpu = niagara4,
trình biên dịch cũng tối ưu hóa nó cho các chip Sun UltraSPARC T4.
-mtune =cpu_type
Đặt các thông số lập lịch hướng dẫn cho loại máy cpu_type, nhưng không đặt
bộ hướng dẫn hoặc bộ đăng ký mà tùy chọn -mcpu =cpu_type không.
Các giá trị giống nhau cho -mcpu =cpu_type có thể được sử dụng cho -mtune =cpu_type, nhưng là duy nhất
các giá trị hữu ích là những giá trị chọn một cách triển khai CPU cụ thể. Những người đang có
cây trắc bá, supersparc, hypersparc, leon, leon3, leo3v7, f930, f934, sparclite86x,
tsc701, siêu tinh thể, siêu tinh trùng3, Niagara, Niagara2, Niagara3 và Niagara4. Với
các hàng công cụ Solaris và GNU / Linux bản địa, tự nhiên cũng có thể được sử dụng.
-mv8plus
-mno-v8plus
Với -mv8plus, GCC tạo mã cho SPARC-V8 + ABI. Sự khác biệt so với động cơ V8
ABI là thanh ghi toàn cục và thanh ghi ra được coi là rộng 64 bit. Điều này được kích hoạt
theo mặc định trên Solaris ở chế độ 32-bit cho tất cả các bộ xử lý SPARC-V9.
-mvis
-mno-vis
Với -mvis, GCC tạo mã tận dụng UltraSPARC Visual
Phần mở rộng Bộ hướng dẫn. Mặc định là -mno-vis.
-mvis2
-mno-vis2
Với -mvis2, GCC tạo mã tận dụng phiên bản 2.0 của UltraSPARC
Phần mở rộng Bộ Hướng dẫn Trực quan. Mặc định là -mvis2 khi nhắm mục tiêu một cpu
hỗ trợ các hướng dẫn như vậy, chẳng hạn như UltraSPARC-III trở lên. Thiết lập -mvis2 Ngoài ra
bộ -mvis.
-mvis3
-mno-vis3
Với -mvis3, GCC tạo mã tận dụng phiên bản 3.0 của UltraSPARC
Phần mở rộng Bộ Hướng dẫn Trực quan. Mặc định là -mvis3 khi nhắm mục tiêu một cpu
hỗ trợ các hướng dẫn như vậy, chẳng hạn như niagara-3 trở lên. Thiết lập -mvis3 cũng đặt
-mvis2 và -mvis.
-mcbcond
-mno-cbcond
Với -mcbcond, GCC tạo mã tận dụng lợi thế của so sánh và chi nhánh
hướng dẫn, như được định nghĩa trong Kiến trúc Sparc 2011. Giá trị mặc định là -mcbcond khi nào
nhắm mục tiêu một cpu hỗ trợ các hướng dẫn như vậy, chẳng hạn như niagara-4 trở lên.
-mpopc
-mno-popc
Với -mpopc, GCC tạo mã tận dụng quần thể UltraSPARC
hướng dẫn đếm. Mặc định là -mpopc khi nhắm mục tiêu một cpu hỗ trợ
hướng dẫn, chẳng hạn như Niagara-2 và mới hơn.
-mfmaf
-mno-fmaf
Với -mfmaf, GCC tạo mã tận dụng UltraSPARC Fused Multiply-
Thêm phần mở rộng dấu phẩy động. Mặc định là -mfmaf khi nhắm mục tiêu một cpu
hỗ trợ các hướng dẫn như vậy, chẳng hạn như Niagara-3 và mới hơn.
-mfix-at697f
Kích hoạt cách giải quyết đã được lập thành tài liệu cho một lỗi duy nhất của bộ xử lý Atmel AT697F
(tương ứng với erratum # 13 của bộ xử lý AT697E).
-mfix-ut699
Kích hoạt các giải pháp thay thế được lập thành văn bản cho errata dấu phẩy động và bộ đệm dữ liệu
vô hiệu hóa lỗi của bộ xử lý UT699.
Kia là -m các tùy chọn được hỗ trợ ngoài các tùy chọn trên trên bộ xử lý SPARC-V9 ở 64-bit
môi trường:
-m32
-m64
Tạo mã cho môi trường 32 bit hoặc 64 bit. Môi trường 32-bit đặt int,
dài và con trỏ tới 32 bit. Môi trường 64 bit đặt int thành 32 bit và dài và
con trỏ tới 64 bit.
-mcmodel =cái nào
Đặt mô hình mã thành một trong số
hòa tấu
Mô hình mã Trung bình / Thấp: Địa chỉ 64-bit, các chương trình phải được liên kết trong 32 thấp
bit bộ nhớ. Các chương trình có thể được liên kết tĩnh hoặc động.
trung gian
Mô hình mã Trung bình / Trung bình: Địa chỉ 64-bit, các chương trình phải được liên kết ở mức thấp
44 bit bộ nhớ, các phân đoạn văn bản và dữ liệu phải có kích thước nhỏ hơn 2GB và
phân đoạn dữ liệu phải nằm trong khoảng 2GB của phân đoạn văn bản.
trung bình
Mô hình mã Phương tiện / Mọi nơi: Địa chỉ 64-bit, các chương trình có thể được liên kết ở bất kỳ đâu
trong bộ nhớ, các phân đoạn văn bản và dữ liệu phải có kích thước nhỏ hơn 2GB và dữ liệu
phân đoạn phải nằm trong khoảng 2GB của phân đoạn văn bản.
sự nhúng vào
Mô hình mã Phương tiện / Mọi nơi cho các hệ thống nhúng: địa chỉ 64-bit, văn bản
và các phân đoạn dữ liệu phải có kích thước nhỏ hơn 2GB, cả hai đều bắt đầu từ bất kỳ đâu trong bộ nhớ
(xác định tại thời điểm liên kết). Sổ đăng ký toàn cầu% g4 trỏ đến cơ sở dữ liệu
bộ phận. Các chương trình được liên kết tĩnh và PIC không được hỗ trợ.
-mmemory-model =mô hình ghi nhớ
Đặt mô hình bộ nhớ có hiệu lực trên bộ xử lý thành một trong các
mặc định
Mô hình bộ nhớ mặc định cho bộ xử lý và hệ điều hành.
rmo Thứ tự bộ nhớ thư thái
pso Đơn đặt hàng một phần cửa hàng
TSOs Tổng số đơn đặt hàng tại cửa hàng
sc Tính nhất quán tuần tự
Các mô hình bộ nhớ này được định nghĩa chính thức trong Phụ lục D của kiến trúc Sparc V9
thủ công, như được đặt trong trường "PSTATE.MM" của bộ xử lý.
-mstack-thiên vị
-mno-stack-thiên vị
Với -mstack-thiên vị, GCC giả định rằng con trỏ ngăn xếp và con trỏ khung nếu có,
được bù đắp bởi -2047 phải được thêm lại khi tạo tham chiếu khung ngăn xếp. Cái này
là mặc định ở chế độ 64-bit. Nếu không, giả sử không có giá trị bù như vậy.
SPU Các lựa chọn
Kia là -m các tùy chọn được hỗ trợ trên SPU:
-mwarn-tái định cư
-merror-tái định cư
Bộ tải cho SPU không xử lý các chuyển vị động. Theo mặc định, GCC cung cấp một
lỗi khi nó tạo mã yêu cầu di dời động. -m không-lỗi-tái định cư
vô hiệu hóa lỗi, -mwarn-tái định cư tạo cảnh báo thay thế.
-msafe-dma
-munsafe-dma
Các hướng dẫn bắt đầu hoặc hoàn thành kiểm tra DMA không được sắp xếp lại với
liên quan đến tải và lưu trữ bộ nhớ đang được truy cập. Với -munsafe-dma
bạn phải sử dụng từ khóa "dễ bay hơi" để bảo vệ quyền truy cập bộ nhớ, nhưng điều đó có thể dẫn đến
mã không hiệu quả ở những nơi mà bộ nhớ được biết là không thay đổi. Thay vì đánh dấu
bộ nhớ dễ bay hơi, bạn có thể sử dụng -msafe-dma để yêu cầu trình biên dịch xử lý DMA
hướng dẫn có thể ảnh hưởng đến tất cả bộ nhớ.
-mbranch-gợi ý
Theo mặc định, GCC tạo ra một hướng dẫn gợi ý nhánh để tránh các ngăn chặn đường ống cho
cành luôn được chụp hoặc có lẽ đã được chụp. Một gợi ý không được tạo gần hơn 8
hướng dẫn đi từ chi nhánh của nó. Có rất ít lý do để tắt chúng, ngoại trừ
mục đích gỡ lỗi hoặc để làm cho một đối tượng nhỏ hơn một chút.
-msmall-mem
-mlarge-mem
Theo mặc định, GCC tạo mã giả định rằng các địa chỉ không bao giờ lớn hơn 18 bit.
Với -mlarge-mem mã được tạo giả sử địa chỉ 32-bit đầy đủ.
-mstdmain
Theo mặc định, GCC liên kết với mã khởi động giả định chức năng chính kiểu SPU
giao diện (có danh sách tham số độc đáo). Với -mstdmain, Liên kết GCC
chương trình của bạn chống lại mã khởi động giả định giao diện kiểu C99 cho "main",
bao gồm bản sao cục bộ của chuỗi "argv".
-mfixed-range =phạm vi đăng ký
Tạo mã coi phạm vi thanh ghi đã cho là thanh ghi cố định. Một thanh ghi cố định
là một trong đó bộ cấp phát thanh ghi không thể sử dụng. Điều này rất hữu ích khi biên dịch hạt nhân
mã số. Một dải thanh ghi được chỉ định là hai thanh ghi cách nhau bằng dấu gạch ngang. Nhiều
phạm vi đăng ký có thể được chỉ định cách nhau bằng dấu phẩy.
-mea32
-mea64
Biên dịch mã giả sử rằng con trỏ đến không gian địa chỉ PPU được truy cập qua "__ea"
bộ định tính không gian địa chỉ được đặt tên có chiều rộng 32 hoặc 64 bit. Mặc định là 32 bit.
Vì đây là một tùy chọn thay đổi ABI, tất cả mã đối tượng trong tệp thực thi phải được biên dịch
với cùng một thiết lập.
-maddress-space-convert
-mno-địa chỉ-không gian-chuyển đổi
Cho phép / không cho phép coi không gian địa chỉ "__ea" là tập thay thế của địa chỉ chung
không gian. Điều này cho phép truyền kiểu rõ ràng giữa "__ea" và con trỏ chung cũng như
chuyển đổi ngầm định của con trỏ chung thành con trỏ "__ea". Mặc định là cho phép
chuyển đổi con trỏ không gian địa chỉ.
-mcache-size =kích thước bộ nhớ cache
Tùy chọn này kiểm soát phiên bản libgcc mà trình biên dịch liên kết đến tệp thực thi
và chọn bộ đệm ẩn do phần mềm quản lý để truy cập các biến trong địa chỉ "__ea"
không gian với một kích thước bộ nhớ cache cụ thể. Các tùy chọn có thể có cho kích thước bộ nhớ cache đang 8, 16, 32, 64
và 128. Kích thước bộ nhớ cache mặc định là 64KB.
-matomic-update
-mno-nguyên tử-cập nhật
Tùy chọn này kiểm soát phiên bản libgcc mà trình biên dịch liên kết đến tệp thực thi
và chọn xem có cập nhật nguyên tử cho bộ đệm ẩn do phần mềm quản lý của các biến phía PPU hay không
được sử dụng. Nếu bạn sử dụng cập nhật nguyên tử, hãy thay đổi biến PPU từ mã SPU bằng cách sử dụng
bộ định tính không gian địa chỉ có tên "__ea" không ảnh hưởng đến các thay đổi đối với PPU khác
các biến nằm trong cùng một dòng bộ đệm từ mã PPU. Nếu bạn không sử dụng nguyên tử
cập nhật, sự can thiệp như vậy có thể xảy ra; tuy nhiên, việc ghi lại các dòng trong bộ nhớ cache là nhiều hơn
Có hiệu quả. Hành vi mặc định là sử dụng các bản cập nhật nguyên tử.
-mdual-nops
-mdual-nops =n
Theo mặc định, GCC chèn các nút bấm để tăng vấn đề kép khi nó mong đợi nó tăng lên
hiệu suất. n có thể là một giá trị từ 0 đến 10. Một nhỏ hơn n chèn ít nút hơn. 10 là
mặc định, 0 giống như -mno-kép-nops. Bị vô hiệu hóa với -Bạn.
-mhint-max-nops =n
Số lượng nút tối đa để chèn cho gợi ý nhánh. Gợi ý nhánh phải có ít nhất 8
hướng dẫn cách xa chi nhánh mà nó đang ảnh hưởng. GCC chèn lên đến n nâng lên
thực thi điều này, nếu không nó không tạo ra gợi ý rẽ nhánh.
-mhint-max-distance =n
Mã hóa của lệnh gợi ý rẽ nhánh giới hạn gợi ý trong phạm vi 256
hướng dẫn của chi nhánh nó đang ảnh hưởng. Theo mặc định, GCC đảm bảo rằng nó nằm trong
125.
-msafe-gợi ý
Khắc phục lỗi phần cứng khiến SPU ngừng hoạt động vô thời hạn. Theo mặc định, GCC
chèn hướng dẫn "hbrp" để đảm bảo rằng lỗi này sẽ không xảy ra.
Các lựa chọn cho WELFARE V
Các tùy chọn bổ sung này có sẵn trên System V Release 4 để tương thích với các
trình biên dịch trên các hệ thống đó:
-G Tạo một đối tượng được chia sẻ. Khuyên rằng -biểu tượng or -chia sẻ được sử dụng thay thế.
-Quý Xác định các phiên bản của từng công cụ được trình biên dịch sử dụng, trong trình hợp dịch ".ident"
chỉ thị trong đầu ra.
-Qn Không thêm lệnh ".ident" vào tệp đầu ra (đây là mặc định).
-Y P,dirs
Tìm kiếm các thư mục dirsvà không có thư viện nào khác, đối với các thư viện được chỉ định với -l.
-Ừm,dir
Tìm trong danh bạ dir để tìm bộ xử lý tiền M4. Trình lắp ráp sử dụng cái này
tùy chọn.
NGÓI-Gx Các lựa chọn
Kia là -m các tùy chọn được hỗ trợ trên TILE-Gx:
-mcmodel = nhỏ
Tạo mã cho mô hình nhỏ. Khoảng cách cho các cuộc gọi trực tiếp được giới hạn trong 500M
theo một trong hai hướng. Địa chỉ tương đối PC là 32 bit. Hỗ trợ địa chỉ tuyệt đối
phạm vi địa chỉ đầy đủ.
-mcmodel = lớn
Tạo mã cho mô hình lớn. Không có giới hạn về khoảng cách cuộc gọi, pc-
địa chỉ tương đối, hoặc địa chỉ tuyệt đối.
-mcpu =tên
Chọn loại CPU được nhắm mục tiêu. Hiện tại, loại được hỗ trợ duy nhất là ngóigx.
-m32
-m64
Tạo mã cho môi trường 32 bit hoặc 64 bit. Môi trường 32-bit đặt int,
dài và con trỏ tới 32 bit. Môi trường 64 bit đặt int thành 32 bit và dài và
con trỏ tới 64 bit.
TILEPro Các lựa chọn
Kia là -m các tùy chọn được hỗ trợ trên TILEPro:
-mcpu =tên
Chọn loại CPU được nhắm mục tiêu. Hiện tại, loại được hỗ trợ duy nhất là ngóipro.
-m32
Tạo mã cho môi trường 32 bit, đặt int, long và con trỏ thành 32 bit.
Đây là hành vi được hỗ trợ duy nhất nên cờ về cơ bản bị bỏ qua.
V850 Các lựa chọn
Kia là -m các tùy chọn được xác định cho việc triển khai V850:
-các cuộc gọi dài
-các cuộc gọi không dài
Coi tất cả các cuộc gọi là xa (gần). Nếu các cuộc gọi được cho là ở xa,
trình biên dịch luôn tải địa chỉ của hàm vào một thanh ghi và gọi gián tiếp
thông qua con trỏ.
-mno-ep
-mép
Không tối ưu hóa (tối ưu hóa) các khối cơ bản sử dụng cùng một con trỏ chỉ mục 4 trở lên
lần sao chép con trỏ vào thanh ghi "ep" và sử dụng "sld" và "sst" ngắn hơn
hướng dẫn. Các -mép tùy chọn được bật theo mặc định nếu bạn tối ưu hóa.
-mno-prolog-chức năng
-mprolog-chức năng
Không sử dụng (sử dụng) các chức năng bên ngoài để lưu và khôi phục các thanh ghi ở phần mở đầu
và phần kết của một hàm. Các chức năng bên ngoài chậm hơn, nhưng sử dụng ít mã hơn
khoảng trắng nếu nhiều hơn một hàm lưu cùng một số thanh ghi. Các
-mprolog-chức năng tùy chọn được bật theo mặc định nếu bạn tối ưu hóa.
-mspace
Cố gắng làm cho mã càng nhỏ càng tốt. Hiện tại, điều này chỉ bật -mép
và -mprolog-chức năng tùy chọn.
-mtda =n
Đặt các biến tĩnh hoặc biến toàn cục có kích thước là n byte trở xuống vào vùng dữ liệu nhỏ
thanh ghi "ep" trỏ tới. Vùng dữ liệu nhỏ có thể chứa tổng cộng 256 byte
(128 byte cho tham chiếu byte).
-msda =n
Đặt các biến tĩnh hoặc biến toàn cục có kích thước là n byte trở xuống vào vùng dữ liệu nhỏ
thanh ghi "gp" trỏ tới. Vùng dữ liệu nhỏ có thể chứa tới 64 kilobyte.
-mzda =n
Đặt các biến tĩnh hoặc biến toàn cục có kích thước là n byte trở xuống vào 32 đầu tiên
kilobyte bộ nhớ.
-mv850
Chỉ định rằng bộ xử lý đích là V850.
-mv850e3v5
Chỉ định rằng bộ xử lý đích là V850E3V5. Hằng số tiền xử lý
__v850e3v5__ được xác định nếu tùy chọn này được sử dụng.
-mv850e2v4
Chỉ định rằng bộ xử lý đích là V850E3V5. Đây là một bí danh cho
-mv850e3v5 tùy chọn.
-mv850e2v3
Chỉ định rằng bộ xử lý đích là V850E2V3. Hằng số tiền xử lý
__v850e2v3__ được xác định nếu tùy chọn này được sử dụng.
-mv850e2
Chỉ định rằng bộ xử lý đích là V850E2. Hằng số tiền xử lý __v850e2__
được xác định nếu tùy chọn này được sử dụng.
-mv850e1
Chỉ định rằng bộ xử lý đích là V850E1. Các hằng số tiền xử lý
__v850e1__ và __v850e__ được xác định nếu tùy chọn này được sử dụng.
-mv850es
Chỉ định rằng bộ xử lý đích là V850ES. Đây là một bí danh cho -mv850e1
tùy chọn.
-mv850e
Chỉ định rằng bộ xử lý đích là V850E. Hằng số tiền xử lý __v850e__
được xác định nếu tùy chọn này được sử dụng.
Nếu không -mv850 cũng không -mv850e cũng không -mv850e1 cũng không -mv850e2 cũng không -mv850e2v3 cũng không -mv850e3v5
được xác định sau đó một bộ xử lý mục tiêu mặc định được chọn và __v850 * __
hằng số tiền xử lý được xác định.
Các hằng số tiền xử lý __v850 và __v851__ luôn luôn được xác định, bất kể cái nào
biến thể bộ xử lý là mục tiêu.
-mdisable-callt
-mno-vô hiệu hóa-callt
Tùy chọn này ngăn chặn việc tạo lệnh "CALLT" cho v850e, v850e1,
phiên bản v850e2, v850e2v3 và v850e3v5 của kiến trúc v850.
Tùy chọn này được bật theo mặc định khi RH850 ABI được sử dụng (xem -mrh850-abi), Và
bị tắt theo mặc định khi GCC ABI được sử dụng. Nếu hướng dẫn "CALLT" đang được
được tạo thì ký hiệu tiền xử lý C "__V850_CALLT__" sẽ được xác định.
-mthư giãn
-không thư giãn
Chuyển (hoặc không chuyển) -mthư giãn tùy chọn dòng lệnh cho trình hợp dịch.
-sau-nhảy
-mno-nhảy xa
Tắt (hoặc bật lại) việc tạo hướng dẫn nhảy tương đối với PC.
-msoft-phao
-mhard-phao
Tắt (hoặc bật lại) việc tạo các lệnh dấu phẩy động phần cứng. Cái này
tùy chọn chỉ có ý nghĩa khi kiến trúc đích là V850E2V3 hoặc cao hơn. Nếu như
hướng dẫn dấu phẩy động phần cứng đang được tạo sau đó là bộ tiền xử lý C
ký hiệu "__FPU_OK__" sẽ được xác định, nếu không ký hiệu "__NO_FPU__" sẽ là
xác định.
-mloop
Cho phép sử dụng lệnh e3v5 LOOP. Việc sử dụng hướng dẫn này không
được bật theo mặc định khi kiến trúc e3v5 được chọn vì việc sử dụng nó vẫn còn
thực nghiệm.
-mrh850-abi
-mghs
Bật hỗ trợ cho phiên bản RH850 của V850 ABI. Đây là mặc định. Với
phiên bản ABI này áp dụng các quy tắc sau:
· Các cấu trúc và hợp nhất có kích thước nguyên được trả về thông qua một con trỏ bộ nhớ thay vì
một sổ đăng ký.
· Các cấu trúc và liên hiệp lớn (kích thước hơn 8 byte) được chuyển theo giá trị.
· Các chức năng được căn chỉnh theo ranh giới 16 bit.
· Các -m8byte-căn chỉnh tùy chọn dòng lệnh được hỗ trợ.
· Các -mdisable-callt tùy chọn dòng lệnh được bật theo mặc định. Các
-mno-vô hiệu hóa-callt tùy chọn dòng lệnh không được hỗ trợ.
Khi phiên bản ABI này được bật, biểu tượng tiền xử lý C "__V850_RH850_ABI__"
được định nghĩa.
-mgcc-abi
Bật hỗ trợ cho phiên bản GCC cũ của V850 ABI. Với phiên bản ABI này
áp dụng các quy tắc sau:
· Các cấu trúc có kích thước số nguyên và các liên kết được trả về trong thanh ghi "r10".
· Các cấu trúc lớn và liên hiệp (kích thước hơn 8 byte) được thông qua bằng cách tham chiếu.
· Các chức năng được căn chỉnh theo ranh giới 32-bit, trừ khi tối ưu hóa kích thước.
· Các -m8byte-căn chỉnh tùy chọn dòng lệnh không được hỗ trợ.
· Các -mdisable-callt tùy chọn dòng lệnh được hỗ trợ nhưng không được bật theo mặc định.
Khi phiên bản ABI này được bật, biểu tượng tiền xử lý C "__V850_GCC_ABI__"
được định nghĩa.
-m8byte-căn chỉnh
-mno-8byte-căn chỉnh
Cho phép hỗ trợ các loại "gấp đôi" và "dài dài" được căn chỉnh trên 8 byte
ranh giới. Mặc định là hạn chế căn chỉnh của tất cả các đối tượng ở mức tối đa
4 byte. Khi nào -m8byte-căn chỉnh có hiệu lực là ký hiệu tiền xử lý C
"__V850_8BYTE_ALIGN__" sẽ được xác định.
-mbig-switch
Tạo mã phù hợp cho các bảng chuyển đổi lớn. Chỉ sử dụng tùy chọn này nếu
trình lắp ráp / liên kết phàn nàn về các nhánh nằm ngoài phạm vi trong bảng chuyển đổi.
-mapp-reg
Tùy chọn này khiến r2 và r5 được sử dụng trong mã do trình biên dịch tạo ra. Cái này
cài đặt là mặc định.
-mno-app-reg
Tùy chọn này làm cho r2 và r5 được coi là các thanh ghi cố định.
VAX Các lựa chọn
Kia là -m các tùy chọn được xác định cho VAX:
-munix
Không xuất các lệnh nhảy nhất định ("aobleq", v.v.) mà trình hợp dịch Unix
đối với VAX không thể xử lý trên phạm vi dài.
-mgnu
Thực hiện xuất các lệnh nhảy đó, với giả định rằng trình hợp dịch GNU đang được
đã sử dụng.
-mg Mã đầu ra cho số dấu phẩy động định dạng G thay vì định dạng D.
VMS Các lựa chọn
Kia là -m các tùy chọn được xác định cho việc triển khai VMS:
-mvms-return-mã
Trả lại mã điều kiện VMS từ "chính". Mặc định là trả về điều kiện kiểu POSIX
(ví dụ: lỗi) mã.
-mdebug-main =tiếp đầu ngữ
Gắn cờ quy trình đầu tiên có tên bắt đầu bằng tiếp đầu ngữ như một thói quen chính cho
trình gỡ lỗi.
-mmalloc64
Mặc định cho các quy trình cấp phát bộ nhớ 64-bit.
-mpointer-size =kích thước
Đặt kích thước mặc định của con trỏ. Các tùy chọn có thể có cho kích thước đang 32 or ngắn cho 32 bit
con trỏ, 64 or Dài cho con trỏ 64 bit và Không chỉ hỗ trợ con trỏ 32 bit.
Tùy chọn sau đó vô hiệu hóa "pragma pointer_size".
VxWorks Các lựa chọn
Các tùy chọn trong phần này được xác định cho tất cả các mục tiêu VxWorks. Các tùy chọn cụ thể cho
phần cứng mục tiêu được liệt kê cùng với các tùy chọn khác cho mục tiêu đó.
-mrtp
GCC có thể tạo mã cho cả nhân VxWorks và quy trình thời gian thực (RTP). Cái này
tùy chọn chuyển từ cái trước sang cái sau. Nó cũng xác định macro bộ xử lý trước
"__RTP__".
-không tĩnh
Liên kết tệp thực thi RTP với các thư viện được chia sẻ thay vì thư viện tĩnh. Các
lựa chọn -mặt đứng và -chia sẻ cũng có thể được sử dụng cho RTP; -mặt đứng là mặc định.
-Bình tĩnh
- Động lực học
Các tùy chọn này được chuyển cho trình liên kết. Chúng được xác định để tương thích với
Bệnh tiểu đường.
-Xbind-lười biếng
Bật liên kết lười biếng của các lệnh gọi hàm. Tùy chọn này tương đương với -Wl, -z, bây giờ và
được xác định để tương thích với Diab.
-Xbind-bây giờ
Tắt ràng buộc lười biếng của các lệnh gọi hàm. Tùy chọn này là mặc định và được xác định cho
khả năng tương thích với Diab.
x86-64 Các lựa chọn
Những thứ này được liệt kê dưới
Xbão16 Các lựa chọn
Các tùy chọn này được xác định cho Xstormy16:
-msim
Chọn tệp khởi động và tập lệnh trình liên kết phù hợp với trình mô phỏng.
Xtensa Các lựa chọn
Các tùy chọn này được hỗ trợ cho các mục tiêu Xtensa:
-mconst16
-mno-const16
Bật hoặc tắt việc sử dụng hướng dẫn "CONST16" để tải các giá trị không đổi. Các
Lệnh "CONST16" hiện không phải là một tùy chọn tiêu chuẩn từ Tensilica. Khi nào
được bật, hướng dẫn "CONST16" luôn được sử dụng thay cho "L32R" tiêu chuẩn
hướng dẫn. Việc sử dụng "CONST16" chỉ được bật theo mặc định nếu "L32R"
hướng dẫn không có sẵn.
-mfused-mad
-mno-fused-madd
Bật hoặc tắt việc sử dụng các lệnh nhân / cộng và nhân / trừ hợp nhất trong
tùy chọn dấu chấm động. Điều này không có tác dụng nếu tùy chọn dấu phẩy động cũng không
đã được kích hoạt. Việc tắt các lệnh nhân / cộng và nhân / trừ hợp nhất sẽ buộc
trình biên dịch để sử dụng các lệnh riêng biệt cho các phép toán nhân và cộng / trừ.
Điều này có thể mong muốn trong một số trường hợp khi kết quả tuân thủ nghiêm ngặt IEEE 754
yêu cầu: các lệnh nhân cộng / trừ hợp nhất không làm tròn số trung gian
kết quả, do đó tạo ra kết quả với chi tiết bit chính xác hơn được chỉ định bởi
Tiêu chuẩn IEEE. Việc tắt các lệnh nhân cộng / trừ hợp nhất cũng đảm bảo rằng
đầu ra chương trình không nhạy cảm với khả năng của trình biên dịch để kết hợp nhân và
các phép toán cộng / trừ.
-mserialize-dễ bay hơi
-mno-serialize-dễ bay hơi
Khi tùy chọn này được bật, GCC sẽ chèn hướng dẫn "MEMW" trước bộ nhớ "dễ bay hơi"
tham chiếu để đảm bảo tính nhất quán tuần tự. Mặc định là -mserialize-dễ bay hơi.
Sử dụng -mno-serialize-dễ bay hơi để bỏ qua hướng dẫn "MEMW".
-mforce-no-pic
Đối với các mục tiêu, như GNU / Linux, trong đó tất cả mã Xtensa ở chế độ người dùng phải là vị trí-
mã độc lập (PIC), tùy chọn này vô hiệu hóa PIC để biên dịch mã hạt nhân.
-mtext-section-Lites
-mno-text-section-Lites
Kiểm soát việc xử lý các hồ theo nghĩa đen. Mặc định là -mno-text-section-Lites,
trong đó đặt các ký tự trong một phần riêng biệt trong tệp đầu ra. Điều này cho phép
nhóm chữ được đặt trong RAM / ROM dữ liệu và nó cũng cho phép trình liên kết kết hợp
nhóm ký tự từ các tệp đối tượng riêng biệt để loại bỏ các ký tự thừa và cải thiện mã
kích thước. Với -mtext-section-Lites, các chữ được xen kẽ trong phần văn bản
để giữ chúng càng gần với tài liệu tham khảo của chúng càng tốt. Điều này có thể cần thiết
cho các tệp lắp ráp lớn.
-mtarget-căn chỉnh
-mno-mục tiêu-căn chỉnh
Khi tùy chọn này được bật, GCC sẽ hướng dẫn trình lắp ráp tự động căn chỉnh
hướng dẫn để giảm hình phạt chi nhánh với chi phí của một số mật độ mã. Các
trình lắp ráp cố gắng mở rộng hướng dẫn mật độ để căn chỉnh các mục tiêu nhánh và
hướng dẫn sau hướng dẫn cuộc gọi. Nếu không có đủ an toàn trước
hướng dẫn mật độ để căn chỉnh mục tiêu, không thực hiện mở rộng. Mặc định là
-mtarget-căn chỉnh. Các tùy chọn này không ảnh hưởng đến việc xử lý tự động căn chỉnh
các hướng dẫn như "LOOP", mà trình hợp dịch luôn căn chỉnh, bằng cách mở rộng
hướng dẫn mật độ hoặc bằng cách chèn hướng dẫn NOP.
-mlongcalls
-mno-cuộc gọi dài
Khi tùy chọn này được bật, GCC sẽ hướng dẫn trình hợp dịch dịch các lệnh gọi trực tiếp tới
cuộc gọi gián tiếp trừ khi nó có thể xác định rằng mục tiêu của cuộc gọi trực tiếp là trong
phạm vi cho phép của lệnh gọi. Bản dịch này thường xảy ra cho các cuộc gọi đến
các chức năng trong các tệp nguồn khác. Cụ thể, trình biên dịch phiên dịch trực tiếp
Lệnh "CALL" thành "L32R" theo sau là lệnh "CALLX". Mặc định là
-mno-cuộc gọi dài. Tùy chọn này nên được sử dụng trong các chương trình mà mục tiêu cuộc gọi có thể
có khả năng nằm ngoài phạm vi. Tùy chọn này được thực hiện trong trình hợp dịch, không phải
trình biên dịch, vì vậy mã lắp ráp được tạo bởi GCC vẫn hiển thị lệnh gọi trực tiếp
hướng dẫn --- nhìn vào mã đối tượng được tháo rời để xem hướng dẫn thực tế.
Lưu ý rằng trình hợp dịch sử dụng lệnh gọi gián tiếp cho mọi lệnh gọi tệp chéo, không chỉ
những người thực sự nằm ngoài phạm vi.
zSeries Các lựa chọn
Những thứ này được liệt kê dưới
Các lựa chọn cho Mã Thế hệ công ước
Các tùy chọn độc lập với máy này kiểm soát các quy ước giao diện được sử dụng trong mã
thế hệ.
Hầu hết chúng đều có cả dạng tích cực và tiêu cực; dạng phủ định của -foo is
-fno-foo. Trong bảng dưới đây, chỉ một trong các biểu mẫu được liệt kê --- biểu mẫu không phải là
vỡ nợ. Bạn có thể tìm ra biểu mẫu khác bằng cách xóa không- hoặc thêm nó.
-fbounds-kiểm tra
Đối với giao diện người dùng hỗ trợ nó, hãy tạo mã bổ sung để kiểm tra xem các chỉ số đã từng
mảng truy cập nằm trong phạm vi đã khai báo. Điều này hiện chỉ được hỗ trợ bởi
Giao diện người dùng Java và Fortran, trong đó tùy chọn này mặc định là true và false
tương ứng.
-fstack-tái sử dụng =mức tái sử dụng
Tùy chọn này kiểm soát việc tái sử dụng không gian ngăn xếp cho các biến cục bộ / tự động do người dùng khai báo và
trình biên dịch tạo ra thời gian tạm thời. tái sử dụng_level có thể tất cả các, Name_vars, hoặc là không ai. tất cả các
cho phép tái sử dụng ngăn xếp cho tất cả các biến cục bộ và thời gian tạm thời, Name_vars cho phép
chỉ sử dụng lại cho các biến cục bộ do người dùng xác định có tên và không ai vô hiệu hóa tái sử dụng ngăn xếp
hoàn toàn. Giá trị mặc định là tất cả các. Tùy chọn này là cần thiết khi chương trình mở rộng
thời gian tồn tại của một biến cục bộ trong phạm vi hoặc một trình biên dịch được tạo tạm thời bên ngoài
điểm cuối được xác định bởi ngôn ngữ. Khi thời gian tồn tại của một biến kết thúc và nếu
biến sống trong bộ nhớ, trình biên dịch tối ưu hóa có quyền tự do sử dụng lại ngăn xếp của nó
không gian với các biến tạm thời khác hoặc các biến cục bộ có phạm vi có phạm vi hoạt động không
trùng với nó. Mã kế thừa kéo dài thời gian tồn tại cục bộ có thể sẽ bị hỏng với
tối ưu hóa tái sử dụng ngăn xếp.
Ví dụ,
int * p;
{
int local1;
p = & local1;
cục bộ1 = 10;
....
}
{
int local2;
cục bộ2 = 20;
...
}
if (* p == 10) // ngoài phạm vi sử dụng local1
{
}
Một ví dụ khác:
cấu trúc A
{
A (int k): i (k), j (k) {}
int tôi;
intj;
};
A * ap;
void foo (const A & ar)
{
ap = & ar;
}
thanh void ()
{
foo (A(10)); // thời gian tồn tại của đối tượng tạm thời kết thúc khi foo trả về
{
A a(20);
....
}
ap-> i + = 10; // ap tham chiếu ra ngoài phạm vi tạm thời có không gian
// được sử dụng lại với a. Giá trị của ap-> i là gì?
}
Tuổi thọ của một trình biên dịch được tạo tạm thời được xác định rõ bởi tiêu chuẩn C ++.
Khi cuộc đời tạm thời kết thúc, và nếu cuộc đời tạm thời tồn tại trong ký ức,
tối ưu hóa trình biên dịch có quyền tự do sử dụng lại không gian ngăn xếp của nó với các thời gian tạm thời khác hoặc
các biến cục bộ có phạm vi có phạm vi hoạt động không trùng lặp với nó. Tuy nhiên một số
mã kế thừa dựa trên hành vi của các trình biên dịch cũ hơn trong đó ngăn xếp tạm thời
không gian không được sử dụng lại, việc tái sử dụng ngăn xếp tích cực có thể dẫn đến lỗi thời gian chạy. Cái này
tùy chọn được sử dụng để kiểm soát việc tối ưu hóa tái sử dụng ngăn xếp tạm thời.
-ftrapv
Tùy chọn này tạo ra các bẫy cho phần tràn có dấu trên phép cộng, phép trừ,
các phép toán nhân.
-fwrapv
Tùy chọn này hướng dẫn trình biên dịch giả sử rằng tràn số học có dấu của
phép cộng, phép trừ và phép nhân kết hợp với nhau bằng cách sử dụng hai phần bổ sung
sự đại diện. Cờ này cho phép một số tối ưu hóa và vô hiệu hóa một số khác. Cái này
tùy chọn được bật theo mặc định cho giao diện người dùng Java, theo yêu cầu của ngôn ngữ Java
đặc điểm kỹ thuật.
-cảm giác
Bật xử lý ngoại lệ. Tạo thêm mã cần thiết để truyền các ngoại lệ. Vì
một số mục tiêu, điều này ngụ ý GCC tạo ra thông tin mở khung cho tất cả các chức năng,
có thể tạo ra chi phí kích thước dữ liệu đáng kể, mặc dù nó không ảnh hưởng đến
chấp hành. Nếu bạn không chỉ định tùy chọn này, GCC sẽ bật tùy chọn này theo mặc định cho các ngôn ngữ
như C ++ thường yêu cầu xử lý ngoại lệ và vô hiệu hóa nó đối với các ngôn ngữ như
C mà thường không yêu cầu nó. Tuy nhiên, bạn có thể cần bật tùy chọn này khi
biên dịch mã C cần tương tác đúng với các trình xử lý ngoại lệ được viết
trong C ++. Bạn cũng có thể muốn tắt tùy chọn này nếu bạn đang biên dịch C ++ cũ hơn
chương trình không sử dụng xử lý ngoại lệ.
-fnon-call-ngoại lệ
Tạo mã cho phép hướng dẫn bẫy để đưa ra các ngoại lệ. Lưu ý rằng điều này
yêu cầu hỗ trợ thời gian chạy dành riêng cho nền tảng không tồn tại ở mọi nơi. Hơn thế nữa,
nó chỉ cho phép bẫy hướng dẫn để ném các ngoại lệ, tức là các tham chiếu bộ nhớ hoặc
hướng dẫn dấu phẩy động. Nó không cho phép các trường hợp ngoại lệ được ném từ tùy ý
trình xử lý tín hiệu chẳng hạn như "SIGALRM".
-fdelete-dead-ngoại lệ
Hãy xem xét rằng các hướng dẫn có thể đưa ra các ngoại lệ nhưng không góp phần vào
việc thực thi chương trình có thể được tối ưu hóa. Tùy chọn này được kích hoạt theo mặc định
cho giao diện người dùng Ada, như được đặc tả ngôn ngữ Ada cho phép. Tối ưu hóa
các đường chuyền khiến các ngoại lệ đã chết bị loại bỏ được bật độc lập tại các
mức độ tối ưu hóa.
-funwind-bàn
Tương tự như -cảm giác, ngoại trừ việc nó chỉ tạo ra mọi dữ liệu tĩnh cần thiết, nhưng
không ảnh hưởng đến mã được tạo theo bất kỳ cách nào khác. Bạn bình thường không cần phải
kích hoạt tùy chọn này; thay vào đó, một bộ xử lý ngôn ngữ cần xử lý này cho phép nó
.
-fasynchronous-unwind-table
Tạo bảng thư giãn ở định dạng DWARF 2, nếu được máy đích hỗ trợ. Cái bàn là
chính xác ở mỗi ranh giới hướng dẫn, vì vậy nó có thể được sử dụng để tháo cuộn từ
sự kiện không đồng bộ (chẳng hạn như trình gỡ lỗi hoặc trình thu gom rác).
-fno-gnu-duy nhất
Trên các hệ thống có trình hợp dịch GNU và thư viện C gần đây, trình biên dịch C ++ sử dụng
Liên kết "STB_GNU_UNIQUE" để đảm bảo rằng định nghĩa của các thành viên dữ liệu tĩnh mẫu
và các biến cục bộ tĩnh trong các hàm nội tuyến là duy nhất ngay cả khi có
"RTLD_LOCAL"; điều này là cần thiết để tránh sự cố với một thư viện được sử dụng bởi hai
Các plugin "RTLD_LOCAL" tùy thuộc vào định nghĩa của một trong số chúng và do đó
không đồng ý với người khác về sự ràng buộc của biểu tượng. Nhưng điều này gây ra
"dlclose" được bỏ qua đối với các DSO bị ảnh hưởng; nếu chương trình của bạn dựa vào khởi động lại
của DSO qua "dlclose" và "dlopen", bạn có thể sử dụng -fno-gnu-duy nhất.
-fpcc-struct-return
Trả về các giá trị "ngắn" "struct" và "union" trong bộ nhớ như các giá trị dài hơn, thay vì trong
sổ đăng ký. Quy ước này kém hiệu quả hơn, nhưng nó có ưu điểm là cho phép
khả năng liên kết giữa các tệp được biên dịch GCC và các tệp được biên dịch bằng các trình biên dịch khác,
đặc biệt là Trình biên dịch C Portable (pcc).
Quy ước chính xác để trả về cấu trúc trong bộ nhớ phụ thuộc vào mục tiêu
macro cấu hình.
Cấu trúc ngắn và liên kết là những cấu trúc có quy mô và sự liên kết phù hợp với một số
kiểu số nguyên.
Cảnh báo: mã được biên dịch với -fpcc-struct-return công tắc không tương thích nhị phân
với mã được biên dịch với -freg-struct-return chuyển. Sử dụng nó để tuân theo một
giao diện nhị phân ứng dụng mặc định.
-freg-struct-return
Trả về giá trị "struct" và "union" trong thanh ghi khi có thể. Điều này hiệu quả hơn
cho các cấu trúc nhỏ hơn -fpcc-struct-return.
Nếu bạn không chỉ định -fpcc-struct-return cũng không -freg-struct-return, GCC mặc định là
quy ước nào là tiêu chuẩn cho mục tiêu. Nếu không có quy ước tiêu chuẩn,
GCC mặc định là -fpcc-struct-return, ngoại trừ các mục tiêu mà GCC là cơ quan chính
trình biên dịch. Trong những trường hợp đó, chúng tôi có thể chọn tiêu chuẩn và chúng tôi đã chọn
đăng ký trả lại thay thế.
Cảnh báo: mã được biên dịch với -freg-struct-return công tắc không tương thích nhị phân
với mã được biên dịch với -fpcc-struct-return chuyển. Sử dụng nó để tuân theo một
giao diện nhị phân ứng dụng mặc định.
-fshort-enums
Chỉ phân bổ cho một loại "enum" với số byte cần thiết cho phạm vi đã khai báo của
những giá trị khả thi. Cụ thể, kiểu "enum" tương đương với số nguyên nhỏ nhất
loại có đủ chỗ.
Cảnh báo: các -fshort-enums chuyển đổi khiến GCC tạo mã không phải là mã nhị phân
tương thích với mã được tạo mà không có công tắc đó. Sử dụng nó để tuân theo một
giao diện nhị phân ứng dụng mặc định.
-short-đôi
Sử dụng cùng một kích thước cho "double" như cho "float".
Cảnh báo: các -short-đôi chuyển đổi khiến GCC tạo mã không phải là mã nhị phân
tương thích với mã được tạo mà không có công tắc đó. Sử dụng nó để tuân theo một
giao diện nhị phân ứng dụng mặc định.
-fshort-wchar
Ghi đè loại cơ bản cho war_t được ngắn unsigned int thay cho
mặc định cho mục tiêu. Tùy chọn này hữu ích cho việc xây dựng các chương trình để chạy dưới
RƯỢU.
Cảnh báo: các -fshort-wchar chuyển đổi khiến GCC tạo mã không phải là mã nhị phân
tương thích với mã được tạo mà không có công tắc đó. Sử dụng nó để tuân theo một
giao diện nhị phân ứng dụng mặc định.
-không phổ biến
Trong mã C, kiểm soát vị trí của các biến toàn cục chưa được khởi tạo. Trình biên dịch Unix C
theo truyền thống cho phép nhiều định nghĩa về các biến như vậy trong các
đơn vị biên dịch bằng cách đặt các biến trong một khối chung. Đây là hành vi
theo quy định của -thường xuyênvà là mặc định cho GCC trên hầu hết các mục tiêu. Mặt khác,
hành vi này không được ISO C yêu cầu và trên một số mục tiêu có thể mang tốc độ hoặc mã
hình phạt kích thước trên các tham chiếu thay đổi. Các -không phổ biến tùy chọn chỉ định rằng
trình biên dịch nên đặt các biến toàn cục chưa khởi tạo trong phần dữ liệu của đối tượng
thay vì tạo chúng dưới dạng các khối thông thường. Điều này có ảnh hưởng rằng nếu
cùng một biến được khai báo (không có "extern") trong hai tập hợp khác nhau, bạn sẽ nhận được
lỗi nhiều định nghĩa khi bạn liên kết chúng. Trong trường hợp này, bạn phải biên dịch với
-thường xuyên thay thế. Biên dịch với -không phổ biến hữu ích cho các mục tiêu mà nó
cung cấp hiệu suất tốt hơn hoặc nếu bạn muốn xác minh rằng chương trình sẽ hoạt động
các hệ thống khác luôn xử lý các khai báo biến chưa được khởi tạo theo cách này.
-fno-danh tính
Bỏ qua # tự tin Chỉ thị.
-finression-size-chỉ thị
Không xuất chỉ thị trình hợp dịch ".size" hoặc bất kỳ thứ gì khác có thể gây ra sự cố
nếu chức năng được chia ở giữa và hai nửa được đặt ở các vị trí xa
xa nhau trong ký ức. Tùy chọn này được sử dụng khi biên dịch crtstuff.c; bạn không nên cần
để sử dụng nó cho bất cứ điều gì khác.
-fverbose-asm
Đặt thêm thông tin bình luận vào mã lắp ráp đã tạo để làm cho nó nhiều hơn
có thể đọc được. Tùy chọn này thường chỉ sử dụng cho những người thực sự cần đọc
đã tạo mã lắp ráp (có thể trong khi gỡ lỗi chính trình biên dịch).
-fno-tiết-asm, mặc định, khiến thông tin bổ sung bị bỏ qua và
hữu ích khi so sánh hai tệp trình hợp dịch.
-frecord-gcc-switch
Công tắc này làm cho dòng lệnh được sử dụng để gọi trình biên dịch được ghi vào
tệp đối tượng đang được tạo. Công tắc này chỉ được triển khai trên một số
mục tiêu và định dạng chính xác của bản ghi là định dạng tệp đích và tệp nhị phân
phụ thuộc, nhưng nó thường có dạng một phần chứa văn bản ASCII. Cái này
chuyển đổi có liên quan đến -fverbose-asm chuyển đổi, nhưng chuyển đổi đó chỉ ghi lại
thông tin trong tệp đầu ra của trình hợp dịch dưới dạng nhận xét, vì vậy nó không bao giờ đến được đối tượng
tập tin. Xem thêm -grecord-gcc-switch cho một cách khác để lưu trữ các tùy chọn trình biên dịch thành
tệp đối tượng.
-fpic
Tạo mã độc lập vị trí (PIC) phù hợp để sử dụng trong thư viện dùng chung, nếu
được hỗ trợ cho máy mục tiêu. Mã như vậy truy cập tất cả các địa chỉ không đổi thông qua một
bảng bù toàn cục (GOT). Trình tải động giải quyết các mục nhập GOT khi
chương trình bắt đầu (bộ tải động không phải là một phần của GCC; nó là một phần của hoạt động
hệ thống). Nếu kích thước GOT cho tệp thực thi được liên kết vượt quá mức tối đa dành cho máy cụ thể
kích thước, bạn nhận được thông báo lỗi từ trình liên kết cho biết rằng -fpic không hoạt động; trong
trường hợp đó, biên dịch lại với -fPIC thay thế. (Các mức tối đa này là 8k trên SPARC và 32k
trên m68k và RS / 6000. 386 không có giới hạn như vậy.)
Mã độc lập với vị trí yêu cầu hỗ trợ đặc biệt và do đó chỉ hoạt động trên
máy móc nhất định. Đối với 386, GCC hỗ trợ PIC cho Hệ thống V nhưng không hỗ trợ Mặt trời
386i. Mã được tạo cho IBM RS / 6000 luôn độc lập về vị trí.
Khi cờ này được đặt, macro "__pic__" và "__PIC__" được xác định thành 1.
-fPIC
Nếu được hỗ trợ cho máy mục tiêu, hãy phát ra mã độc lập vị trí, phù hợp với
liên kết động và tránh bất kỳ giới hạn nào về kích thước của bảng bù toàn cục. Cái này
tùy chọn tạo ra sự khác biệt trên m68k, PowerPC và SPARC.
Mã độc lập với vị trí yêu cầu hỗ trợ đặc biệt và do đó chỉ hoạt động trên
máy móc nhất định.
Khi cờ này được đặt, macro "__pic__" và "__PIC__" được xác định thành 2.
-fpie
-fPIE
Các tùy chọn này tương tự như -fpic và -fPIC, nhưng đã tạo mã độc lập về vị trí
chỉ có thể được liên kết vào tệp thực thi. Thông thường các tùy chọn này được sử dụng khi -Bàn Chân GCC
tùy chọn được sử dụng trong quá trình liên kết.
-fpie và -fPIE cả hai đều xác định macro "__pie__" và "__PIE__". Các macro có
giá trị 1 cho -fpie và 2 cho -fPIE.
-fno-jump-table
Không sử dụng bảng nhảy cho các câu lệnh chuyển đổi ngay cả khi nó sẽ hiệu quả hơn
hơn các chiến lược tạo mã khác. Tùy chọn này được sử dụng cùng với
-fpic or -fPIC để xây dựng mã tạo thành một phần của trình liên kết động và không thể
tham chiếu địa chỉ của một bảng nhảy. Trên một số mục tiêu, bảng nhảy không yêu cầu
GOT và tùy chọn này là không cần thiết.
-sửa chữa-reg
Xử lý sổ đăng ký có tên reg như một sổ đăng ký cố định; mã được tạo không bao giờ được tham chiếu đến
nó (ngoại trừ có thể là con trỏ ngăn xếp, con trỏ khung hoặc trong một số vai trò cố định khác).
reg phải là tên của sổ đăng ký. Tên đăng ký được chấp nhận là dành riêng cho máy
và được xác định trong macro "REGISTER_NAMES" trong tệp macro mô tả máy.
Cờ này không có dạng phủ định, vì nó chỉ định lựa chọn ba chiều.
-fcall-đã sử dụng-reg
Xử lý sổ đăng ký có tên reg như một thanh ghi có thể phân bổ được che phủ bởi chức năng
cuộc gọi. Nó có thể được phân bổ cho các thời gian tạm thời hoặc các biến không tồn tại trên một
gọi. Các hàm được biên dịch theo cách này không lưu và khôi phục sổ đăng ký reg.
Đó là một lỗi khi sử dụng cờ này với con trỏ khung hoặc con trỏ ngăn xếp. Sử dụng cái này
cờ cho các thanh ghi khác có vai trò phổ biến cố định trong quá trình thực thi của máy
mô hình tạo ra kết quả thảm hại.
Cờ này không có dạng phủ định, vì nó chỉ định lựa chọn ba chiều.
-fcall-lưu-reg
Xử lý sổ đăng ký có tên reg dưới dạng một thanh ghi có thể phân bổ được lưu bởi các chức năng. Nó có thể
được phân bổ ngay cả cho các thời gian tạm thời hoặc các biến tồn tại trong một cuộc gọi. Chức năng
biên dịch theo cách này lưu và khôi phục sổ đăng ký reg nếu họ sử dụng nó.
Đó là một lỗi khi sử dụng cờ này với con trỏ khung hoặc con trỏ ngăn xếp. Sử dụng cái này
cờ cho các thanh ghi khác có vai trò phổ biến cố định trong quá trình thực thi của máy
mô hình tạo ra kết quả thảm hại.
Một loại thảm họa khác dẫn đến việc sử dụng cờ này cho một sổ đăng ký trong đó
giá trị hàm có thể được trả về.
Cờ này không có dạng phủ định, vì nó chỉ định lựa chọn ba chiều.
-fpack-struct [=n]
Nếu không có giá trị được chỉ định, hãy đóng gói tất cả các thành viên cấu trúc lại với nhau mà không có lỗ. Khi một
giá trị được chỉ định (phải là lũy thừa nhỏ của hai), các thành viên cấu trúc gói
theo giá trị này, đại diện cho sự căn chỉnh tối đa (nghĩa là, các đối tượng có
các yêu cầu căn chỉnh mặc định lớn hơn mức này là đầu ra có khả năng không được căn chỉnh ở
vị trí lắp tiếp theo.
Cảnh báo: các -fpack-struct chuyển đổi khiến GCC tạo mã không phải là mã nhị phân
tương thích với mã được tạo mà không có công tắc đó. Ngoài ra, nó làm cho mã
không tối ưu. Sử dụng nó để tuân theo giao diện nhị phân ứng dụng không mặc định.
-chức năng kinh nguyệt
Tạo ra các lệnh gọi thiết bị để vào và ra các chức năng. Chỉ sau chức năng
và ngay trước khi thoát hàm, các hàm cấu hình sau được gọi với
địa chỉ của hàm hiện tại và địa chỉ gọi của nó. (Trên một số nền tảng,
"__builtin_return_address" không hoạt động ngoài chức năng hiện tại, vì vậy trang web gọi
thông tin có thể không có sẵn cho các chức năng cấu hình.)
void __cyg_profile_func_enter (void * this_fn,
void * call_site);
void __cyg_profile_func_exit (void * this_fn,
void * call_site);
Đối số đầu tiên là địa chỉ bắt đầu của hàm hiện tại, có thể là
tra cứu chính xác trong bảng ký hiệu.
Thiết bị đo này cũng được thực hiện cho các chức năng mở rộng nội tuyến trong các chức năng khác.
Các lệnh gọi cấu hình cho biết vị trí, về mặt khái niệm, hàm nội tuyến được nhập và
đã thoát ra. Điều này có nghĩa là các phiên bản có thể địa chỉ của các chức năng như vậy phải có sẵn. Nếu như
tất cả việc sử dụng một hàm của bạn đều được mở rộng nội dòng, điều này có thể có nghĩa là một sự mở rộng bổ sung
kích thước mã. Nếu bạn dùng bên ngoài nội tuyến trong mã C của bạn, một phiên bản có thể địa chỉ của
các chức năng phải được cung cấp. (Dù sao thì đây cũng là trường hợp bình thường, nhưng nếu bạn gặp may
và trình tối ưu hóa luôn mở rộng các chức năng nội dòng, bạn có thể đã thoát khỏi
mà không cung cấp các bản sao tĩnh.)
Một hàm có thể được cung cấp thuộc tính "no_instrument_ Chức năng", trong trường hợp này
thiết bị đo không được thực hiện. Điều này có thể được sử dụng, ví dụ, để lập hồ sơ
các chức năng được liệt kê ở trên, các quy trình ngắt mức ưu tiên cao và bất kỳ chức năng nào từ đó
các hàm cấu hình không thể được gọi một cách an toàn (có thể là bộ xử lý tín hiệu, nếu
các quy trình cấu hình tạo ra đầu ra hoặc cấp phát bộ nhớ).
-firical-functions -lude-file-list =hồ sơ,hồ sơ, ...
Đặt danh sách các chức năng bị loại trừ khỏi thiết bị đo đạc (xem mô tả
của "-firical-functions"). Nếu tệp chứa định nghĩa hàm phù hợp
với một trong số hồ sơ, thì chức năng đó không phải là công cụ. Trận đấu được thực hiện vào
chuỗi con: nếu hồ sơ tham số là một chuỗi con của tên tệp, nó được coi là
là một trận đấu.
Ví dụ:
-firical-functions -lude-file-list = / bits / stl, include / sys
loại trừ bất kỳ hàm nội dòng nào được xác định trong các tệp có tên đường dẫn chứa "/ bits / stl" hoặc
"bao gồm / sys".
Nếu, vì lý do nào đó, bạn muốn thêm ký tự ',' vào một trong các sym, viết ','. Vì
ví dụ, "-finticment-functions -lude-file-list = ',, tmp'" (lưu ý câu trích dẫn đơn lẻ
xung quanh tùy chọn).
-fi Kinh-hàm-loại-trừ-chức-năng-danh-sách =sym,sym, ...
Điều này tương tự như "-firical-functions -lude-file-list", nhưng tùy chọn này đặt
danh sách các tên chức năng được loại trừ khỏi thiết bị đo đạc. Tên hàm thành
được đối sánh là tên mà người dùng có thể nhìn thấy, chẳng hạn như "vectơ blah (vectơ const &) ",
không phải tên bị xáo trộn nội bộ (ví dụ: "_Z4blahRSt6vectorIiSaIiEE"). Trận đấu đã xong
trên chuỗi con: nếu sym tham số là một chuỗi con của tên hàm, nó là
coi như là một trận đấu. Đối với mã định danh mở rộng C99 và C ++, tên hàm
phải được cung cấp trong UTF-8, không sử dụng tên ký tự chung.
-séc bao
Tạo mã để xác minh rằng bạn không vượt ra ngoài ranh giới của ngăn xếp. Bạn
nên chỉ định cờ này nếu bạn đang chạy trong môi trường có nhiều luồng,
nhưng bạn chỉ hiếm khi cần chỉ định nó trong môi trường đơn luồng vì ngăn xếp
tràn được tự động phát hiện trên gần như tất cả các hệ thống nếu chỉ có một ngăn xếp.
Lưu ý rằng công tắc này không thực sự khiến việc kiểm tra được thực hiện; điều hành
hệ thống hoặc thời gian chạy ngôn ngữ phải làm điều đó. Việc chuyển đổi khiến việc tạo mã thành
đảm bảo rằng họ thấy ngăn xếp được mở rộng.
Ngoài ra, bạn có thể chỉ định một tham số chuỗi: "không" có nghĩa là không kiểm tra, "chung chung"
có nghĩa là buộc sử dụng kiểm tra kiểu cũ, "cụ thể" có nghĩa là sử dụng kiểm tra tốt nhất
phương pháp và tương đương với trần -séc bao.
Kiểm tra kiểu cũ là một cơ chế chung chung không yêu cầu hỗ trợ mục tiêu cụ thể trong
trình biên dịch nhưng đi kèm với các nhược điểm sau:
1. Chiến lược phân bổ sửa đổi cho các đối tượng lớn: chúng luôn được phân bổ
động nếu kích thước của chúng vượt quá ngưỡng cố định.
2. Giới hạn cố định về kích thước của khung tĩnh của các hàm: khi nó được đứng đầu bởi một
chức năng cụ thể, kiểm tra ngăn xếp không đáng tin cậy và cảnh báo được đưa ra bởi
trình biên dịch.
3. Không hiệu quả: do cả chiến lược phân bổ đã sửa đổi và chiến lược chung
triển khai, hiệu suất mã bị cản trở.
Lưu ý rằng kiểm tra ngăn xếp kiểu cũ cũng là phương pháp dự phòng cho "cụ thể" nếu không
hỗ trợ đích đã được thêm vào trình biên dịch.
-fstack-limit-register =reg
-fstack-giới hạn-biểu tượng =sym
-fno-stack-giới hạn
Tạo mã để đảm bảo rằng ngăn xếp không phát triển vượt quá một giá trị nhất định,
giá trị của một thanh ghi hoặc địa chỉ của một ký hiệu. Nếu yêu cầu một ngăn xếp lớn hơn,
tín hiệu được nâng lên tại thời gian chạy. Đối với hầu hết các mục tiêu, tín hiệu được nâng lên trước ngăn xếp
vượt qua ranh giới, vì vậy có thể bắt được tín hiệu mà không cần thực hiện
đề phòng.
Ví dụ: nếu ngăn xếp bắt đầu ở địa chỉ tuyệt đối 0x80000000 và phát triển xuống dưới,
bạn có thể sử dụng những lá cờ -fstack-limit-Symbol = __ stack_limit và
-Wl, - defsym, __ stack_limit = 0x7ffe0000 để thực thi giới hạn ngăn xếp là 128KB. Lưu ý rằng
điều này chỉ có thể hoạt động với trình liên kết GNU.
-fsplit-ngăn xếp
Tạo mã để tự động chia ngăn xếp trước khi nó bị tràn. Kết quả
chương trình có một ngăn xếp không liên tục chỉ có thể tràn nếu chương trình không thể
cấp phát bất kỳ bộ nhớ nào nữa. Điều này hữu ích nhất khi chạy các chương trình phân luồng, vì nó
không còn cần thiết để tính toán kích thước ngăn xếp tốt để sử dụng cho mỗi luồng. Đây là
hiện chỉ được triển khai cho các kết thúc trở lại i386 và x86_64 chạy GNU / Linux.
Khi mã được biên dịch với -fsplit-ngăn xếp mã cuộc gọi được biên dịch mà không có -fsplit-ngăn xếp, ở đó
có thể không còn nhiều không gian ngăn xếp để chạy mã sau. Nếu biên dịch tất cả
mã, bao gồm mã thư viện, với -fsplit-ngăn xếp không phải là một tùy chọn, thì trình liên kết có thể
sửa các lệnh gọi này để mã được biên dịch mà không -fsplit-ngăn xếp luôn luôn có một lớn
cây rơm. Hỗ trợ cho điều này được thực hiện trong trình liên kết vàng trong bản phát hành GNU binutils
2.21 trở đi.
-fleading-gạch dưới
Tùy chọn này và đối tác của nó, -fno-đầu-gạch dưới, buộc phải thay đổi cách C
các ký hiệu được biểu diễn trong tệp đối tượng. Một công dụng là giúp liên kết với kế thừa
mã lắp ráp.
Cảnh báo: các -fleading-gạch dưới chuyển đổi khiến GCC tạo mã không phải
nhị phân tương thích với mã được tạo mà không có công tắc đó. Sử dụng nó để tuân theo một
giao diện nhị phân ứng dụng không mặc định. Không phải tất cả các mục tiêu đều cung cấp hỗ trợ đầy đủ
cho công tắc này.
-ftls-model =kiểu mẫu
Thay đổi mô hình lưu trữ cục bộ luồng sẽ được sử dụng. Các kiểu mẫu đối số nên là một trong những
"global-dynamic", "local-dynamic", "Initial-Operating" hoặc "local-Operating".
Mặc định không có -fpic là "ban đầu-thực thi"; với -fpic mặc định là
"toàn cầu-năng động".
-fvisibility =mặc định | nội bộ | ẩn | được bảo vệ
Đặt khả năng hiển thị biểu tượng hình ảnh ELF mặc định thành tùy chọn được chỉ định --- tất cả các biểu tượng đều
được đánh dấu bằng điều này trừ khi được ghi đè trong mã. Sử dụng tính năng này có thể rất
cải thiện đáng kể thời gian liên kết và tải của các thư viện đối tượng được chia sẻ, tạo ra nhiều hơn
tối ưu hóa mã, cung cấp xuất API gần như hoàn hảo và ngăn chặn xung đột ký hiệu. Nó là
mạnh mẽ khuyến nghị rằng bạn nên sử dụng điều này trong bất kỳ đối tượng được chia sẻ nào mà bạn phân phối.
Mặc dù theo danh pháp, "default" luôn có nghĩa là công khai; tức là, có sẵn để được liên kết
chống lại từ bên ngoài đối tượng được chia sẻ. "bảo vệ" và "nội bộ" khá vô dụng
trong việc sử dụng trong thế giới thực, vì vậy tùy chọn duy nhất thường được sử dụng khác là "ẩn". Mặc định
if -sự tàng hình không được chỉ định là "mặc định", tức là đặt mọi biểu tượng ở chế độ công khai --- điều này
gây ra hành vi tương tự như các phiên bản trước của GCC.
Một lời giải thích tốt về những lợi ích được cung cấp bằng cách đảm bảo các ký hiệu ELF có chính xác
khả năng hiển thị được đưa ra bởi "Cách viết thư viện được chia sẻ" của Ulrich Drepper (có thể là
tìm thấy tạihttp://people.redhat.com/~drepper/>) --- tuy nhiên một giải pháp vượt trội được thực hiện
có thể bằng tùy chọn này để đánh dấu những thứ bị ẩn khi mặc định là công khai là
mặc định ẩn và đánh dấu mọi thứ là công khai. Đây là tiêu chuẩn với các tệp DLL trên Windows và
với -fvisibility = ẩn và "__attribute__ ((khả năng hiển thị (" mặc định ")))" thay vì
"__declspec (dllexport)" bạn nhận được ngữ nghĩa gần như giống hệt nhau với cú pháp giống hệt nhau.
Đây là một lợi ích tuyệt vời cho những người làm việc với các dự án đa nền tảng.
Đối với những người thêm hỗ trợ khả năng hiển thị vào mã hiện có, bạn có thể tìm thấy #pragma GCC
khả năng hiển thị sử dụng. Điều này hoạt động bằng cách bạn bao gồm các khai báo bạn muốn đặt
khả năng hiển thị cho với (ví dụ) #pragma GCC khả năng hiển thị đẩy (ẩn) và #pragma GCC
khả năng hiển thị bật. Hãy nhớ rằng khả năng hiển thị biểu tượng nên được xem as một phần of các
API giao diện hợp đồng và do đó, tất cả mã mới phải luôn chỉ định khả năng hiển thị khi nó
không phải là mặc định; tức là, các khai báo chỉ để sử dụng trong DSO địa phương nên luôn luôn
được đánh dấu rõ ràng là ẩn để tránh chi phí chuyển hướng PLT --- làm cho điều này
rất rõ ràng cũng hỗ trợ khả năng đọc và tự lập tài liệu về mã. Lưu ý rằng
do các yêu cầu đặc tả ISO C ++, "toán tử mới" và "xóa toán tử" phải
luôn ở chế độ hiển thị mặc định.
Lưu ý rằng các tiêu đề từ bên ngoài dự án của bạn, đặc biệt là các tiêu đề hệ thống cụ thể và
tiêu đề từ bất kỳ thư viện nào khác mà bạn sử dụng, có thể không mong đợi được biên dịch với
khả năng hiển thị khác với mặc định. Bạn có thể cần phải nói rõ ràng #pragma GCC
khả năng hiển thị đẩy (mặc định) trước khi bao gồm bất kỳ tiêu đề nào như vậy.
bên ngoài khai báo không bị ảnh hưởng bởi -sự tàng hình, vì vậy rất nhiều mã có thể được
biên dịch lại với -fvisibility = ẩn không có sửa đổi. Tuy nhiên, điều này có nghĩa là
các lệnh gọi đến các chức năng "bên ngoài" không có khả năng hiển thị rõ ràng sử dụng PLT, vì vậy nó nhiều hơn
hiệu quả khi sử dụng "__attribute ((khả năng hiển thị))" và / hoặc "#pragma mức độ hiển thị GCC" để cho biết
trình biên dịch mà các khai báo "extern" sẽ được coi là ẩn.
Lưu ý rằng -sự tàng hình có ảnh hưởng đến các thực thể liên kết mơ hồ trong C ++. Điều này có nghĩa là, đối với
ví dụ, một lớp ngoại lệ được ném giữa các DSO phải được đánh dấu rõ ràng
với khả năng hiển thị mặc định để loại_thông tin các nút được thống nhất giữa các DSO.
Tổng quan về các kỹ thuật này, lợi ích của chúng và cách sử dụng chúng tại
<http://gcc.gnu.org/wiki/Visibility>.
-fstrict-variable-bitfields
Tùy chọn này nên được sử dụng nếu truy cập vào các trường bit dễ bay hơi (hoặc cấu trúc khác
các trường, mặc dù trình biên dịch thường tôn trọng các loại đó) nên sử dụng một
quyền truy cập vào chiều rộng của loại trường, được căn chỉnh để căn chỉnh tự nhiên nếu có thể.
Ví dụ, các mục tiêu có thanh ghi ngoại vi được ánh xạ bộ nhớ có thể yêu cầu tất cả các
truy cập rộng 16 bit; với cờ này, bạn có thể khai báo tất cả các trường bit ngoại vi
là "không có dấu ngắn" (giả sử ngắn là 16 bit trên các mục tiêu này) để buộc GCC sử dụng
Các truy cập 16 bit có lẽ thay vì truy cập 32 bit hiệu quả hơn.
Nếu tùy chọn này bị vô hiệu hóa, trình biên dịch sẽ sử dụng hướng dẫn hiệu quả nhất. bên trong
ví dụ trước, đó có thể là một lệnh tải 32-bit, mặc dù điều đó truy cập
byte không chứa bất kỳ phần nào của trường bit hoặc thanh ghi ánh xạ bộ nhớ
không liên quan đến một trong những đang được cập nhật.
Nếu mục tiêu yêu cầu sự liên kết chặt chẽ và việc tôn trọng loại trường sẽ yêu cầu
vi phạm sự liên kết này, một cảnh báo sẽ được đưa ra. Nếu trường có thuộc tính "đóng gói",
truy cập được thực hiện mà không cần tôn trọng loại trường. Nếu trường không có
thuộc tính "đóng gói", truy cập được thực hiện đối với loại trường. Trong cả hai trường hợp, GCC
giả định rằng người dùng biết điều gì đó về phần cứng mục tiêu mà họ không biết.
Giá trị mặc định của tùy chọn này được xác định bởi giao diện nhị phân ứng dụng cho
bộ xử lý đích.
-fsync-libcalls
Tùy chọn này kiểm soát xem có bất kỳ phiên bản ngoài dòng nào của họ "__sync" của
các hàm có thể được sử dụng để triển khai họ hàm C ++ 11 "__atomic".
Giá trị mặc định của tùy chọn này được bật, do đó, hình thức hữu ích duy nhất của tùy chọn
is -fno-sync-libcalls. Tùy chọn này được sử dụng trong việc triển khai giải nguyên tử
thư viện thời gian chạy.
MÔI TRƯỜNG
Phần này mô tả một số biến môi trường ảnh hưởng đến cách GCC hoạt động. Một vài
trong số chúng hoạt động bằng cách chỉ định các thư mục hoặc tiền tố để sử dụng khi tìm kiếm các loại
trong số các tệp. Một số được sử dụng để chỉ định các khía cạnh khác của môi trường biên dịch.
Lưu ý rằng bạn cũng có thể chỉ định địa điểm để tìm kiếm bằng các tùy chọn như -B, -I và -L.
Những thứ này được ưu tiên hơn những nơi được chỉ định bằng cách sử dụng các biến môi trường, do đó
được ưu tiên hơn những thứ được chỉ định bởi cấu hình của GCC.
NGÔN NGỮ
LC_CTYPE
LC_MESSAGES
LC_ALL
Các biến môi trường này kiểm soát cách GCC sử dụng thông tin bản địa hóa
cho phép GCC làm việc với các công ước quốc gia khác nhau. GCC kiểm tra ngôn ngữ
đố LC_CTYPE và LC_MESSAGES nếu nó đã được cấu hình để làm như vậy. Những ngôn ngữ này
danh mục có thể được đặt thành bất kỳ giá trị nào được hỗ trợ bởi cài đặt của bạn. Một giá trị điển hình là
en_GB.UTF-8 cho tiếng Anh ở Vương quốc Anh được mã hóa bằng UTF-8.
Sản phẩm LC_CTYPE biến môi trường chỉ định phân loại ký tự. GCC sử dụng nó để
xác định ranh giới ký tự trong một chuỗi; điều này là cần thiết cho một số multibyte
mã hóa có chứa các ký tự trích dẫn và ký tự thoát được hiểu theo cách khác là
kết thúc chuỗi hoặc thoát.
Sản phẩm LC_MESSAGES biến môi trường chỉ định ngôn ngữ để sử dụng trong chẩn đoán
tin nhắn.
Nếu LC_ALL biến môi trường được đặt, nó sẽ ghi đè giá trị của LC_CTYPE và
LC_MESSAGES; nếu không thì, LC_CTYPE và LC_MESSAGES mặc định cho giá trị của NGÔN NGỮ
biến môi trường. Nếu không có biến nào trong số này được đặt, GCC sẽ mặc định là biến truyền thống
C ứng xử tiếng Anh.
TMPDIR
If TMPDIR được thiết lập, nó chỉ định thư mục để sử dụng cho các tệp tạm thời. GCC sử dụng
các tệp tạm thời để giữ đầu ra của một giai đoạn biên dịch sẽ được sử dụng làm
đầu vào cho giai đoạn tiếp theo: ví dụ: đầu ra của bộ tiền xử lý, là
đầu vào cho trình biên dịch thích hợp.
GCC_COMPARE_DEBUG
Cài đặt GCC_COMPARE_DEBUG gần tương đương với việc vượt qua -fcompare-gỡ lỗi đến
trình điều khiển trình biên dịch. Xem tài liệu của tùy chọn này để biết thêm chi tiết.
GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX được đặt, nó chỉ định một tiền tố để sử dụng trong tên của
chương trình con được thực thi bởi trình biên dịch. Không có dấu gạch chéo nào được thêm vào khi tiền tố này được kết hợp
với tên của chương trình con, nhưng bạn có thể chỉ định tiền tố kết thúc bằng dấu gạch chéo nếu
bạn muốn.
If GCC_EXEC_PREFIX không được đặt, GCC cố gắng tìm ra một tiền tố thích hợp để sử dụng
dựa trên tên đường dẫn mà nó được gọi.
Nếu GCC không thể tìm thấy chương trình con bằng cách sử dụng tiền tố được chỉ định, nó sẽ cố gắng tìm kiếm trong
các vị trí thông thường cho chương trình con.
Giá trị mặc định của GCC_EXEC_PREFIX is tiền tố / lib / gcc / Ở đâu tiếp đầu ngữ là tiền tố của
trình biên dịch đã cài đặt. Trong nhiều trường hợp tiếp đầu ngữ là giá trị của "prefix" khi bạn chạy
cấu hình kịch bản.
Các tiền tố khác được chỉ định với -B được ưu tiên hơn tiền tố này.
Tiền tố này cũng được sử dụng để tìm các tệp như crt0.o được sử dụng để liên kết.
Ngoài ra, tiền tố được sử dụng theo một cách khác thường trong việc tìm kiếm các thư mục để tìm kiếm
cho các tệp tiêu đề. Đối với mỗi thư mục tiêu chuẩn có tên thường bắt đầu
với / usr / local / lib / gcc (chính xác hơn, với giá trị của GCC_INCLUDE_DIR), GCC cố gắng
thay thế phần đầu đó bằng tiền tố được chỉ định để tạo một thư mục thay thế
Tên. Do đó, với -Quá /, Tìm kiếm GCC foo / bar ngay trước khi nó tìm kiếm tiêu chuẩn
thư mục / usr / local / lib / bar. Nếu một thư mục tiêu chuẩn bắt đầu với cấu hình
tiếp đầu ngữ thì giá trị của tiếp đầu ngữ được thay thế bởi GCC_EXEC_PREFIX khi tìm kiếm tiêu đề
các tập tin.
COMPILER_PATH
Giá trị của COMPILER_PATH là một danh sách các thư mục được phân tách bằng dấu hai chấm, giống như PATH.
GCC thử các thư mục được chỉ định do đó khi tìm kiếm các chương trình con, nếu nó không thể
tìm các chương trình con bằng cách sử dụng GCC_EXEC_PREFIX.
THƯ VIỆN_PATH
Giá trị của THƯ VIỆN_PATH là một danh sách các thư mục được phân tách bằng dấu hai chấm, giống như PATH.
Khi được định cấu hình như một trình biên dịch gốc, GCC sẽ thử các thư mục do đó chỉ định khi
tìm kiếm các tệp trình liên kết đặc biệt, nếu không thể tìm thấy chúng bằng cách sử dụng GCC_EXEC_PREFIX.
Liên kết bằng GCC cũng sử dụng các thư mục này khi tìm kiếm các thư viện thông thường
cho -l tùy chọn (nhưng các thư mục được chỉ định bằng -L đến đầu tiên).
NGÔN NGỮ
Biến này được sử dụng để chuyển thông tin ngôn ngữ cho trình biên dịch. Một cách trong đó
thông tin này được sử dụng để xác định bộ ký tự sẽ được sử dụng khi ký tự
các ký tự, chuỗi ký tự và nhận xét được phân tích cú pháp trong C và C ++. Khi trình biên dịch
được định cấu hình để cho phép các ký tự nhiềubyte, các giá trị sau cho NGÔN NGỮ đang
được công nhận:
C-JIS
Nhận dạng các ký tự JIS.
C-SJIS
Nhận dạng các ký tự SJIS.
C-EUCJP
Nhận dạng các ký tự EUCJP.
If NGÔN NGỮ không được xác định hoặc nếu nó có một số giá trị khác, thì trình biên dịch sử dụng "mblen"
và "mbtowc" như được định nghĩa theo ngôn ngữ mặc định để nhận dạng và dịch multibyte
ký tự.
Một số biến môi trường bổ sung ảnh hưởng đến hoạt động của bộ tiền xử lý.
CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
Giá trị của mỗi biến là một danh sách các thư mục được phân tách bằng một ký tự đặc biệt, nhiều
Lượt thích PATH, trong đó để tìm kiếm các tệp tiêu đề. Nhân vật đặc biệt,
"PATH_SEPARATOR", phụ thuộc vào mục tiêu và được xác định tại thời gian xây dựng GCC. Đối với Microsoft
Các mục tiêu dựa trên Windows, nó là một dấu chấm phẩy và đối với hầu hết các mục tiêu khác, nó là một
Đại tràng.
CPATH chỉ định một danh sách các thư mục được tìm kiếm như thể được chỉ định với -I, Nhưng
sau bất kỳ con đường nào được đưa ra với -I các tùy chọn trên dòng lệnh. Biến môi trường này
được sử dụng bất kể ngôn ngữ nào đang được xử lý trước.
Các biến môi trường còn lại chỉ áp dụng khi xử lý trước
ngôn ngữ chỉ định. Mỗi chỉ định một danh sách các thư mục được tìm kiếm như thể
được chỉ định với -hệ thống, nhưng sau bất kỳ đường dẫn nào được đưa ra với -hệ thống các tùy chọn trên
dòng lệnh.
Trong tất cả các biến này, một phần tử trống hướng dẫn trình biên dịch tìm kiếm hiện tại của nó
thư mục làm việc. Các phần tử trống có thể xuất hiện ở đầu hoặc cuối đường dẫn. Vì
ví dụ, nếu giá trị của CPATH là ": / special / include", có tác dụng tương tự như
-TÔI. -Tôi / đặc biệt / bao gồm.
DEPENDENCIES_OUTPUT
Nếu biến này được đặt, giá trị của nó sẽ chỉ định cách xuất các phần phụ thuộc cho Make based
trên các tệp tiêu đề không thuộc hệ thống được trình biên dịch xử lý. Tệp tiêu đề hệ thống là
bị bỏ qua trong đầu ra phụ thuộc.
Giá trị của DEPENDENCIES_OUTPUT có thể chỉ là một tên tệp, trong trường hợp đó, Quy tắc thực hiện
được ghi vào tệp đó, đoán tên đích từ tên tệp nguồn. Hoặc là
giá trị có thể có dạng hồ sơ mục tiêu, trong trường hợp đó các quy tắc được ghi vào tệp hồ sơ
sử dụng mục tiêu như tên mục tiêu.
Nói cách khác, biến môi trường này tương đương với việc kết hợp các tùy chọn -MM
và -MF, với một tùy chọn -MT chuyển đổi quá.
SUNPRO_DEPENDENCIES
Biến này giống như DEPENDENCIES_OUTPUT (xem ở trên), ngoại trừ hệ thống đó
các tệp tiêu đề không bị bỏ qua, vì vậy nó ngụ ý -M chứ không phải là -MM. Tuy nhiên,
sự phụ thuộc vào tệp đầu vào chính bị bỏ qua.
Sử dụng aarch64-linux-gnu-g ++ - 4.8 trực tuyến bằng các dịch vụ onworks.net