Linux yadrosi 5.18 C tili standarti C11 dan foydalanishga ruxsat berishni rejalashtirmoqda

Bog'langan ro'yxat kodidagi Spectre bilan bog'liq muammolarni tuzatish uchun yamoqlar to'plamini muhokama qilishda, yadroga standartning yangi versiyasiga mos keladigan C kodiga ruxsat berilsa, muammoni yanada oqilona hal qilish mumkinligi aniq bo'ldi. Hozirgi vaqtda qo'shilgan yadro kodi 89 yilda yaratilgan ANSI C (C1989) spetsifikatsiyasiga mos kelishi kerak.

Koddagi Spectre bilan bog'liq muammo, tsikldan keyin alohida belgilangan iteratordan doimiy foydalanish natijasida yuzaga keldi - bog'langan ro'yxat elementlarini takrorlash uchun makro ishlatiladi va tsikl iteratori ushbu makroga o'tkazilganligi sababli, u tsiklning o'zidan tashqarida aniqlanadi va tsikldan keyin mavjud bo'lib qoladi. C99 standartidan foydalanish loop o'zgaruvchilarni for() blokida aniqlash imkonini beradi, bu esa muammoni vaqtinchalik echimlar topmasdan hal qiladi.

Linus Torvalds yangi spetsifikatsiyalarni qo'llab-quvvatlashni amalga oshirish g'oyasiga rozi bo'ldi va 5.18 yilda nashr etilgan C11 standartidan foydalanish uchun 2011 yadrosini ko'chirishni taklif qildi. Dastlabki sinovlar davomida GCC va Clang-dagi yig'ilish yangi rejimda og'ishlarsiz o'tdi. Agar chuqurroq sinov paytida kutilmagan muammolar yuzaga kelmasa, "--std=gnu5.18" opsiyasi 89 yadro yaratish skriptlarida "--std=gnu11 -Wno-shift-negative-value" bilan almashtiriladi. C17 standartidan foydalanish imkoniyati ham ko'rib chiqildi, ammo bu holda GCC ning minimal qo'llab-quvvatlanadigan versiyasini oshirish kerak bo'ladi. C11 qo'llab-quvvatlashining kiritilishi GCC versiyasi (5.1) uchun joriy talablarga mos keladi.

Manba: opennet.ru

a Izoh qo'shish