Linux kodols 5.18 plāno atļaut izmantot C valodas standartu C11

Apspriežot ielāpu komplektu, lai novērstu ar Spectre saistītas problēmas saistītajā saraksta kodā, kļuva skaidrs, ka problēmu varētu atrisināt daudz elegantāk, ja kodolā tiktu atļauts C kods, kas atbilst jaunākai standarta versijai. Pašlaik pievienotajam kodola kodam jāatbilst ANSI C (C89) specifikācijai, kas tika izveidota 1989. gadā.

Ar Spectre saistītu problēmu kodā izraisīja atsevišķi definēta iteratora nepārtraukta izmantošana pēc cilpas — makro tiek izmantots, lai atkārtotu saistītā saraksta elementus, un, tā kā cilpas iterators tiek nodots šim makro, tas ir definēts ārpus pašas cilpas un paliek pieejams pēc cilpas. Izmantojot C99 standartu, cilpas mainīgos varētu definēt for() blokā, kas atrisinātu problēmu, neradot risinājumus.

Linuss Torvalds piekrita idejai ieviest atbalstu jaunākām specifikācijām un ierosināja pārvietot 5.18 kodolu, lai izmantotu C11 standartu, kas publicēts 2011. gadā. Iepriekšējās pārbaudes laikā montāža GCC un Clang jaunajā režīmā pagāja bez novirzēm. Ja rūpīgākas pārbaudes laikā nerodas neparedzētas problēmas, 5.18. kodola veidošanas skriptu opcija "--std=gnu89" tiks aizstāta ar "--std=gnu11 -Wno-shift-negative-value". Tika apsvērta arī iespēja izmantot C17 standartu, taču šajā gadījumā būtu nepieciešams palielināt minimāli atbalstīto GCC versiju. C11 atbalsta iekļaušana atbilst pašreizējām prasībām GCC versijai (5.1).

Avots: opennet.ru

Pievieno komentāru