Linux kernel 5.18 planira da dozvoli upotrebu standarda jezika C C11

Dok se raspravljalo o skupu zakrpa za rješavanje problema povezanih sa Spectreom u kodu povezane liste, postalo je jasno da bi problem mogao biti riješen gracioznije ako se C kod koji je u skladu s novijom verzijom standarda dozvoli u kernel. Trenutno, dodani kernel kod mora biti u skladu sa ANSI C (C89) specifikacijom, formiranom još 1989. godine.

Problem vezan za Spectre u kodu je uzrokovan kontinuiranom upotrebom posebno definiranog iteratora nakon petlje—makro se koristi za ponavljanje elemenata povezane liste, a budući da je iterator petlje proslijeđen tom makrou, on je definiran izvan same petlje i ostaje dostupan nakon petlje. Korištenje standarda C99 omogućilo bi definiranje varijabli petlje u for() bloku, što bi riješilo problem bez potrebe da se smišljaju rješenja.

Linus Torvalds se složio s idejom implementacije podrške za novije specifikacije i predložio je premještanje kernela 5.18 na korištenje C11 standarda, objavljenog 2011. godine. Prilikom preliminarnog testiranja, montaža u GCC-u i Clang-u u novom režimu protekla je bez odstupanja. Ako se tokom detaljnijeg testiranja ne pojave nepredviđeni problemi, opcija '--std=gnu5.18' će biti zamijenjena sa '--std=gnu89 -Wno-shift-negative-value' u skriptama za izgradnju kernela 11. Razmatrana je i mogućnost korištenja standarda C17, ali bi u ovom slučaju bilo potrebno povećati minimalnu podržanu verziju GCC-a. Uključivanje C11 podrške uklapa se u trenutne zahtjeve za GCC verziju (5.1).

izvor: opennet.ru

Dodajte komentar