Միջուկում Linux 5.18 ծրագրեր՝ C11 լեզվի ստանդարտի օգտագործումը թույլատրելու համար

Կապակցված ցուցակի կոդում Spectre-ի հետ կապված խնդիրները շտկելու համար նախատեսված թարմացման քննարկման ժամանակ պարզ դարձավ, որ խնդիրը կարող է ավելի նրբագեղ լուծվել, եթե միջուկում թույլատրվի տեղադրել ստանդարտի ավելի նոր տարբերակին համապատասխանող C կոդ։ Ներկայումս միջուկին ավելացված կոդը պետք է համապատասխանի ANSI C (C89) սպեցիֆիկացիային, որը ձևավորվել է դեռևս 1989 թվականին։

Spectre-ի հետ կապված կոդի խնդիրը առաջացել էր ցիկլից հետո առանձին սահմանված իտերատորի շարունակական օգտագործման պատճառով. մակրոն օգտագործվում է կապված ցուցակի վրայով իտերացիայի համար, և քանի որ ցիկլի իտերատորը փոխանցվում է այս մակրոյին, այն սահմանվում է ցիկլից դուրս և մնում է հասանելի ցիկլից հետո: C99 ստանդարտի օգտագործումը թույլ կտա ցիկլի փոփոխականները սահմանել for() բլոկում, ինչը կլուծեր խնդիրը՝ առանց շրջանցիկ լուծում գտնելու անհրաժեշտության:

Լինուս Տորվալդսը համաձայնեց ավելի նոր սպեցիֆիկացիաների աջակցությունը ներդնելու գաղափարի հետ և առաջարկեց անցնել 5.18 թվականին 11 միջուկում հրապարակված C2011 ստանդարտին: Նախնական փորձարկման ընթացքում GCC-ում և Clang-ում նոր ռեժիմում կառուցվածքը ընթացավ առանց շեղումների: Եթե ավելի մանրակրկիտ փորձարկման ընթացքում անսպասելի խնդիրներ չառաջանան, 5.18 միջուկի կառուցվածքի սկրիպտներում '--std=gnu89' տարբերակը կփոխարինվի '--std=gnu11 -Wno-shift-negative-value' տարբերակով: Դիտարկվեց նաև C17 ստանդարտի օգտագործման հնարավորությունը, բայց այս դեպքում անհրաժեշտ կլինի մեծացնել GCC-ի նվազագույն աջակցվող տարբերակը: C11 աջակցության միացումը համապատասխանում է GCC տարբերակի (5.1) ներկայիս պահանջներին:

Source: opennet.ru

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster