Kuburitswa kweiyo GCC 11 compiler suite

Mushure megore rekuvandudzwa, kuburitswa kwemahara GCC 11.1 compiler suite kwakaburitswa, yekutanga yakakosha kuburitswa mubazi idzva reGCC 11.x. Pasi pechirongwa chitsva chekuburitsa manhamba, vhezheni 11.0 yakashandiswa panguva yekuvandudzwa, uye nguva pfupi isati yaburitswa GCC 11.1, bazi reGCC 12.0 rakanga ratoforogwa, kubva paizoumbwa kuburitswa kwakakosha kweGCC 12.1.

GCC 11.1 inocherechedzwa neshanduko yayo pakushandisa iyo DWARF 5 debug faira fomati nekukasira, iyo yakasarudzika inosanganisirwa yeC++17 standard ("-std=gnu+++17"), kuvandudzwa kwakakosha mukutsigira C++20. mwero, tsigiro yechiyedzo yeC++23, kuvandudzwa zvine chekuita neremangwana C mutauro mwero (C2x), magadzirirwo matsva ekuita.

Shanduko huru:

  • Mamiriro ekutanga emutauro weC++ achinjwa kuti ashandise C++17 chiyero (-std=gnu+++17) panzvimbo peyakambopihwa C++14. Zvinogoneka kusarudza kudzima maitiro matsva eC++17 paunenge uchigadzira matemplate anoshandisa mamwe matemplate separameter (-fno-new-ttp-matching).
  • Yakawedzera tsigiro yekukwidziridzwa kwehardware yeAdressSanitizer chishandiso, iyo inokutendera kuti uone chokwadi chekuwana yakasunungurwa nzvimbo dzekurangarira, kuenda mhiri kwemiganhu yeiyo yakagoverwa buffer, uye mamwe marudzi ezvikanganiso paunenge uchishanda nendangariro. Hardware acceleration iripo chete yeAArch64 architecture uye yakatarisana nekushandiswa paunenge uchigadzira iyo Linux kernel. Kugonesa KeroSanitizer hardware kukwidziridza paunenge uchivaka nzvimbo dzemushandisi, mureza "-fsanitize=hwaddress" wawedzerwa, uye mureza wekernel "-fsanitize=kernel-hwaddress".
  • Paunenge uchigadzira ruzivo rwekugadzirisa, iyo DWARF 5 fomati inoshandiswa nekukasira, iyo, kana ichienzaniswa neshanduro dzakapfuura, inobvumira kugadzira 25% yakawanda compact debugging data. Tsigiro yakazara yeDWARF 5 inoda kanenge binutils vhezheni 2.35.2. DWARF 5 fomati inotsigirwa mukugadzirisa maturusi kubvira GDB 8.0, valgrind 3.17.0, elfutils 0.172 uye dwz 0.14. Kugadzira mafaira ekugadzirisa uchishandisa dzimwe shanduro dzeDWARF, unogona kushandisa sarudzo "-gdwarf-2", "-gdwarf-3" uye "-gdwarf-4".
  • Izvo zvinodikanwa zvema compilers zvinogona kushandiswa kuvaka GCC zvawedzerwa. Iyo compiler inofanirwa kutsigira iyo C ++ 11 standard (yaimbova C ++ 98 yaidiwa), i.e. Kana GCC 10 yakanga yakakwana kuvaka GCC 3.4, saka GCC 11 ikozvino inodiwa kuvaka GCC 4.8.
  • Iro zita uye nzvimbo yemafaira ekuchengetedza marara, mafaera enguva pfupi uye rumwe ruzivo rwakakosha kune LTO optimization yakashandurwa. Mafaira akadaro anogara achichengetwa mune yazvino dhairekitori kunze kwekunge nzira yakanyatso kuchinjwa kuburikidza ne "-dumpbase", "-dumpdir" uye "-save-temps = *" sarudzo.
  • Tsigiro yemhando yebhinari BRIG yekushandisa neHSAIL (Heterogeneous System Architecture Intermediate Mutauro) mutauro yakaregwa uye ichabviswa munguva pfupi.
  • Iko kugona kweiyo ThreadSanitizer modhi (-fsanitize= thread) yakawedzerwa, yakagadzirirwa kuona mamiriro emujaho paunenge uchigovana data rakafanana kubva kune akasiyana tambo yeakawanda-tambo application. Kuburitswa kutsva kunowedzera rutsigiro rwedzimwe nguva dzekumhanya uye nharaunda, pamwe nerutsigiro rweKCSAN (Kernel Concurrency Sanitizer) debugging chishandiso, chakagadzirirwa kuona zvine simba mamiriro emujaho mukati meLinux kernel. Yakawedzera sarudzo nyowani "-param tsan-distinuish-volatile" uye "-param tsan-chombo-func-entry-exit".
  • Nhamba dzekoramu mumameseji ekuongorora ikozvino dzinoratidza kwete iyo byte kuverenga kubva pakutanga kwemutsara, asi chaizvo nhamba dzekoramu dzinofunga nezve ma-multi-byte mavara uye mavara ane zvinzvimbo zvakati wandei mumutsara (semuenzaniso, hunhu πŸ™‚ hunotora zvinzvimbo zviviri uye yakanyorwa mu 4 bytes). Saizvozvo, mavara etabhu ave kubatwa seimwe nhamba yenzvimbo (inogadziriswa kuburikidza ne -ftabstop sarudzo, default 8). Kudzoreredza maitiro ekare, iyo "-fdiagnostics-column-unit=byte" sarudzo inokurudzirwa, uye kuona kukosha kwekutanga (kuverengera kubva ku0 kana 1) - iyo "-fdiagnostics-column-origin=" sarudzo.
  • Iyo vectorizer inofunga nezvese zviri mukati mebasa uye inowedzera kugadzirisa kugona kwakabatana nemharadzano uye mareferensi kune zvakapfuura zvidhinha mu control-flow graph (CFG, control-flow graph).
  • Iyo optimizer inoshandisa kugona kushandura nhevedzano yezvimisikidzo mashandiro anofananidza iyo yakafanana dhizaini kuita shanduko yekutaura. Iyo switch yekutaura inogona gare gare kuvharirwa uchishandisa bit yekuyedza mirairo (iyo "-fbit-bvunzo" sarudzo yakawedzerwa kudzora shanduko yakadaro).
  • Yakavandudzwa interprocedural optimizations. Yakawedzera imwe itsva IPA-modref pass (-fipa-modref) yekutevera mhedzisiro paunenge uchidaidza mabasa uye nekuvandudza kurongeka kwekuongorora. Kuvandudzwa kwekushandiswa kweiyo IPA-ICF pass (-fipa-icf), iyo inoderedza ndangariro kushandiswa panguva yekubatanidza uye inowedzera huwandu hwemabasa akabatana ayo akafanana mabhuraki ekodhi anosanganiswa. MuIPA-CP (Interprocedural constant propagation) pass, kufanotaura heuristics kwakagadziridzwa, tichifunga nezvemiganhu inozivikanwa uye maficha ezvishwe.
  • Mukubatanidza Nguva Optimizations (LTO), iyo bytecode fomati yakagadziridzwa kuderedza saizi uye kunatsiridza kukurumidza kugadzirisa. Yakaderedzwa peak memory kushandiswa panguva yekusunga chikamu.
  • Mune iyo optimization meshini yakavakirwa pamhedzisiro yekodhi profiling (PGO - Profile-inotungamirwa optimization), iyo inobvumira kugadzira yakawedzera kodhi kodhi zvichienderana nekuongororwa kwemaitiro ekuita, saizi yemafaira ane GCOV data inodzikiswa nekuda kwekuwanda kurongedza kwezero counters. . Yakavandudzwa "-fprofile-values" maitiro nekuchengeta mamwe ma paramita pane zvisina kunanga mafoni.
  • Kuitwa kweiyo OpenMP 5.0 (Open Multi-Processing) chiyero, iyo inotsanangura iyo API uye nzira dzekushandisa dzakafanana nzira dzehurongwa pane akawanda-core uye hybrid (CPU+GPU/DSP) masisitimu ane yakagovaniswa ndangariro uye vectorization zvikamu (SIMD), ine. akaenderera mberi. Yakawedzera tsigiro yekutanga yekugovera rairo uye kugona kushandisa heterogeneous loops muOpenMP inovaka. Yakaitwa tsigiro yeOMP_TARGET_OFFLOAD nharaunda inosiyana.
  • Kuitwa kweOpenACC 2.6 parallel programming yakatarwa yakapihwa C, C++ neFortran mitauro yakagadziridzwa, iyo inotsanangura maturusi ekuburitsa mabasa paGPUs uye nyanzvi processors, senge NVIDIA PTX.
  • Kumitauro yeC, hunhu hutsva "no_stack_protector" hwaitwa, hwakagadzirirwa kumaka mabasa asingafanirwe kugoneswa kudzivirira stack ("-fstack-protector"). Iyo "malloc" hunhu hwakawedzerwa kutsigira kuzivikanwa kwemaviri emafoni ekugovera uye kusunungura ndangariro (allocator/deallocator), iyo inoshandiswa mune static analyzer kuona zvakajairwa zvikanganiso mukushanda nendangariro (ndangariro inodonha, shandisa mushure mekusunungura, kaviri kudana kune yemahara basa, nezvimwewo) uye mune compiler yambiro "-Wmismatched-dealloc", "-Wmismatched-new-delete" uye "-Wfree-nonheap-object", kuzivisa nezvekusawirirana pakati pekurangarira kugoverwa uye ndangariro yekugovera mabasa.
  • Yambiro itsva dzakawedzerwa pamutauro weC:
    • "-Wmismatched-dealloc" (inogoneswa neyakagadzika) - inonyevera nezve ndangariro deallocation mashandiro anoshandisa pointer isingaenderane nendangariro yekugovera mabasa.
    • "-Wsizeof-array-div" (inogoneswa kana "-Wall" yatsanangurwa) - Inoyambira nezve kupatsanura saizi mbiri dzevashandisi kana divisor isingaenderane nehukuru hwearongedzero chinhu.
    • "-Wstringop-overread" (inogoneswa nekusarudzika) - inonyevera nezve kudana tambo basa rinoverenga data kubva kune imwe nzvimbo iri kunze kweiyo array muganhu.
    • "-Wtsan" (inogoneswa nekusingaperi) - Inoyambira nezvekushandisa maficha (senge std::atomic_thread_fence) asingatsigirwe muThreadSanitizer.
    • β€œ-Warray-parameter” uye β€œ-Wvla-parameter” (inogoneswa pakudoma β€œ-Wall”) - inoyambira pamusoro pemabasa ekupfuura ane zvirevo zvisingaenderane zvenharo dzine chekuita neakamisirwa- uye akasiyana-arefu arrays.
    • Iyo "-Wunitialized" yambiro ikozvino inoona kuyedza kuverenga kubva kusingazivikanwe dynamically yakagoverwa ndangariro.
    • Iyo "-Wfree-nonheap-object" yambiro inowedzera tsananguro yezviitiko apo ndangariro deallocation mabasa anodanwa ane pointer isingawanikwe kuburikidza neane simba yekugovera ndangariro mabasa.
    • Iyo "-Wmaybe-uninitialized" yambiro yakawedzera kucherechedzwa kwekupfuudza kunongedza kumabasa ayo anoreva uninitialized memory nzvimbo.
  • Pamutauro weC, chikamu chezvinyowani zvakagadziridzwa mukati meiyo C2X chiyero chakaitwa (yakagoneswa nekutsanangura -std=c2x uye -std=gnu2x): macros BOOL_MAX uye BOOL_WIDTH, sarudzo yekuratidzira yemazita emaparamita asina kushandiswa mukushanda. tsananguro (sezviri muC++), hunhu β€œ[[nodiscard]]", preprocessor opareta "__has_c_attribute", macros FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC_NFNITY_60559_DNFT_XNUMX, NANITY_IEC_XNUMX, __STDC_WANT_IEC_NFNITY_XNUMX, NANITY_XNUMX, NAN SNAN, LDBL_SNAN, DEC_INFINITY uye DEC_NAN, NaN=macros eFloatN , _FloatNx uye _DecimalN, kugona kududzira mamaki ekusvetuka pamberi pezviziviso uye pakupera kwezvirevo zvakasanganiswa.
  • Kune C ++, chikamu chekuchinja uye hutsva hunotsanangurwa muC ++ 20 chiyero chave chaitwa, kusanganisira chaiwo mabasa "consteval virtual", pseudo-destructors ekuguma kwehupenyu hwehupenyu hwezvinhu, kushandiswa kwekirasi ye enum uye. tichiverenga saizi yenhevedzano mumutsara wekuti β€œmutsva”.
  • Kune C++, tsigiro yekuyedza yakawedzerwa kune dzimwe gadziridzo dziri kuvandudzwa kune remangwana C++23 chiyero (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). Semuenzaniso, pave nerutsigiro rweiyo chaiyo suffix "zu" yeakasainwa saizi_t kukosha.
  • libstdc++ yakavandudza rutsigiro rweiyo C++ 17 chiyero, kusanganisira kuunzwa kwestd::kubva_chars uye std::to_chars mashandisirwo emhando dzemapoinzi anoyangarara. Zvinhu zvitsva zveC ++ 20 chiyero chakaitwa, zvinosanganisira std::bit_cast, std::source_location, maatomu anoshanda mirira uye zivisa, , , , , pamwe chete nezvinhu zveramangwana C++23 chiyero (std::ku_underlying, std::is_scoped_enum). Yakawedzera kuyedza tsigiro yemhando dzeparallel data processing (SIMD, Data-Parallel Types). Kuitwa kwe std::uniform_int_distribution kwave kukurumidzirwa.
  • Yakabvisa iyo alpha mhando mureza kubva ku libgccjit, raibhurari yakagovaniswa yekuisa kodhi jenareta mune mamwe maitiro uye nekuishandisa kuronga JIT kuunganidzwa kwebytecode kuita muchina kodhi. Yakawedzera kugona kuvaka libgccjit yeMinGW.
  • Yakawedzerwa rutsigiro rweiyo AArch64 Armv8-R architecture (-march=armv8-r). Kune AArch64 uye ARM zvivakwa, rutsigiro rwe processors rwakawedzerwa (parameters -mcpu uye -mtune): Arm Cortex-A78 (cortex-a78), Arm Cortex-A78AE (cortex-a78ae), Arm Cortex-A78C (cortex-a78c) , Arm Cortex- X1 (cortex-x1), Arm Neoverse V1 (neoverse-v1) uye Arm Neoverse N2 (neoverse-n2). Fujitsu A64FX (a64fx) uye Arm Cortex-R82 (cortex-r82) CPUs dzakawedzerwawo, dzichitsigira chete AArch64 architecture.
  • Yakawedzerwa rutsigiro rwekushandisa Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) uye MVE (AArch32 M-profile) SIMD mirairo ye autovectorize mashandiro anoita kuwedzera, kubvisa, kuwanda uye misiyano yekuwedzera/kubvisa pamusoro. nhamba dzakaoma. Yakawedzerwa yekutanga rutsigiro rwe autovectorization yeARM uchishandisa iyo MVE yekuraira seti.
  • Kune mapuratifomu eARM, seti yakazara yeanobatanidza-yakabatanidzwa C mabasa (Intrinsics) anopihwa, anotsiviwa neakawedzera vector mirairo (SIMD), inovhara ese NEON mirairo yakanyorwa muACLE Q3 2020 yakatarwa.
  • Tsigiro yegfx908 GPU yakawedzerwa kubackend yekugadzira kodhi ye AMD GPUs zvichienderana neGCN microarchitecture.
  • Yakawedzerwa rutsigiro rwema processors matsva uye mitsva yekuraira seti yekuwedzera yakaiswa mavari:
    • Intel Sapphire Rapids (-march=sapphirerapids, inogonesa tsigiro yeMOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-INT-INT-8 mirairo uye AMX-INT-INT16
    • Intel Alderlake (-march=alderlake, inogonesa rutsigiro rweCLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI uye HRESET mirairo).
    • Intel Rocketlake (-march=rocketlake, yakafanana neRocket Lake isina SGX rutsigiro).
    • AMD Zen 3 (-march=znver3).
  • YeIA-32/x86-64 masisitimu akavakirwa paIntel processors, tsigiro yemirairo mitsva yeprosesa TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI yawedzerwa.
  • Yakawedzerwa rutsigiro rwe "-march=x86-64-v[234]" mireza yekusarudza x86-64 mazinga ekuvaka (v2 - inovhara SSE4.2, SSSE3, POPCNT uye CMPXCHG16B ekuwedzera; v3 - AVX2 uye MOVBE; v4 - AVX-512 ) .
  • Yakawedzera rutsigiro rweRISC-V masisitimu ane hombe-endian byte odha. Yakawedzerwa "-misa-spec=*" sarudzo yekusarudza iyo vhezheni yeRISC-V yekuraira seti yezvivakwa. Yakawedzera rutsigiro rweAddressSanitizer uye stack dziviriro uchishandisa canary tag.
  • Kuenderera mberi nekuvandudzika kwe "-fanalyzer" static analysis mode, iyo inoita resource-intensive interprocedural analysis yekodhi nzira dzekuita uye data inoyerera muchirongwa. Iyo modhi inokwanisa kuona matambudziko padanho rekubatanidza, sekufona kaviri kune yemahara () basa renzvimbo imwe yekurangarira, faira descriptor leaks, dereferencing uye kupfuudza null pointers, kuwana yakasunungurwa memory block, uchishandisa uninitialized values, nezvimwe. Mushanduro itsva:
    • Iyo kodhi yekutevera mamiriro echirongwa yakanyorwa zvachose. Matambudziko nekuongorora maC mafaira akakura kwazvo akagadziriswa.
    • Yakawedzera yekutanga C++ rutsigiro.
    • Memory allocation uye deallocation ongororo yakabviswa kubva kune chaiyo malloc uye yemahara mabasa, uye ikozvino inotsigira nyowani / bvisa uye nyowani[]/delete[].
    • Yakawedzera chenjedzo itsva: -Wanalyzer-shift-count-negative, -Wanalyzer-shift-count-overflow, -Wanalyzer-nyora-to-const uye -Wanalyzer-nyora-ku-tambo-chaiyo.
    • Yakawedzera nyowani debugging sarudzo -fdump-analyzer-json uye -fno-analyzer-kuita.
    • Iko kukwanisa kuwedzera analyzer kuburikidza nemapulagi eGCC kwave kushandiswa (somuenzaniso, plugin yakagadzirirwa kutarisa kushandiswa kusina kururama kwekuvhara kwepasi rose (GIL) muCPython).

Source: opennet.ru

Voeg