Linux kernelak 5.18 C hizkuntza estandarra C11 erabiltzea baimendu nahi du

Lotutako zerrenda-kodean Spectrerekin lotutako arazoak konpontzeko adabaki multzo bat eztabaidatzen ari zen bitartean, argi geratu zen arazoa dotoreago konpon zitekeela estandarraren bertsio berriagoa betetzen duen C kodea nukleoan sartzen uzten bazen. Gaur egun, gehitutako kernel-kodeak 89an sortutako ANSI C (C1989) zehaztapena bete behar du.

Kodean Spectreri lotutako arazo bat begiztaren ostean bereizita definitutako iterador bat etengabe erabiltzeak eragin zuen: makro bat erabiltzen da estekatutako zerrenda bateko elementuen gainean errepikatzeko, eta begizta iteratzailea makro horretara pasatzen denez, hau da. begiztatik kanpo definitzen da eta begiztaren ondoren eskuragarri geratzen da. C99 estandarra erabiltzeak begizta aldagaiak for() bloke batean definitzea ahalbidetuko luke, eta horrek arazoa konponduko luke konponbiderik sortu beharrik gabe.

Linus Torvaldsek zehaztapen berrietarako euskarria ezartzeko ideiarekin bat egin zuen eta 5.18 nukleoa C11 estandarra erabiltzera eramatea proposatu zuen, 2011n argitaratua. Aurretiazko probetan, GCC-en eta Clang-en muntaia modu berrian desbideratu gabe pasatu zen. Proba sakonagoetan ustekabeko arazorik sortzen ez bada, '--std=gnu5.18' aukera 89 kernel eraikitzeko scriptetan '--std=gnu11 -Wno-shift-negative-value'-rekin ordezkatuko da. C17 estandarra erabiltzeko aukera ere kontuan hartu zen, baina kasu honetan GCCren onartzen den gutxieneko bertsioa handitu beharko litzateke. C11 euskarria sartzea GCC bertsioaren (5.1) egungo eskakizunetara egokitzen da.

Iturria: opennet.ru

Gehitu iruzkin berria