Kernel Linux 5.18 berencana mengizinkan penggunaan standar bahasa C C11

Saat mendiskusikan serangkaian tambalan untuk memperbaiki masalah terkait Spectre dalam kode daftar tertaut, menjadi jelas bahwa masalah tersebut dapat diselesaikan dengan lebih baik jika kode C yang sesuai dengan versi standar yang lebih baru diizinkan masuk ke dalam kernel. Saat ini, kode kernel yang ditambahkan harus mematuhi spesifikasi ANSI C (C89), yang dibentuk pada tahun 1989.

Masalah terkait Spectre dalam kode disebabkan oleh penggunaan terus-menerus dari iterator yang ditentukan secara terpisah setelah perulanganβ€”makro digunakan untuk melakukan perulangan pada elemen daftar tertaut, dan karena iterator perulangan diteruskan ke makro tersebut, maka masalah tersebut didefinisikan di luar loop itu sendiri dan tetap tersedia setelah loop. Menggunakan standar C99 akan memungkinkan variabel loop didefinisikan dalam blok for(), yang akan menyelesaikan masalah tanpa harus mencari solusi.

Linus Torvalds setuju dengan gagasan untuk mengimplementasikan dukungan untuk spesifikasi yang lebih baru dan mengusulkan untuk memindahkan kernel 5.18 untuk menggunakan standar C11, yang diterbitkan pada tahun 2011. Selama pengujian pendahuluan, perakitan di GCC dan Dentang dalam mode baru berlalu tanpa penyimpangan. Jika tidak ada masalah tak terduga yang muncul selama pengujian lebih menyeluruh, opsi '--std=gnu5.18' di skrip build kernel 89 akan diganti dengan '--std=gnu11 -Wno-shift-negative-value'. Kemungkinan menggunakan standar C17 juga dipertimbangkan, namun dalam hal ini perlu untuk meningkatkan versi minimum yang didukung GCC. Dimasukkannya dukungan C11 sesuai dengan persyaratan saat ini untuk versi GCC (5.1).

Sumber: opennet.ru

Tambah komentar