LLVM 15.0 కంపైలర్ సూట్ విడుదల

ఆరు నెలల అభివృద్ధి తర్వాత, LLVM 15.0 ప్రాజెక్ట్ విడుదల చేయబడింది - GCC-అనుకూల టూల్‌కిట్ (కంపైలర్‌లు, ఆప్టిమైజర్‌లు మరియు కోడ్ జనరేటర్లు) ఇది ప్రోగ్రామ్‌లను RISC-వంటి వర్చువల్ సూచనల యొక్క ఇంటర్మీడియట్ బిట్‌కోడ్‌గా కంపైల్ చేస్తుంది (ఒక తక్కువ-స్థాయి వర్చువల్ మెషీన్‌తో బహుళ-స్థాయి ఆప్టిమైజేషన్ సిస్టమ్). ఉత్పత్తి చేయబడిన సూడోకోడ్‌ను JIT కంపైలర్‌ని ఉపయోగించి ప్రోగ్రామ్ అమలు సమయంలో నేరుగా మెషీన్ సూచనలుగా మార్చవచ్చు.

క్లాంగ్ 15.0లో ప్రధాన మెరుగుదలలు:

  • x86 ఆర్కిటెక్చర్ ఆధారంగా సిస్టమ్‌ల కోసం, “-fzero-call-used-regs” ఫ్లాగ్ జోడించబడింది, ఇది ఫంక్షన్‌లో ఉపయోగించిన అన్ని CPU రిజిస్టర్‌లు ఫంక్షన్ నుండి నియంత్రణను తిరిగి ఇచ్చే ముందు సున్నాకి రీసెట్ చేయబడేలా నిర్ధారిస్తుంది. ఈ ఐచ్ఛికం ఫంక్షన్‌ల నుండి సమాచారం లీకేజీకి వ్యతిరేకంగా రక్షించడానికి మరియు దోపిడీలలో ROP (రిటర్న్-ఓరియంటెడ్ ప్రోగ్రామింగ్) గాడ్జెట్‌లను రూపొందించడానికి అనువైన బ్లాక్‌ల సంఖ్యను సుమారు 20% తగ్గించడానికి మిమ్మల్ని అనుమతిస్తుంది.
  • C కోడ్ కోసం స్ట్రక్చర్‌ల మెమరీ ప్లేస్‌మెంట్ యొక్క యాదృచ్ఛికీకరణ అమలు చేయబడింది, ఇది దుర్బలత్వాల దోపిడీ సందర్భంలో నిర్మాణాల నుండి డేటాను సంగ్రహించడం క్లిష్టతరం చేస్తుంది. randomize_layout మరియు no_randomize_layout అట్రిబ్యూట్‌లను ఉపయోగించి రాండమైజేషన్ ఆన్ మరియు ఆఫ్ చేయబడింది మరియు "-frandomize-layout-seed" లేదా "-frandomize-layout-seed-file" ఫ్లాగ్‌ని ఉపయోగించి విత్తనాన్ని సెట్ చేయడం అవసరం.
  • "-fstrict-flex-arrays=" ఫ్లాగ్ జోడించబడింది ", దీనితో మీరు నిర్మాణాలలో అనువైన శ్రేణి మూలకం కోసం సరిహద్దులను నియంత్రించవచ్చు (ఫ్లెక్సిబుల్ అర్రే సభ్యులు, నిర్మాణం చివరిలో నిరవధిక పరిమాణం యొక్క శ్రేణి). 0 (డిఫాల్ట్)కి సెట్ చేసినప్పుడు, శ్రేణితో కూడిన నిర్మాణం యొక్క చివరి మూలకం ఎల్లప్పుడూ సౌకర్యవంతమైన శ్రేణిగా ప్రాసెస్ చేయబడుతుంది, 1 - పరిమాణాలు మాత్రమే [], [0] మరియు [1] అనువైన శ్రేణిగా ప్రాసెస్ చేయబడతాయి, 2 - మాత్రమే పరిమాణాలు [] మరియు [0] అనువైన శ్రేణి వలె ప్రాసెస్ చేయబడతాయి.
  • షేడర్‌లను వ్రాయడానికి డైరెక్ట్‌ఎక్స్‌లో ఉపయోగించే C-లాంటి భాష HLSL (హై-లెవల్ షేడర్ లాంగ్వేజ్) కోసం ప్రయోగాత్మక మద్దతు జోడించబడింది.
  • స్థిర మరియు వేరియబుల్-పొడవు శ్రేణులతో అనుబంధించబడిన అననుకూల ఆర్గ్యుమెంట్ డిక్లరేషన్‌లతో ఫంక్షన్‌లను భర్తీ చేయడం గురించి హెచ్చరించడానికి "-వార్రే-పారామీటర్" జోడించబడింది.
  • MSVCతో మెరుగైన అనుకూలత. MSVCలో అందించబడిన "#ప్రాగ్మా ఫంక్షన్" (ఇన్‌లైన్ విస్తరణకు బదులుగా ఫంక్షన్ కాల్‌ని రూపొందించమని కంపైలర్‌ని నిర్దేశిస్తుంది) మరియు "#pragma alloc_text" (ఫంక్షన్ కోడ్‌తో విభాగం పేరును నిర్వచిస్తుంది) కోసం మద్దతు జోడించబడింది. MSVC-అనుకూలమైన /JMC మరియు /JMC ఫ్లాగ్‌లకు మద్దతు జోడించబడింది.
  • భవిష్యత్ C2X మరియు C++23 ప్రమాణాలకు మద్దతునిచ్చే పని కొనసాగుతుంది. C భాష కోసం, కిందివి అమలు చేయబడతాయి: noreturn లక్షణం, కీలకపదాలు తప్పు మరియు నిజమైనవి, ఇచ్చిన బిట్ డెప్త్ యొక్క పూర్ణాంకాల కోసం _BitInt(N) రకం, *_WIDTH మాక్రోలు, UTF-8 ఎన్‌కోడ్ చేసిన అక్షరాల కోసం u8 ఉపసర్గ.

    C++ కోసం, కిందివి అమలు చేయబడతాయి: మాడ్యూల్ విలీనం, ఫంక్షన్ సభ్యుల ABI ఐసోలేషన్, మాడ్యూల్స్‌లో నాన్-లోకల్ వేరియబుల్స్ యొక్క డైనమిక్ ఇనిషియలైజేషన్, మల్టీడైమెన్షనల్ ఇండెక్స్ ఆపరేటర్లు, ఆటో(x), నాన్-లిటరల్ వేరియబుల్స్, గోటో మరియు లేబుల్‌లు constexprగా ప్రకటించబడ్డాయి , డీలిమిటెడ్ ఎస్కేప్ సీక్వెన్స్‌లు, పేరు ఎస్కేప్ క్యారెక్టర్‌లు.

  • OpenCL మరియు OpenMP మద్దతుతో అనుబంధించబడిన సామర్థ్యాలు విస్తరించబడ్డాయి. OpenCL పొడిగింపు cl_khr_subgroup_rotate కోసం మద్దతు జోడించబడింది.
  • x86 ఆర్కిటెక్చర్ కోసం, షరతులు లేని ఫార్వర్డ్ జంప్ ఆపరేషన్ల తర్వాత సూచనల ఊహాజనిత అమలు వల్ల ప్రాసెసర్‌లలోని దుర్బలత్వాల నుండి రక్షణ జోడించబడింది. మెమరీలో బ్రాంచ్ ఇన్‌స్ట్రక్షన్ (SLS, స్ట్రెయిట్ లైన్ స్పెక్యులేషన్) అనుసరించిన వెంటనే సూచనలను ముందస్తుగా ప్రాసెస్ చేయడం వల్ల సమస్య ఏర్పడుతుంది. రక్షణను ప్రారంభించడానికి, “-mharden-sls=[none|all|return|indirect-jmp]” ఎంపిక ప్రతిపాదించబడింది.
  • SSE2 పొడిగింపుకు మద్దతిచ్చే ప్లాట్‌ఫారమ్‌ల కోసం, _Float16 రకం జోడించబడింది, AVX512-FP16 సూచనలకు మద్దతు లేని సందర్భంలో ఫ్లోట్ రకాన్ని ఉపయోగించి ఇది అనుకరించబడుతుంది.
  • RDPRU సూచనల వినియోగాన్ని నియంత్రించడానికి "-m[no-]rdpru" ఫ్లాగ్ జోడించబడింది, AMD Zen2 ప్రాసెసర్‌లతో ప్రారంభించి మద్దతు ఉంది.
  • RETBLEED దుర్బలత్వం నుండి రక్షించడానికి "-mfunction-return=thunk-extern" ఫ్లాగ్ జోడించబడింది, ఇది పరోక్ష శాఖల కోసం స్పెక్యులేటివ్ ఎగ్జిక్యూషన్ మెకానిజం యొక్క ప్రమేయాన్ని మినహాయించే సూచనల క్రమాన్ని జోడించడం ద్వారా పని చేస్తుంది.

