GCC 12 కంపైలర్ సూట్ విడుదల

ఒక సంవత్సరం అభివృద్ధి తర్వాత, ఉచిత కంపైలర్ సూట్ GCC 12.1 విడుదల చేయబడింది, ఇది కొత్త GCC 12.x శాఖలో మొదటి ముఖ్యమైన విడుదల. కొత్త విడుదల నంబరింగ్ స్కీమ్‌కు అనుగుణంగా, వెర్షన్ 12.0 డెవలప్‌మెంట్ ప్రాసెస్‌లో ఉపయోగించబడింది మరియు GCC 12.1 విడుదలకు కొంతకాలం ముందు, GCC 13.0 బ్రాంచ్ ఇప్పటికే విడిపోయింది, దీని ఆధారంగా తదుపరి ప్రధాన విడుదల, GCC 13.1, ఏర్పడుతుంది. మే 23న, ఈ ప్రాజెక్ట్ GCC యొక్క మొదటి ఎడిషన్ ఏర్పడి 35 సంవత్సరాలను జరుపుకుంటుంది.

ప్రధాన మార్పులు:

  • CTF (కాంపాక్ట్ టైప్ ఫార్మాట్) డీబగ్గింగ్ ఫార్మాట్‌కు మద్దతు జోడించబడింది, ఇది C రకాలు, ఫంక్షన్‌ల మధ్య కనెక్షన్‌లు మరియు డీబగ్గింగ్ చిహ్నాల గురించి సమాచారాన్ని కాంపాక్ట్ నిల్వను అందిస్తుంది. ELF ఆబ్జెక్ట్‌లలో పొందుపరిచినప్పుడు, డేటా డూప్లికేషన్‌ను నివారించడానికి ఫార్మాట్ EFL అక్షర పట్టికలను ఉపయోగించడానికి అనుమతిస్తుంది.
  • 1980లలో సృష్టించబడిన "STABS" డీబగ్గింగ్ సమాచార నిల్వ ఆకృతికి మద్దతు నిలిపివేయబడింది.
  • C మరియు C++ భాషలకు భవిష్యత్తులో C2X మరియు C++23 ప్రమాణాలకు మద్దతును విస్తరించే పని కొనసాగుతుంది. ఉదాహరణకు, "if consteval" వ్యక్తీకరణకు మద్దతు జోడించబడింది; ఫంక్షన్ ఆర్గ్యుమెంట్‌లలో స్వయంచాలకంగా ఉపయోగించడానికి అనుమతించబడింది ("f(auto(g()))"); constexprగా ప్రకటించబడిన ఫంక్షన్లలో నాన్-లిటరల్ వేరియబుల్స్, గోటో మరియు లేబుల్‌ల ఉపయోగం అనుమతించబడుతుంది; మల్టీడైమెన్షనల్ ఇండెక్స్ ఆపరేటర్స్ ఆపరేటర్[]కి మద్దతు జోడించబడింది; if, for మరియు స్విచ్, ఇనిషియలైజేషన్ బ్లాక్‌ల సామర్థ్యాలు విస్తరించబడ్డాయి ("కోసం (T = int; T e : v)").
  • C++ స్టాండర్డ్ లైబ్రరీ C++20 మరియు C++23 ప్రమాణాల ప్రయోగాత్మక విభాగాలకు మద్దతును మెరుగుపరిచింది. std::move_only_function, , std::basic_string::resize_and_overwrite, , మరియు std::invoke_r కోసం మద్దతు జోడించబడింది. constexpr ఫంక్షన్లలో std::unique_ptr, std::vector, std::basic_string, std::optional మరియు std::variantని ఉపయోగించడానికి అనుమతించబడింది.
  • Fortran ఫ్రంటెండ్ TS 29113 స్పెసిఫికేషన్‌కు పూర్తి మద్దతును అందిస్తుంది, ఇది Fortran మరియు C కోడ్ మధ్య పోర్టబిలిటీని నిర్ధారించే సామర్థ్యాలను వివరిస్తుంది.
  • __builtin_shufflevector(vec1, vec2, index1, index2, ...) పొడిగింపు కోసం మునుపు క్లాంగ్‌కి జోడించబడిన మద్దతు జోడించబడింది, ఇది సాధారణ వెక్టర్ షఫుల్ మరియు షఫుల్ ఆపరేషన్‌లను నిర్వహించడానికి ఒకే కాల్‌ని అందిస్తుంది.
  • "-O2" ఆప్టిమైజేషన్ స్థాయిని ఉపయోగిస్తున్నప్పుడు, వెక్టరైజేషన్ డిఫాల్ట్‌గా ప్రారంభించబడుతుంది (ది -ftree-vectorize మరియు -fvect-cost-model=చాలా-చౌక మోడ్‌లు ప్రారంభించబడ్డాయి). వెక్టరైజ్ చేయబడిన స్కేలార్ కోడ్‌ను వెక్టర్ కోడ్ పూర్తిగా భర్తీ చేయగలిగితే మాత్రమే చాలా చౌకైన మోడల్ వెక్టరైజేషన్‌ని అనుమతిస్తుంది.
  • సమస్యలను ట్రాక్ చేయడానికి మరియు అన్‌ఇనిషియలైజ్డ్ వేరియబుల్స్‌తో అనుబంధించబడిన దుర్బలత్వాలను నిరోధించడానికి స్టాక్‌పై వేరియబుల్స్ యొక్క స్పష్టమైన ప్రారంభీకరణను ప్రారంభించడానికి "-ftrivial-auto-var-init" మోడ్ జోడించబడింది.
  • C మరియు C++ భాషల కోసం, ఒక వస్తువు యొక్క పరిమాణాన్ని నిర్ణయించడానికి అంతర్నిర్మిత ఫంక్షన్ __builtin_dynamic_object_size జోడించబడింది, Clang నుండి ఇదే విధమైన ఫంక్షన్‌కు అనుకూలంగా ఉంటుంది.
  • C మరియు C++ భాషల కోసం, “అందుబాటులో లేని” లక్షణానికి మద్దతు జోడించబడింది (ఉదాహరణకు, మీరు వాటిని ఉపయోగించడానికి ప్రయత్నిస్తే లోపం ఏర్పడే ఫంక్షన్‌లను మీరు గుర్తించవచ్చు).
  • C మరియు C++ భాషల కోసం, “#elifdef” మరియు “#elifndef” అనే ప్రిప్రాసెసింగ్ ఆదేశాలకు మద్దతు జోడించబడింది.
  • UTF-8 అక్షరాలు తప్పుగా ఉపయోగించబడితే హెచ్చరికను ప్రదర్శించడానికి "-Wbidi-chars" ఫ్లాగ్ జోడించబడింది, ద్వి దిశాత్మక వచనం ప్రదర్శించబడే క్రమాన్ని మారుస్తుంది.
  • శ్రేణులను సూచించే రెండు ఒపెరాండ్‌లను పోల్చడానికి ప్రయత్నిస్తున్నప్పుడు హెచ్చరించడానికి "-వార్రే-పోల్చండి" ఫ్లాగ్ జోడించబడింది.
  • ఓపెన్‌ఎమ్‌పి 5.0 మరియు 5.1 (ఓపెన్ మల్టీ-ప్రాసెసింగ్) ప్రమాణాల అమలు, ఇది APIని నిర్వచిస్తుంది మరియు భాగస్వామ్య మెమరీ మరియు వెక్టరైజేషన్ యూనిట్‌లతో (SIMD) మల్టీ-కోర్ మరియు హైబ్రిడ్ (CPU+GPU/DSP) సిస్టమ్‌లపై సమాంతర ప్రోగ్రామింగ్ పద్ధతులను వర్తించే పద్ధతులను నిర్వచిస్తుంది. , కొనసాగింది.
  • OpenACC 2.6 సమాంతర ప్రోగ్రామింగ్ స్పెసిఫికేషన్ యొక్క మెరుగైన అమలు, ఇది GPUలు మరియు NVIDIA PTX వంటి ప్రత్యేక ప్రాసెసర్‌లపై ఆఫ్‌లోడింగ్ కార్యకలాపాల కోసం సాధనాలను నిర్వచిస్తుంది.
  • పొడిగించిన సూచనలకు మద్దతు Intel AVX86-FP512 మరియు _Float16 రకం x16 ఆర్కిటెక్చర్ కోసం కోడ్ జనరేషన్ బ్యాకెండ్‌కు జోడించబడింది.
  • x86 ఆర్కిటెక్చర్ కోసం, షరతులు లేని ఫార్వర్డ్ జంప్ ఆపరేషన్ల తర్వాత సూచనల ఊహాజనిత అమలు వల్ల ప్రాసెసర్‌లలోని దుర్బలత్వాల నుండి రక్షణ జోడించబడింది. మెమరీలో బ్రాంచ్ సూచనలను అనుసరించి వెంటనే సూచనలను ముందస్తుగా ప్రాసెస్ చేయడం వల్ల సమస్య ఏర్పడుతుంది (SLS, స్ట్రెయిట్ లైన్ స్పెక్యులేషన్). రక్షణను ప్రారంభించడానికి, “-mharden-sls” ఎంపిక ప్రతిపాదించబడింది.
  • ప్రయోగాత్మక స్టాటిక్ ఎనలైజర్‌కు అన్‌ఇనిషియలైజ్డ్ వేరియబుల్స్ వినియోగాన్ని గుర్తించడం జోడించబడింది. ఇన్‌లైన్ ఇన్సర్ట్‌లలో అసెంబ్లీ కోడ్‌ని విశ్లేషించడానికి ప్రారంభ మద్దతు జోడించబడింది. మెరుగైన మెమరీ ట్రాకింగ్. స్విచ్ ఎక్స్‌ప్రెషన్‌లను ప్రాసెస్ చేయడానికి కోడ్ తిరిగి వ్రాయబడింది.
  • libgccjitకి 30 కొత్త కాల్‌లు జోడించబడ్డాయి, ఇది ఇతర ప్రక్రియలలో కోడ్ జనరేటర్‌ను పొందుపరచడానికి మరియు JIT బైట్‌కోడ్‌ని మెషిన్ కోడ్‌లో కంపైల్ చేయడానికి ఉపయోగించే భాగస్వామ్య లైబ్రరీ.
  • BPF బైట్‌కోడ్‌ను రూపొందించడానికి CO-RE (ఒకసారి కంపైల్ చేయండి - ప్రతిచోటా అమలు చేయండి) మెకానిజం కోసం మద్దతు బ్యాకెండ్‌కు జోడించబడింది, ఇది Linux కెర్నల్ కోసం eBPF ప్రోగ్రామ్‌ల కోడ్‌ను ఒకసారి మాత్రమే కంపైల్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది మరియు ప్రత్యేక యూనివర్సల్ లోడర్‌ను ఉపయోగించుకుంటుంది. ప్రోగ్రామ్ ప్రస్తుత కెర్నల్ మరియు BPF రకాల ఆకృతికి లోడ్ చేయబడింది). CO-RE సంకలనం చేయబడిన eBPF ప్రోగ్రామ్‌ల యొక్క పోర్టబిలిటీ సమస్యను పరిష్కరిస్తుంది, ఇది గతంలో అవి సంకలనం చేయబడిన కెర్నల్ వెర్షన్‌లో మాత్రమే ఉపయోగించబడేవి, ఎందుకంటే డేటా స్ట్రక్చర్‌లలో మూలకాల స్థానం వెర్షన్ నుండి సంస్కరణకు మారుతుంది.
  • RISC-V బ్యాకెండ్ కొత్త ఇన్‌స్ట్రక్షన్ సెట్ ఆర్కిటెక్చర్ ఎక్స్‌టెన్షన్స్ zba, zbb, zbc మరియు zbs, అలాగే వెక్టర్ మరియు స్కేలార్ క్రిప్టోగ్రాఫిక్ ఆపరేషన్‌ల కోసం ISA ఎక్స్‌టెన్షన్‌లకు మద్దతునిస్తుంది. డిఫాల్ట్‌గా, RISC-V ISA 20191213 స్పెసిఫికేషన్‌కు మద్దతు అందించబడింది. T-HEAD c906 కోర్ల కోసం ఆప్టిమైజేషన్‌లను ప్రారంభించడానికి -mtune=thead-c906 ఫ్లాగ్ జోడించబడింది.
  • GCN మైక్రోఆర్కిటెక్చర్ ఆధారంగా AMD GPUల కోసం కోడ్ జనరేషన్ బ్యాకెండ్‌కు __int128_t/integer(kind=16) రకానికి మద్దతు జోడించబడింది. ఒక్కో సమూహానికి ఒక కంప్యూటింగ్ యూనిట్ (CU)కి 40 వర్క్ గ్రూప్‌లు మరియు 16 ఇన్స్ట్రక్షన్ ఫ్రంట్‌లు (వేవ్‌ఫ్రంట్, SIMD ఇంజిన్ ద్వారా సమాంతరంగా అమలు చేయబడిన థ్రెడ్‌ల సెట్) వరకు ఉపయోగించడం సాధ్యమవుతుంది. గతంలో, ఒక CUకి ఒక సూచన అంచు మాత్రమే అనుమతించబడింది.
  • NVIDIA PTX (ప్యారలల్ థ్రెడ్ ఎగ్జిక్యూషన్) ఇన్‌స్ట్రక్షన్ సెట్ ఆర్కిటెక్చర్‌ని ఉపయోగించి కోడ్‌ను రూపొందించడానికి రూపొందించబడిన NVPTX బ్యాకెండ్, “-march”, “-mptx” మరియు “-march-map” ఫ్లాగ్‌లను ఉపయోగించగల సామర్థ్యాన్ని జోడించింది. PTX ISA sm_53, sm_70, sm_75 మరియు sm_80 కోసం అమలు చేయబడిన మద్దతు. డిఫాల్ట్ ఆర్కిటెక్చర్ sm_30.
  • PowerPC/PowerPC64/RS6000 ప్రాసెసర్‌ల కోసం బ్యాకెండ్‌లో అంతర్నిర్మిత ఫంక్షన్‌ల అమలులు తిరిగి వ్రాయబడ్డాయి. అంతర్నిర్మిత విధులు __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar మరియు డాక్యుమెంట్_బిల్టిన్_సెట్.
  • Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) మరియు Arm Cortex-X710 (cortex- x2) కోసం మద్దతు. "-మార్చ్" ఎంపికతో ఉపయోగించడానికి కొత్త ARMv2 ఆర్కిటెక్చర్ ఎంపికలకు మద్దతు జోడించబడింది: armv8-a, armv8.7-a, armv8.8-a. విస్తరించిన ARM సూచనల (ls9) వినియోగం ఆధారంగా అటామిక్ లోడింగ్ మరియు డేటాను మెమరీలోకి సేవ్ చేయడం కోసం కంపైలర్ (ఇంట్రిన్సిక్స్)లో నిర్మించిన C ఫంక్షన్‌ల అమలు జోడించబడింది. mopsoption ARM పొడిగింపును ఉపయోగించి memcpy, memmove మరియు memset ఫంక్షన్‌లను వేగవంతం చేయడానికి మద్దతు జోడించబడింది.
  • కొత్త చెకింగ్ మోడ్ “-fsanitize=shadow-call-stack” (ShadowCallStack) జోడించబడింది, ఇది ప్రస్తుతం AArch64 ఆర్కిటెక్చర్‌కు మాత్రమే అందుబాటులో ఉంది మరియు “-ffixed-r18” ఎంపికతో కోడ్‌ను రూపొందించేటప్పుడు పని చేస్తుంది. స్టాక్‌పై బఫర్ ఓవర్‌ఫ్లో అయినప్పుడు ఫంక్షన్ నుండి రిటర్న్ అడ్రస్‌ను ఓవర్‌రైట్ చేయకుండా మోడ్ రక్షణను అందిస్తుంది. ఫంక్షన్‌కు నియంత్రణను బదిలీ చేసిన తర్వాత మరియు ఫంక్షన్ నుండి నిష్క్రమించే ముందు ఈ చిరునామాను తిరిగి పొందిన తర్వాత రిటర్న్ చిరునామాను ప్రత్యేక "షాడో" స్టాక్‌లో సేవ్ చేయడం రక్షణ యొక్క సారాంశం.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి