Linux ядросы 5.18 C11 C тілінің стандартын пайдалануға рұқсат беруді жоспарлап отыр

Байланыстырылған тізім кодындағы Spectre-қа қатысты мәселелерді шешуге арналған патчтар жинағын талқылау барысында ядроға стандарттың жаңа нұсқасына сәйкес келетін C коды рұқсат етілсе, мәселені жақсырақ шешуге болатыны белгілі болды. Қазіргі уақытта қосылған ядро ​​коды 89 жылы қалыптасқан ANSI C (C1989) спецификациясына сәйкес келуі керек.

Кодтағы Spectre-қа қатысты мәселе циклден кейін бөлек анықталған итераторды үздіксіз пайдалану нәтижесінде туындады — макрос байланыстырылған тізімнің элементтерін қайталау үшін пайдаланылады және цикл итераторы сол макросқа жіберілгендіктен, ол циклдің өзінен тыс анықталады және циклден кейін қол жетімді болып қалады. C99 стандартын пайдалану циклдік айнымалы мәндерді for() блогында анықтауға мүмкіндік береді, бұл мәселені шешу жолдарын таппай-ақ шешеді.

Линус Торвальдс жаңа сипаттамаларға қолдау көрсету идеясымен келісті және 5.18 жылы жарияланған C11 стандартын пайдалану үшін 2011 ядросын жылжытуды ұсынды. Алдын ала тестілеу кезінде GCC және Clang-дағы құрастыру жаңа режимде ауытқусыз өтті. Егжей-тегжейлі тестілеу кезінде күтпеген мәселелер туындамаса, 5.18 ядро ​​құрастыру сценарийлеріндегі "--std=gnu89" опциясы "--std=gnu11 -Wno-shift-negative-value" мәніне ауыстырылады. C17 стандартын пайдалану мүмкіндігі де қарастырылды, бірақ бұл жағдайда GCC-тің ең аз қолдау көрсетілетін нұсқасын ұлғайту қажет болады. C11 қолдауын қосу GCC нұсқасына (5.1) ағымдағы талаптарға сәйкес келеді.

Ақпарат көзі: opennet.ru

пікір қалдыру