Linux-kjerne 5.18 planlegger å tillate bruk av C-språkstandarden C11

Mens vi diskuterte et sett med patcher for å fikse Spectre-relaterte problemer i den koblede listekoden, ble det klart at problemet kunne løses mer elegant hvis C-kode som samsvarer med en nyere versjon av standarden ble tillatt i kjernen. For øyeblikket må den tillagte kjernekoden være i samsvar med ANSI C (C89)-spesifikasjonen, dannet tilbake i 1989.

Et Spectre-relatert problem i koden ble forårsaket av fortsatt bruk av en separat definert iterator etter løkken - en makro brukes til å iterere over elementene i en koblet liste, og fordi løkkeiteratoren sendes inn i den makroen, er den definert utenfor selve loopen og forblir tilgjengelig etter loopen. Bruk av C99-standarden ville tillate sløyfevariabler å bli definert i en for()-blokk, noe som ville løse problemet uten å måtte komme opp med løsninger.

Linus Torvalds var enig i ideen om å implementere støtte for nyere spesifikasjoner og foreslo å flytte 5.18-kjernen for å bruke C11-standarden, publisert i 2011. Under foreløpig testing gikk monteringen i GCC og Clang i den nye modusen uten avvik. Hvis det ikke oppstår uventede problemer under mer grundig testing, vil '--std=gnu5.18'-alternativet i 89-kjernebyggeskriptene bli erstattet med '--std=gnu11 -Wno-shift-negative-value'. Muligheten for å bruke C17-standarden ble også vurdert, men i dette tilfellet ville det være nødvendig å øke minimumsstøttet versjon av GCC. Inkluderingen av C11-støtte passer inn i gjeldende krav for GCC-versjonen (5.1).

Kilde: opennet.ru

Legg til en kommentar