LLVM 15.0లో కీలక ఆవిష్కరణలు:

  • Cortex-M85 CPU, Armv9-A, Armv9.1-A మరియు Armv9.2-A ఆర్కిటెక్చర్‌లు, Armv8.1-M PACBTI-M పొడిగింపులకు మద్దతు జోడించబడింది.
  • DirectX కోసం ప్రయోగాత్మక బ్యాకెండ్ జోడించబడింది, ఇది DirectX షేడర్‌ల కోసం ఉపయోగించే DXIL (DirectX ఇంటర్మీడియట్ లాంగ్వేజ్) ఆకృతికి మద్దతు ఇస్తుంది. అసెంబ్లీ సమయంలో “-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX” పరామితిని పేర్కొనడం ద్వారా బ్యాకెండ్ ప్రారంభించబడుతుంది.
  • "ఫార్మాట్" లైబ్రరీ మరియు "పరిధులు" లైబ్రరీ యొక్క ప్రతిపాదిత ప్రయోగాత్మక సంస్కరణను పూర్తి చేయడంతో సహా, C++20 మరియు C++2b ప్రమాణాల యొక్క కొత్త ఫీచర్లను Libc++ అమలు చేయడం కొనసాగిస్తుంది.
  • x86, PowerPC మరియు RISC-V ఆర్కిటెక్చర్‌ల కోసం మెరుగైన బ్యాకెండ్‌లు.
  • LLD లింకర్ మరియు LLDB డీబగ్గర్ యొక్క సామర్థ్యాలు మెరుగుపరచబడ్డాయి.

మూలం: opennet.ru

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