Hoʻokuʻu ʻia ka GCC 11 compiler suite

Ma hope o hoʻokahi makahiki o ka hoʻomohala ʻana, ua hoʻokuʻu ʻia ka hoʻokuʻu ʻia ʻana o ka GCC 11.1 compiler suite manuahi, ka hoʻokuʻu koʻikoʻi mua ma ka lālā GCC 11.x hou. Ma lalo o ke kaʻina helu hoʻokuʻu hou, ua hoʻohana ʻia ka mana 11.0 i ka wā o ka hoʻomohala ʻana, a ma mua koke o ka hoʻokuʻu ʻia ʻana o GCC 11.1, ua wehe mua ʻia ka lālā GCC 12.0, kahi e hoʻokumu ʻia ai ka hoʻokuʻu nui ʻana o GCC 12.1.

He mea kaulana ʻo GCC 11.1 no kona hoʻololi ʻana i ka hoʻohana ʻana i ka format file debug DWARF 5 ma ke ʻano maʻamau, ka hoʻokomo paʻamau o ka maʻamau C++17 (“-std=gnu++17”), nā hoʻomaikaʻi nui i ke kākoʻo no ka C++20 maʻamau, kākoʻo hoʻokolohua no C++23, nā hoʻomaikaʻi e pili ana i ke kūlana ʻōlelo C e hiki mai ana (C2x), nā loiloi hana hou.

Nā hoʻololi nui:

  • Ua hoʻololi ʻia ke ʻano paʻamau no ka ʻōlelo C++ e hoʻohana i ka maʻamau C++17 (-std=gnu++17) ma kahi o ka C++14 i hāʻawi mua ʻia. Hiki ke hoʻopau i ka hana C++17 hou i ka wā e hoʻoponopono ai i nā mamana e hoʻohana ana i nā mamana ʻē aʻe ma ke ʻano he ʻāpana (-fno-new-ttp-matching).
  • Hoʻohui i ke kākoʻo no ka wikiwiki ʻana o ka hāmeʻa AddressSanitizer, e hiki ai iā ʻoe ke hoʻoholo i nā ʻoiaʻiʻo o ke komo ʻana i nā wahi hoʻomanaʻo i hoʻokuʻu ʻia, hele ma waho o nā palena o ka buffer i hāʻawi ʻia, a me kekahi mau ʻano hewa ʻē aʻe i ka wā e hana ana me ka hoʻomanaʻo. Loaʻa ka wikiwiki ʻana o ka hardware i kēia manawa no ka hale hoʻolālā AArch64 a ua kālele ʻia i ka hoʻohana ʻana i ka wā e hōʻuluʻulu ai i ka kernel Linux. I mea e hiki ai i ka AddressSanitizer hardware acceleration ke kūkulu ʻana i nā ʻāpana kikowaena mea hoʻohana, ua hoʻohui ʻia ka hae "-fsanitize=hwaddress", a me ka hae kernel "-fsanitize = kernel-hwaddress".
  • I ka wā e hana ai i ka ʻike debugging, hoʻohana ʻia ka format DWARF 5 ma ke ʻano maʻamau, ka mea, ke hoʻohālikelike ʻia me nā mana o mua, hiki ke hoʻonui i ka 25% ʻikepili debugging compact. Pono ke kākoʻo piha no DWARF 5 ma kahi o nā binutils version 2.35.2. Kākoʻo ʻia ka format DWARF 5 i nā mea hana debugging mai GDB 8.0, valgrind 3.17.0, elfutils 0.172 a me dwz 0.14. No ka hana ʻana i nā faila debug me ka hoʻohana ʻana i nā mana ʻē aʻe o DWARF, hiki iā ʻoe ke hoʻohana i nā koho "-gdwarf-2", "-gdwarf-3" a me "-gdwarf-4".
  • Ua hoʻonui ʻia nā koi no nā mea hōʻuluʻulu i hiki ke hoʻohana ʻia e kūkulu i ka GCC. Pono ka mea hoʻopili i kēia manawa e kākoʻo i ka maʻamau C++ 11 (ua koi ʻia ʻo C++ 98 ma mua), ʻo ia hoʻi. Inā lawa ka GCC 10 no ke kūkulu ʻana i ka GCC 3.4, a laila koi ʻia ʻo GCC 11 e kūkulu i ka GCC 4.8.
  • Ua hoʻololi ʻia ka inoa a me ka wahi o nā faila no ka mālama ʻana i nā dumps, nā faila pōkole a me nā ʻike hou e pono ai no ka loiloi LTO. Mālama ʻia ia mau faila i ka papa kuhikuhi o kēia manawa ke ʻole ke hoʻololi ʻia ke ala ma o nā koho "-dumpbase", "-dumpdir" a me "-save-temps=*".
  • Ua hoʻopau ʻia ke kākoʻo ʻana i ke ʻano binary BRIG no ka hoʻohana ʻana me ka ʻōlelo HSAIL (Heterogeneous System Architecture Intermediate Language) a e wehe koke ʻia.
  • Ua hoʻonui ʻia nā mana o ke ʻano ThreadSanitizer (-fsanitize=thread), i hoʻolālā ʻia e ʻike i nā kūlana lāhui i ka wā e kaʻana like ana i nā ʻikepili mai nā pae like ʻole o kahi noi multi-threaded. Hoʻohui ka hoʻokuʻu hou i ke kākoʻo no nā runtimes a me nā kaiapuni ʻē aʻe, a me ke kākoʻo no ka mea hana debugging KCSAN (Kernel Concurrency Sanitizer), i hoʻolālā ʻia e ʻike ikaika i nā kūlana lāhui i loko o ka kernel Linux. Hoʻohui i nā koho hou "-param tsan-distinguish-volatile" a me "-param tsan-instrument-func-entry-exit".
  • ʻAʻole hōʻike nā helu kolamu i nā memo diagnostic i ka helu byte mai ka hoʻomaka ʻana o ka laina, akā ʻo nā helu kolamu e noʻonoʻo ana i nā huaʻōlelo multi-byte a me nā huaʻōlelo e noho ana i kekahi mau kūlana i ka laina (no ka laʻana, ʻo ke ʻano 🙂 noho i ʻelua kūlana a ua hoʻopaʻa ʻia i 4 bytes). Pēlā nō, mālama ʻia nā huaʻōlelo tab ma ke ʻano he helu o nā hakahaka (hiki ke hoʻonohonoho ʻia ma ke koho -ftabstop, default 8). No ka hoʻihoʻi ʻana i ka hana kahiko, ua koho ʻia ke koho "-fdiagnostics-column-unit=byte", a no ka hoʻoholo ʻana i ka waiwai mua (helu mai ka 0 a i ʻole 1) - ke koho "-fdiagnostics-column-origin=".
  • E noʻonoʻo ka vectorizer i nā ʻike holoʻokoʻa o ka hana a hoʻohui i nā mana hana e pili ana i nā intersections a me nā kuhikuhi ʻana i nā poloka mua i ka pakuhi hoʻokele (CFG, kaomi hoʻokele).
  • Hoʻohana ka optimizer i ka hiki ke hoʻololi i ke ʻano o nā hana kūlana e hoʻohālikelike i ka hoʻololi like i kahi ʻōlelo hoʻololi. Hiki ke hoʻopili ʻia ka ʻōlelo hoʻololi ma hope me ka hoʻohana ʻana i nā ʻōlelo hoʻāʻo bit (ua hoʻohui ʻia ke koho "-fbit-tests" e hoʻomalu i kēlā hoʻololi ʻana).
  • Hoʻomaikaʻi ʻia nā loiloi interprocedural. Hoʻohui i kahi pass IPA-modref hou (-fipa-modref) e nānā i nā hopena ʻaoʻao i ke kāhea ʻana i nā hana a hoʻomaikaʻi i ka pololei o ka nānā ʻana. Hoʻomaikaʻi i ka hoʻokō ʻana i ka pass IPA-ICF (-fipa-icf), e hōʻemi ana i ka hoʻohana ʻana i ka hoʻomanaʻo i ka wā o ka hoʻohui ʻana a hoʻonui i ka nui o nā hana i hui pū ʻia i hui pū ʻia nā poloka like o ke code. Ma ka IPA-CP (Interprocedural constant propagation), ua hoʻomaikaʻi ʻia nā heuristic wānana, me ka noʻonoʻo ʻana i nā palena ʻike a me nā hiʻohiʻona o nā puka lou.
  • Ma Linking Time Optimizations (LTO), ua hoʻopaneʻe ʻia ke ʻano bytecode e hōʻemi i ka nui a hoʻomaikaʻi i ka wikiwiki o ka hana. Hoʻemi ʻia ka hoʻohana ʻana i ka hoʻomanaʻo kiʻekiʻe i ka wā paʻa.
  • Ma ka mīkini hoʻolālā e pili ana i nā hopena o ka code profiling (PGO - Profile-guided optimization), e hiki ai ke hana i nā code ʻoi aku ka maikaʻi e pili ana i ka nānā ʻana i nā hiʻohiʻona hoʻokō, hoʻemi ʻia ka nui o nā faila me ka ʻikepili GCOV ma muli o ka hoʻopili paʻa ʻana o nā helu helu helu. . Hoʻomaikaʻi ʻia ke ʻano "-fprofile-values" ma ka mālama ʻana i nā ʻāpana ʻē aʻe ma nā kelepona ʻole.
  • ʻO ka hoʻokō ʻana i ka maʻamau OpenMP 5.0 (Open Multi-Processing), e wehewehe ana i ka API a me nā ʻano hana no ka hoʻohana ʻana i nā ʻano papahana parallel ma nā ʻōnaehana multi-core a hybrid (CPU+GPU/DSP) me ka hoʻomanaʻo like ʻana a me nā ʻāpana vectorization (SIMD). hoomau aku. Hoʻohui i ke kākoʻo mua no ka hoʻokaʻawale ʻana a me ka hiki ke hoʻohana i nā loops heterogeneous i nā kūkulu OpenMP. Hoʻokomo ʻia ke kākoʻo no ka hoʻololi kaiapuni OMP_TARGET_OFFLOAD.
  • Ua hoʻomaikaʻi ʻia ka hoʻokō ʻana o ka OpenACC 2.6 parallel programming specification i hāʻawi ʻia no nā ʻōlelo C, C ++ a me Fortran, e wehewehe ana i nā mea hana no ka hoʻoiho ʻana i nā hana ma nā GPU a me nā kaʻina hana kūikawā, e like me NVIDIA PTX.
  • No nā ʻōlelo C, ua hoʻokō ʻia kahi ʻano hou "no_stack_protector", i hoʻolālā ʻia e hōʻailona i nā hana i hiki ʻole ke hoʻopaʻa ʻia ka pale paʻa ("-fstack-protector"). Ua hoʻonui ʻia ka ʻano "malloc" e kākoʻo i ka ʻike ʻana o nā kelepona ʻelua no ka hoʻokaʻawale ʻana a me ka hoʻokuʻu ʻana i ka hoʻomanaʻo (allocator/deallocator), i hoʻohana ʻia i ka ananala static e ʻike i nā hewa maʻamau i ka hana ʻana me ka hoʻomanaʻo (leak ka hoʻomanaʻo, hoʻohana ma hope o ka hoʻokuʻu ʻana, ʻelua kelepona i ka hana manuahi, a me nā mea ʻē aʻe) a ma nā ʻōlelo aʻoaʻo compiler "-Wmismatched-dealloc", "-Wmismatched-new-delete" a me "-Wfree-nonheap-object", e hōʻike ana e pili ana i ka like ʻole ma waena o ka hana hoʻomanaʻo a me nā hana hoʻomanaʻo.
  • Ua hoʻohui ʻia nā ʻōlelo aʻo hou no ka ʻōlelo C:
    • "-Wmismatched-dealloc" (ho'ā 'ia ma ka pa'amau) - 'ōlelo a'o e pili ana i nā hana ho'oka'awale ho'omana'o e ho'ohana ana i kahi kuhikuhi i kūpono 'ole me nā hana ho'oka'awale ho'omana'o.
    • "-Wsizeof-array-div" (ho'ā 'ia ke 'ōlelo 'ia ka "-Wall) - 'Ōlelo e pili ana i ka mahele 'ana i 'elua nui o nā mea ho'ohana inā 'a'ole like ka mea ho'oka'awale i ka nui o ka mea ho'onohonoho.
    • "-Wstringop-overread" (hoʻohana ʻia e ka paʻamau) - e aʻo e pili ana i ke kāhea ʻana i kahi hana string e heluhelu ana i ka ʻikepili mai kahi wahi ma waho o ka palena o ka array.
    • "-Wtsan" (ho'ā 'ia ma ka pa'amau) - 'Ōlelo e pili ana i ka ho'ohana 'ana i nā hi'ona (e like me std::atomic_thread_fence) 'a'ole i kāko'o 'ia ma ThreadSanitizer.
    • "-Warray-parameter" a me "-Wvla-parameter" (hoʻohana ʻia i ka wā e kuhikuhi ana i ka "-Wall") - e aʻo e pili ana i nā hana overriding me nā ʻōlelo hoʻopaʻapaʻa like ʻole e pili ana i nā papa kuhikuhi paʻa a me nā loli-lōʻihi.
    • ʻIke ʻia ka ʻōlelo aʻo "-Wuninitialized" i nā hoʻāʻo e heluhelu mai ka hoʻomanaʻo i hoʻokaʻawale ʻole ʻia.
    • Hoʻonui ka ʻōlelo aʻoaʻo "-Wfree-nonheap-object" i ka wehewehe ʻana i nā hihia kahi e kāhea ʻia ai nā hana hoʻomanaʻo me ka pointer ʻaʻole i loaʻa ma o nā hana hoʻokaʻawale hoʻomanaʻo.
    • ʻO ka ʻōlelo aʻoaʻo "-Wmaybe-uninitialized" ua hoʻonui i ka ʻike ʻana i nā kuhikuhi i hala i nā hana e pili ana i nā wahi hoʻomanaʻo uninitialized.
  • No ka ʻōlelo C, ua hoʻokō ʻia kahi ʻāpana o nā hiʻohiʻona hou i hoʻomohala ʻia i loko o ke kāʻei o ka maʻamau C2X (hiki ke kuhikuhi ʻia -std=c2x a me -std=gnu2x): macros BOOL_MAX a me BOOL_WIDTH, hōʻailona koho o nā inoa o nā ʻāpana i hoʻohana ʻole ʻia i ka hana. wehewehe (e like me C++), ʻano "[ [nodiscard]]", mea hoʻohana mua "__has_c_attribute", macros FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC___, INFINITI_NAN_SNAN, FLT_IS_IEC_60559 NAN, DEC_INFINITY a me DEC _NAN, NaN=mako no ʻO FloatN, _FloatNx a me _DecimalN, hiki ke kuhikuhi i nā kaha lele ma mua o ka hoʻolaha ʻana a ma ka hope o nā ʻōlelo hui.
  • No C ++, ua hoʻokō ʻia kekahi hapa o nā hoʻololi a me nā mea hou i manaʻo ʻia ma ka maʻamau C ++ 20, me nā hana virtual "consteval virtual", pseudo-destructors no ka hopena o ke ola o nā mea, ka hoʻohana ʻana i ka papa enum a me ka helu ʻana i ka nui o kahi ʻano ma ka ʻōlelo "hou".
  • No C++, ua hoʻohui ʻia ke kākoʻo hoʻokolohua no kekahi mau hoʻomaikaʻi e kūkulu ʻia ana no ka maʻamau C++23 e hiki mai ana (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). No ka laʻana, aia i kēia manawa ke kākoʻo no ka suffix maoli "zu" no nā waiwai nui_t i kau inoa ʻia.
  • Ua hoʻomaikaʻi ʻo libstdc++ i ke kākoʻo no ka maʻamau C++17, me ka hoʻokomo ʻana o std::from_chars a me std::to_chars hoʻokō no nā ʻano kiko lana. Ua hoʻokō ʻia nā mea hou o ka maʻamau C++20, me std::bit_cast, std::source_location, nā hana atomic e kali a hoʻolaha, , , , , a me nā mea o ka C++ maʻamau 23 e hiki mai ana (std::to_underlying, std::is_scoped_enum). Hoʻohui i ke kākoʻo hoʻokolohua no nā ʻano no ka hoʻoili ʻana i ka ʻikepili like (SIMD, Data-Parallel Types). Ua hoʻokō ʻia ka std::uniform_int_distribution.
  • Wehe ʻia ka hae maikaʻi alpha mai libgccjit, kahi waihona waihona no ka hoʻokomo ʻana i kahi mea hana code i loko o nā kaʻina hana ʻē aʻe a hoʻohana iā ia e hoʻonohonoho i ka JIT compilation o bytecode i loko o ka code mīkini. Hoʻohui i ka hiki ke kūkulu i ka libgccjit no MinGW.
  • Hoʻohui i ke kākoʻo no ka hoʻolālā AArch64 Armv8-R (-march=armv8-r). No nā papa hana AArch64 a me ARM, ua hoʻohui ʻia ke kākoʻo no nā kaʻina hana (parameter -mcpu a -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) a me Arm Neoverse N2 (neoverse-n2). Ua hoʻohui pū ʻia ʻo Fujitsu A64FX (a64fx) a me Arm Cortex-R82 (cortex-r82) CPU, e kākoʻo ana i ka hoʻolālā AArch64 wale nō.
  • Kākoʻo i hoʻohui ʻia no ka hoʻohana ʻana iā Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) a me MVE (AArch32 M-profile) Nā ʻōlelo aʻoaʻo SIMD e autovectorize i nā hana e hana ana i ka hoʻohui, unuhi, hoʻonui a me nā ʻano like ʻole o ka hoʻohui / unuhi ʻana ma luna. helu paʻakikī. Hoʻohui i ke kākoʻo mua no ka autovectorization no ARM me ka hoʻohana ʻana i ka hoʻonohonoho aʻo MVE.
  • No nā paepae ARM, hāʻawi ʻia kahi pūʻulu piha o nā hana C (Intrinsics) i hui pū ʻia, pani ʻia e nā kuhikuhi vector lōʻihi (SIMD), e uhi ana i nā ʻōlelo kuhikuhi NEON a pau i kākau ʻia ma ka kikoʻī ACLE Q3 2020.
  • Ua hoʻohui ʻia ke kākoʻo no ka gfx908 GPU i ka hope no ka hana ʻana i nā code no AMD GPU e pili ana i ka microarchitecture GCN.
  • Hoʻohui i ke kākoʻo no nā kaʻina hana hou a me nā hoʻonui hoʻonohonoho hoʻonohonoho hou i hoʻokomo ʻia i loko o lākou:
    • ʻO Intel Sapphire Rapids (-march=sapphirerapids, hiki ke kākoʻo i ke aʻo ʻana no MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-INT8, ANIXsBF-16 a me ANIX-BFVN.
    • ʻO Intel Alderlake (-march=alderlake, hiki i ke kākoʻo no CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI a me nā kuhikuhi HRESET).
    • Intel Rocketlake (-march=rocketlake, like me Rocket Lake me ke kākoʻo ʻole o SGX).
    • AMD Zen 3 (-march=znver3).
  • No nā ʻōnaehana IA-32/x86-64 e pili ana i nā kaʻina hana Intel, ua hoʻohui ʻia ke kākoʻo no nā kuhikuhi kaʻina hana hou TSXLDTRK, SERIALIZE, HRESET, UITRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI.
  • Hoʻohui i ke kākoʻo no nā hae "-march=x86-64-v[234]" e koho i nā pae hoʻolālā x86-64 (v2 - uhi iā SSE4.2, SSSE3, POPCNT a me CMPXCHG16B hoʻonui; v3 - AVX2 a me MOVBE; v4 - AVX-512 ).
  • Hoʻohui i ke kākoʻo no nā ʻōnaehana RISC-V me ke kauoha byte nui-endian. Hoʻohui ʻia "-misa-spec = *" koho e koho i ka mana o ka RISC-V aʻo hoʻonohonoho hoʻonohonoho kikoʻī kikoʻī. Hoʻohui i ke kākoʻo no AddressSanitizer a me ka pale ʻana i ka hoʻohana ʻana i nā inoa canary.
  • Hoʻomau ka hoʻomaikaʻi ʻana i ke ʻano loiloi static "-fanalyzer", e hana ana i ka loiloi interprocedural kumu waiwai o nā ala hoʻokō code a me nā kahe ʻikepili i ka papahana. Hiki i ke ʻano ke ʻike i nā pilikia ma ka pae hoʻohui, e like me nā kelepona ʻelua i ka hana manuahi () no ka wahi hoʻomanaʻo hoʻokahi, nā leaks descriptor file, dereferencing a me ka hala ʻana i nā kuhikuhi null, ke komo ʻana i nā poloka hoʻomanaʻo manuahi, me ka hoʻohana ʻana i nā waiwai uninitialized, etc. Ma ka mana hou:
    • Ua kākau hou ʻia ke code no ka nānā ʻana i ke kūlana o ka papahana. Ua hoʻoholo ʻia nā pilikia me ka nānā ʻana i nā faila C nui loa.
    • Hoʻohui i ke kākoʻo C++ mua.
    • Ua hoʻokaʻawale ʻia ka hoʻokaʻawale hoʻomanaʻo a me ka hoʻokaʻawale ʻana mai ka malloc kikoʻī a me nā hana manuahi, a i kēia manawa ke kākoʻo nei i nā mea hou / holoi a hou [] / holoi [].
    • Hoʻohui ʻia nā ʻōlelo aʻo hou: -Wanalyzer-shift-count-negative, -Wanalyzer-shift-count-overflow, -Wanalyzer-write-to-const a -Wanalyzer-write-to-string-literal.
    • Hoʻohui i nā koho debugging hou -fdump-analyzer-json a me -fno-analyzer-feasibility.
    • Ua hoʻokō ʻia ka hiki ke hoʻonui i ka mea loiloi ma o nā plugins no GCC (no ka laʻana, ua mākaukau kahi plugin e nānā i ka hoʻohana hewa ʻole ʻana o ka loka honua (GIL) ma CPython).

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka