Linux核心5.18計畫允許使用C語言標準C11

在討論一組補丁來修復鍊錶程式碼中與 Spectre 相關的問題時,很明顯,如果允許符合較新版本標準的 C 程式碼進入內核,則可以更優雅地解決該問題。目前,新增的核心程式碼必須符合 89 年制定的 ANSI C (C1989) 規格。

程式碼中與 Spectre 相關的問題是由於在循環後繼續使用單獨定義的迭代器引起的 - 使用宏來迭代鍊錶的元素,並且由於循環迭代器被傳遞到該宏中,因此它是在循環本身之外定義並在循環後保持可用。使用 C99 標準將允許在 for() 區塊中定義循環變量,這將解決問題而無需提出解決方法。

Linus Torvalds 同意實現對較新規範的支援的想法,並提議在 5.18 核心中轉向 11 年發布的 C2011 標準。在初步測試中,新模式的 GCC 和 Clang 建構均順利通過,沒有出現任何偏差。如果在更徹底的測試過程中沒有出現意外問題,則 5.18 核心建置腳本中的「--std=gnu89」選項將會替換為「--std=gnu11 -Wno-shift-negative-value」。也考慮了使用C17標準的可能性,但在這種情況下,就需要增加GCC的最低支援版本。 C11 支援的包含符合 GCC 版本 (5.1) 的目前要求。

來源: opennet.ru

添加評論