El kernel de Linux 5.18 planea permitir el uso del estándar de lenguaje C C11

Mientras se discutía un conjunto de parches para solucionar problemas relacionados con Spectre en el código de la lista vinculada, quedó claro que el problema podría resolverse de manera más elegante si se permitiera el ingreso al kernel de código C que cumpla con una versión más reciente del estándar. Actualmente, el código del kernel agregado debe cumplir con la especificación ANSI C (C89), creada en 1989.

Un problema relacionado con Spectre en el código fue causado por el uso continuo de un iterador definido por separado después del bucle: se usa una macro para iterar sobre los elementos de la lista vinculada y, debido a que el iterador del bucle se pasa a esa macro, es definido fuera del propio bucle y permanece disponible después del bucle. El uso del estándar C99 permitiría definir variables de bucle en un bloque for(), lo que resolvería el problema sin tener que encontrar soluciones alternativas.

Linus Torvalds estuvo de acuerdo con la idea de implementar soporte para especificaciones más nuevas y propuso mover el kernel 5.18 para usar el estándar C11, publicado en 2011. Durante las pruebas preliminares, el montaje en GCC y Clang en el nuevo modo transcurrió sin desviaciones. Si no surgen problemas inesperados durante pruebas más exhaustivas, la opción '--std=gnu5.18' será reemplazada en los scripts de compilación del kernel 89 por '--std=gnu11 -Wno-shift-negative-value'. También se consideró la posibilidad de utilizar el estándar C17, pero en este caso sería necesario aumentar la versión mínima soportada de GCC. La inclusión del soporte C11 se ajusta a los requisitos actuales para la versión GCC (5.1).

Fuente: opennet.ru

Añadir un comentario