O kernel Linux 5.18 planeja permitir o uso do padrão de linguagem C C11

Ao discutir um conjunto de patches para corrigir problemas relacionados ao Spectre no código da lista vinculada, ficou claro que o problema poderia ser resolvido de maneira mais elegante se o código C que estivesse em conformidade com uma versão mais recente do padrão fosse permitido no kernel. Atualmente, o código do kernel adicionado deve estar em conformidade com a especificação ANSI C (C89), formada em 1989.

Um problema relacionado ao Spectre no código foi causado pelo uso contínuo de um iterador definido separadamente após o loop - uma macro é usada para iterar sobre os elementos de uma lista vinculada e, como o iterador do loop é passado para essa macro, é definido fora do próprio loop e permanece disponível após o loop. Usar o padrão C99 permitiria que variáveis ​​de loop fossem definidas em um bloco for(), o que resolveria o problema sem a necessidade de soluções alternativas.

Linus Torvalds concordou com a ideia de implementar suporte para especificações mais recentes e propôs mover o kernel 5.18 para usar o padrão C11, publicado em 2011. Durante os testes preliminares, a montagem no GCC e Clang no novo modo passou sem desvios. Se nenhum problema inesperado surgir durante testes mais completos, a opção '--std=gnu5.18' nos scripts de construção do kernel 89 será substituída por '--std=gnu11 -Wno-shift-negative-value'. Também foi considerada a possibilidade de utilização do padrão C17, mas neste caso seria necessário aumentar a versão mínima suportada do GCC. A inclusão do suporte C11 se enquadra nos requisitos atuais da versão GCC (5.1).

Fonte: opennet.ru

Adicionar um comentário