Linux-ydin 5.18 aikoo sallia C-kielistandardin C11 käytön

Kun keskusteltiin Spectre-ongelmien korjaamisesta linkitetyssä luettelokoodissa, kävi selväksi, että ongelma voitaisiin ratkaista sulavammin, jos ytimeen sallittaisiin C-koodi, joka noudattaa standardin uudempaa versiota. Tällä hetkellä lisätyn ytimen koodin on oltava ANSI C (C89) -määrityksen mukainen, joka muodostettiin vuonna 1989.

Spetteriin liittyvä ongelma koodissa johtui erikseen määritellyn iteraattorin jatkuvasta käytöstä silmukan jälkeen – makroa käytetään iteroimaan linkitetyn listan elementtejä, ja koska silmukkaiteraattori välitetään kyseiseen makroon, se on määritellään itse silmukan ulkopuolella ja pysyy käytettävissä silmukan jälkeen. C99-standardin käyttö sallisi silmukkamuuttujien määrittämisen for()-lohkossa, mikä ratkaisisi ongelman ilman, että tarvitsisi keksiä kiertotapoja.

Linus Torvalds hyväksyi ajatuksen ottaa käyttöön tuki uudemmille määrityksille ja ehdotti 5.18-ytimen siirtämistä käyttämään vuonna 11 julkaistua C2011-standardia. Esitestauksen aikana kokoonpano GCC:ssä ja Clangissa uudessa tilassa sujui ilman poikkeamia. Jos perusteellisessa testauksessa ei ilmene odottamattomia ongelmia, 5.18-ytimen koontiskriptien vaihtoehto "--std=gnu89" korvataan vaihtoehdolla "--std=gnu11 -Wno-shift-negative-value". Myös C17-standardin käyttömahdollisuus pohdittiin, mutta tässä tapauksessa GCC:n tuettua vähimmäisversiota olisi lisättävä. C11-tuen sisällyttäminen sopii GCC-version (5.1) nykyisiin vaatimuksiin.

Lähde: opennet.ru

Lisää kommentti